Atan2

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En trigonométrie, la fonction atan2 à deux arguments est une variation de la fonction arctangente. Pour tout arguments réels x et y non nuls, atan2(y,x) est l'angle en radians entre la partie positive de l'axe des x d'un plan, et le point de ce plan aux coordonnées (x,y). Cet angle est positif pour les angles dans le sens anti-horaire dit sens trigonométrique (moitié haute du plan, y > 0) et négatif dans l'autre (moitié basse du plan, y < 0).

La fonction atan2 fut en premier lieu introduite dans les langages de programmation informatique, mais elle est désormais aussi couramment utilisée dans les autres sciences et ingénieries. Elle est au moins aussi vieille que le langage de programmation Fortran et on la trouve maintenant dans la plupart des autres langages.

En termes mathématiques, atan2 retourne la valeur principale de la fonction argument appliquée sur le nombre complexe x+iy. Soit atan2(y, x) = Pr arg(x+iy) = Arg(x+iy). Le résultat pourrait varier de 2π sans aucun impact sur l'angle, mais pour garantir son unicité, on utilise la valeur principale dans l'intervalle ] -π ; π ]. Soit -π < atan2(yx) ≤ π.

La fonction atan2 est utilisée dans beaucoup d'applications impliquants des vecteurs de l'espace Euclidien, comme pour trouver la direction d'un point à un autre. Une des utilisations principales est la conversion des matrices de rotation en angles d'Euler, pour faire pivoter des représentations graphiques informatiques.

Dans certains languages informatiques, l'ordre des paramètres est inversé, ou la fonction est dénommée différemment. Sur les calculatrices scientifiques, le résultat de la fonction est souvent issu de la conversion des coordonnées rectangulaires (x,y) en coordonnées polaires.

Motivation[modifier | modifier le code]

La fonction arctangente à un seul argument ne fait pas la différence entre des directions diamétralement opposées. Par exemple, l'angle anti-horaire à partir de l'axe des x jusqu'au vecteur <1, 1>, calculé de la façon habituelle comme arctan(1/1), donne π/4 (radians), ou 45°. De la même façon, l'angle entre l'axe des x jusqu'au vecteur < -1, -1 >, avec la même méthode arctan(-1/-1), donne encore π/4, même si la réponse clairement attendue serait plutôt −3π/4, ou −135°.

La fonction "atan2" prend en compte le signe des deux composants du vecteur, et place l'angle dans le bon quadrant. Ainsi, atan2(1, 1) = π/4 et atan2(−1, −1) = −3π/4.

De plus, la méthode habituelle ne fonctionne pas dans le cas d'un angle de ±π/2 (or ±90°). Par exemple, une tentative pour trouver l'angle entre l'axe des x et le vecteur <0, 1>, nécessite l'évaluation de arctan(1/0), qui échoue à cause de la division par zéro. Alors que atan2(1,0) donne la bonne réponse π/2.

Quand les calculs sont effectués à la main, les corrections de quadrant nécessaires et la gestion des exceptions peuvent être faites par observation, mais dans un programme informatique, il est extrêmement utile de disposer d'une fonction unique qui délivre toujours un résultat correct non ambigu.

Définition[modifier | modifier le code]

Pour y≠0:

\operatorname{atan2}(y, x) = \begin{cases}
\varphi\cdot \sgn(y) & \qquad x > 0 \\
\frac{\pi}{2}\cdot \sgn(y) & \qquad x = 0 \\
(\pi - \varphi)\cdot \sgn(y) & \qquad x < 0 \\
\end{cases}

\varphi\, est l'angle compris dans [0,π/2[ de façon à ce que  \tan(\varphi) = \left| \frac{y}{x}\right|\,  et sgn est la fonction signe.

Et:

\operatorname{atan2}(0, x) = \begin{cases}
0 & \qquad x > 0 \\
\text{non defini} & \qquad x = 0 \\
\pi & \qquad x < 0 \\
\end{cases}

Notes:

  • Cela donne des résultats compris dans ]-π,π], qui peut être translaté dans [0,2π[ en ajoutant 2π aux valeurs négatives.
  • Traditionnellement, atan2(0,0) est non défini.
    • La fonction C, et la plupart des autres implémentations informatiques, sont conçues pour les efforts de transformations des coordonnées cartésiennes en polaires, et donc définissent toujours atan2(0,0). Dans les implémentations sans zéro signé, ou lorsque sont donnés des arguments zéro positif, le résultat est normalement défini à 0. La valeur rendue sera toujours comprise dans ]-π,π] plutôt que sortir en erreur ou retourner NaN ("Not a Number", cad "Pas un Nombre").
    • Les systèmes gérants les mathématiques symboliques devraient normalement retourner une valeur non définie pour atan2(0,0) ou bien signaler qu'une anomalie s'est produite.
  • Pour les systèmes comme la virgule flottante IEEE 754 qui savent gérer le zéro signé, les infinis ou NaN, il est habituel d'implémenter des extensions capables d'étendre les résultats possibles pour inclure -π et -0. Ces dernières pourraient aussi retourner NaN ou lever une exception lorsqu'un des arguments reçus est un NaN.

La bibliothèque mathématique libre FDLIBM disponible dans netlib montre dans son code source comment implémenter atan2 avec une gestion de valeurs spéciales IEEE.

Pour les systèmes ne disposant pas d'un multiplicateur hardware, la fonction atan2 peut être implémentée numériquement d'une manière fiable avec la méthode CORDIC. Dans ce genre de cas, il sera surement préférable de calculer atan(y) par atan2(y,1).

L'expression suivante dérivée de la formule de la tangente de l'arc moitié peut aussi être utilisée pour définir atan2. Cette expression devrait être plus adaptée à un usage symbolique que la définition précédente. Elle est néanmoins totalement inadaptée à l'utilisation en virgule flottante; la division provoque un débordement au voisinage de la partie négative de l'axe des x, et donne un NaN ou une erreur pour atan2(0,0).


 \operatorname{atan2} (y, x)=2 \arctan \frac{y}{\sqrt{x^2+y^2}+x}.

Variations[modifier | modifier le code]

Illustrations[modifier | modifier le code]

Le diagramme ci-dessous présente les valeurs prise par atan2 sur des points remarquables du cercle unitaire. Les valeurs, en radians, sont inscrites en bleu à l'intérieur du cercle. Les quatre points (1,0), (0,1), (-1,0), and (0,-1) sont notés à l'extérieur du cercle. Notez que l'ordre des arguments est inversé; la fonction atan2(y,x) donne l'angle correspondant au point (x,y).

Atan2 circle.svg

Le schéma suivant montre les valeurs prises par atan2 pour les points du cercle unitaire. Sur l'axe des X, on a les angles complexes des points. Ils partent de 0 ( point (0,1) ) et vont dans le sens trigonométrique en passant par les points :

  • (0,1) qui a pour angle complexe π/2 en radians,
  • (-1,0) qui a pour angle complexe π,
  • (-1,-1) qui a pour angle complexe 3π/2,

jusqu'à (1,0) qui a pour angle complexe 0 = 2π modulo
Sur ce schéma, on peut voir clairement apparaitre la discontinuité de la fonction atan2. Quand un point z traverse la partie négative de l'axe réel, par exemple va de (0,1) à (0,-1) en passant par (-1,0) ; son argument devrait aller de π/2 à 3π/2 en passant par π. Mais la valeur de la fonction atan2 ( valeur principale de l'argument ) va de π/2 à π, puis saute à -π (discontinuité), pour aller vers -π/2.

Atan2.PNG

Ci-dessous une vue 3D montrant la différence entre \operatorname{atan2} (y, x) et \operatorname{arctan} (y/x).

Atan2Diagram.png AtanDiagram.png

Références[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Liens externes (en anglais en attendant des équivalents français)[modifier | modifier le code]

Autres implémentations pour atan2 (en)[modifier | modifier le code]