Quelle est la différence entre atan
et atan2
en C++?
Un petit détail, la plage -/2 <= atan() <= /2
inclut en réalité un point (pi/2
) du deuxième quadrant.
Quelle est la différence entre atan
et atan2
en C++?
De l'enseignement des mathématiques à l'école, nous savons que la tangente a pour définition
tan(α) = sin(α) / cos(α)
et nous différencions entre quatre quadrants en fonction de l'angle que nous fournissons aux fonctions. Le signe du sin
, du cos
et de la tan
a la relation suivante (où nous négligeons les multiples exacts de π/2
) :
Quadrant Angle sin cos tan
-------------------------------------------------
I 0 < α < π/2 + + +
II π/2 < α < π + - -
III π < α < 3π/2 - - +
IV 3π/2 < α < 2π - + -
Étant donné que la valeur de tan(α)
est positive, nous ne pouvons pas distinguer si l'angle provient du premier ou du troisième quadrant et s'il est négatif, il pourrait provenir du deuxième ou du quatrième quadrant. Ainsi, par convention, atan()
renvoie un angle du premier ou du quatrième quadrant (c'est-à-dire -π/2 <= atan() <= π/2
), indépendamment de l'entrée originale à la tangente.
Pour récupérer toutes les informations, nous ne devons pas utiliser le résultat de la division sin(α) / cos(α)
mais nous devons regarder les valeurs du sinus et du cosinus séparément. Et c'est ce que fait atan2()
. Il prend à la fois le sin(α)
et le cos(α)
et résout les quatre quadrants en ajoutant π
au résultat de atan()
chaque fois que le cosinus est négatif.
Remarque : La fonction atan2(y, x)
prend en fait un argument y
et un argument x
, qui est la projection d'un vecteur de longueur v
et d'angle α
sur les axes y et x, c'est-à-dire
y = v * sin(α)
x = v * cos(α)
ce qui donne la relation
y/x = tan(α)
Conclusion : atan(y/x)
retient certaines informations et on ne peut que supposer que l'entrée provenait des quadrants I ou IV. En revanche, atan2(y, x)
obtient toutes les données et peut ainsi résoudre l'angle correctement.
std::atan2
permet de calculer l'arctangente des quatre quadrants. std::atan
permet de calculer seulement des quadrants 1 et 4.
Les valeurs réelles sont en radians mais pour les interpréter en degrés, cela donnera :
atan
= donne une valeur d'angle entre -90 et 90atan2
= donne une valeur d'angle entre -180 et 180Pour mon travail qui implique le calcul de divers angles comme le cap et le relèvement en navigation, atan2
dans la plupart des cas fait l'affaire.
Atan(x) Retourne la valeur principale de l'arc tangente de x, exprimée en radians.
atan2(y,x) Retourne la valeur principale de l'arc tangente de y/x, exprimée en radians.
Remarque que en raison de l'ambiguïté des signes, une fonction ne peut pas déterminer avec certitude dans quel quadrant l'angle tombe seulement par sa valeur de tangente (atan seul). Vous pouvez utiliser atan2 si vous avez besoin de déterminer le quadrant.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.