Math.atan2 în Java

Returnează unghiul punctului (x, y) față de axa orizontală, între -π și π, ținând cont de cadranul în care se află.

Sintaxă
static double atan2(double y, double x)

Ce face Math.atan2

Math.atan2(y, x) calculează unghiul dintre axa X pozitivă și linia de la origine la punctul (x, y). Atenție la ordine: întâi y, apoi x.

Spre deosebire de Math.atan(y / x), care dă rezultate doar între -90° și 90° și nu poate deosebi punctul (1, 1) de (-1, -1), atan2 folosește semnele ambelor coordonate și returnează unghiul corect în toate cele patru cadrane, între -π și π. Funcționează și pentru x = 0, unde y / x ar împărți la zero.

Parametri

Parametru Descriere
y Coordonata verticală.
x Coordonata orizontală.

Ce returnează

Unghiul în radiani, între -π și π.

Exemple

Exemplul 1: Unghiul în fiecare cadran

public class Main {
    public static void main(String[] args) {
        double[][] puncte = {{1, 1}, {-1, 1}, {-1, -1}, {1, -1}, {0, 5}};
        for (double[] p : puncte) {
            double x = p[0], y = p[1];
            System.out.printf("(%.0f, %.0f): atan2 = %.0f°, atan(y/x) = %.0f°%n",
                    x, y, Math.toDegrees(Math.atan2(y, x)), Math.toDegrees(Math.atan(y / x)));
        }
    }
}

Rezultat

(1, 1): atan2 = 45°, atan(y/x) = 45°
(-1, 1): atan2 = 135°, atan(y/x) = -45°
(-1, -1): atan2 = -135°, atan(y/x) = 45°
(1, -1): atan2 = -45°, atan(y/x) = -45°
(0, 5): atan2 = 90°, atan(y/x) = 90°

Exemplul 2: Direcția de la Iași spre Cluj pe o hartă

Pe o hartă simplificată, Cluj este la 280 km vest și 40 km sud de Iași. Unghiul arată direcția (0° = est, 90° = nord): -171.9° înseamnă spre vest, puțin spre sud.

public class Main {
    public static void main(String[] args) {
        double dx = -280;
        double dy = -40;
        double unghi = Math.toDegrees(Math.atan2(dy, dx));
        System.out.printf("Unghi: %.1f°%n", unghi);
        System.out.printf("Distanța: %.1f km%n", Math.hypot(dx, dy));
    }
}

Rezultat

Unghi: -171.9°
Distanța: 282.8 km

Greșeli frecvente

  • Inversezi argumentele: atan2(x, y) dă un unghi greșit. Ordinea corectă este atan2(y, x).
  • Te aștepți la un unghi între 0° și 360°: rezultatul este între -180° și 180°. Adaugă 360 la valorile negative dacă ai nevoie.

Comenzi înrudite

  • Math.asin: Funcțiile trigonometrice inverse: din valoarea unui sinus, cosinus sau tangente obții unghiul, în radiani.
  • Math.hypot: Calculează ipotenuza √(x² + y²), adică distanța de la origine la punctul (x, y), fără overflow intermediar.
  • Math.toRadians: Transformă un unghi din grade în radiani (toRadians) și invers (toDegrees).
  • Math.sin: Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani, nu în grade.