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ă esteatan2(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.