Найдите полярный угол заданной точки.
Вход. Два целых числа – декартовы координаты точки, не совпадающей
с началом координат. Модуль каждого из чисел не превышает 10000.
Выход. Выведите одно вещественное
число – значение полярного угла данной точки в радианах из интервала [0; 2π). Ответ следует округлить до
6 десятичных знаков.
|
Пример
входа |
Пример
выхода |
|
2 3 |
0.982794 |
геометрия
Полярная система координат – это двумерная система, в которой каждая точка
плоскости однозначно задаётся двумя числами: полярным радиусом r и полярным углом φ (его также называют
азимутом или фазовым углом).
Радиус r равен расстоянию от
точки до центра, или полюса, системы координат. Угол φ – это
угол между полярной осью и лучом, соединяющим полюс с точкой; он отсчитывается
против часовой стрелки от луча, соответствующего направлению 0° (этот луч называют полярной осью).

Пусть точка P имеет декартовы
координаты (x, y) и полярные
координаты (r, φ). Тогда формулы перехода от полярной
системы координат к декартовой имеют вид:
![]()
Функция atan2(double y, double x) вычисляет значение арктангенса y/x и
возвращает угол в интервале (-π; π]. Если x = 0, или оба аргумента равны нулю, функция возвращает 0.
В
данной задаче полярный угол требуется вывести в интервале [0; 2π). Поэтому, если результат работы atan2
отрицателен, к нему следует прибавить 2π.
Читаем входные
данные.
scanf("%lf %lf",&a,&b);
Полярный угол точки вычисляем с помощью функции atan2.
res =
atan2(b,a);
Если результат работы функции atan2 оказывается отрицательным, к
полученному значению следует прибавить 2π, поскольку ответ должен лежать в
интервале [0; 2π).
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 оказывается отрицательным, к
полученному значению следует прибавить 2π, поскольку ответ должен лежать в
интервале [0; 2π).
if (res < 0) :
res += 2 * math.pi
Выводим ответ.
print("%.6f"
%res)