Полярна система координат — це двовимірна система, в якій кожна точка площини однозначно задається двома числами: полярним радіусом та полярним кутом (його також називають азимутом або фазовим кутом).
Радіус дорівнює відстані від точки до центра, або полюсу, системи координат. Кут — це кут між полярною віссю і променем, що з'єднує полюс з точкою; він відраховується проти годинникової стрілки від променя, що відповідає напрямку (цей промінь називають полярною віссю).
Нехай точка має декартові координати і полярні координати . Тоді формули переходу від полярної системи координат до декартової мають вигляд:
Функція atan2(double , double ) обчислює значення арктангенса та повертає кут в інтервалі (-\pi; \pi]. Якщо x = 0, або обидва аргументи дорівнюють нулю, функція повертає .
У даній задачі полярний кут потрібно вивести в інтервалі [0; 2\pi). Тому, якщо результат роботи atan2 від'ємний, до нього слід додати .
Реалізація алгоритму
Читаємо вхідні дані.
scanf("%lf %lf",&a,&b);Полярний кут точки обчислюємо за допомогою функції atan2.
res = atan2(b,a);Якщо результат роботи функції atan2 виявляється від'ємним, до отриманого значення слід додати , оскільки відповідь повинна лежати в інтервалі [0; 2\pi).
if (res < 0) res += 2*PI;Виводимо відповідь.
printf("%.6lf\n",res);Реалізація алгоритму – клас
#include <stdio.h>
#include <math.h>
#define PI acos(-1.0)
class Point
{
private:
double x, y;
public:
Point(double x = 0, double y = 0) : x(x), y(y) {}
void ReadPoint(void)
{
scanf("%lf %lf",&x,&y);
}
double GetPolarAngle()
{
double res = atan2(y,x);
if (res < 0) res += 2*PI;
return res;
}
};
int main(void)
{
Point p;
p.ReadPoint();
printf("%.6lf\n",p.GetPolarAngle());
return 0;
}Java реалізація
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
double a = con.nextDouble();
double b = con.nextDouble();
double res = Math.atan2(b,a);
if (res < 0) res += 2 * Math.PI;
System.out.println(res);
con.close();
}
} Python реалізація
Читаємо вхідні дані.
import math
a, b = map(float,input().split())Полярний кут точки обчислюємо за допомогою функції atan2.
res = math.atan2(b,a)Якщо результат роботи функції atan2 виявляється від'ємним, до отриманого значення слід додати , оскільки відповідь повинна лежати в інтервалі [0; 2\pi).
if (res < 0) :
res += 2 * math.piВиводимо відповідь.
print("%.6f" %res)