Ce face std::atan2
std::atan2(y, x) returnează unghiul pe care îl face vectorul de la origine la punctul (x, y). Spre deosebire de atan(y / x), folosește semnele ambelor coordonate, deci știe în ce cadran este punctul și funcționează și când x este 0.
Atenție la ordinea argumentelor: întâi y, apoi x. Rezultatul este în intervalul [-π, π].
Parametri
| Parametru | Descriere |
|---|---|
y |
Coordonata verticală. |
x |
Coordonata orizontală. |
Ce returnează
Unghiul, în radiani, între -π și π.
Exemple
Exemplul 1: Patru puncte, patru cadrane
Cu atan(y / x), punctele (1, 1) și (-1, -1) ar avea același unghi.
#include <cmath>
#include <numbers>
#include <print>
int main() {
double puncte[][2] = {{1, 1}, {-1, 1}, {-1, -1}, {1, -1}};
for (auto& p : puncte) {
double x = p[0];
double y = p[1];
std::println("({:>2}, {:>2}): atan2 = {:>7.2f}°, atan = {:>6.2f}°", x, y,
std::atan2(y, x) * 180 / std::numbers::pi, std::atan(y / x) * 180 / std::numbers::pi);
}
}
Rezultat
( 1, 1): atan2 = 45.00°, atan = 45.00°
(-1, 1): atan2 = 135.00°, atan = -45.00°
(-1, -1): atan2 = -135.00°, atan = 45.00°
( 1, -1): atan2 = -45.00°, atan = -45.00°
Exemplul 2: Direcția spre o țintă într-un joc
#include <cmath>
#include <numbers>
#include <print>
int main() {
double jucator_x = 2, jucator_y = 3;
double tinta_x = 2, tinta_y = 10;
double unghi = std::atan2(tinta_y - jucator_y, tinta_x - jucator_x);
std::println("Ținta este la {:.1f}° (drept în sus)", unghi * 180 / std::numbers::pi);
}
Rezultat
Ținta este la 90.0° (drept în sus)
Greșeli frecvente
- Inversezi argumentele:
atan2(x, y)în loc deatan2(y, x). Obții unghiul față de axa verticală.
Comenzi înrudite
std::asin: Funcțiile trigonometrice inverse: din valoarea sinusului, cosinusului sau tangentei obții unghiul, în radiani.std::hypot: Calculează ipotenuza, adică √(x² + y²), fără depășiri la valori mari; din C++17 și în 3 dimensiuni.std::sin: Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani, nu în grade.std::complex: Numere complexe (a + bi), cu operațiile aritmetice obișnuite, modul, argument și funcții matematice.