Знайти полярний кут точки#2129

Знайти полярний кут точки (Розбір)

Полярна система координат — це двовимірна система, в якій кожна точка площини однозначно задається двома числами: полярним радіусом та полярним кутом (його також називають азимутом або фазовим кутом).

Радіус дорівнює відстані від точки до центра, або полюсу, системи координат. Кут — це кут між полярною віссю і променем, що з'єднує полюс з точкою; він відраховується проти годинникової стрілки від променя, що відповідає напрямку (цей промінь називають полярною віссю).

Нехай точка має декартові координати і полярні координати . Тоді формули переходу від полярної системи координат до декартової мають вигляд:

\begin{cases} x = r \cos \varphi, \\ y = r \sin \varphi. \end{cases}

Функція 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)