web-dev-qa-db-fra.com

Python atan ou atan2, que devrais-je utiliser?

Ma formule F = arctan (ImZ/ReZ)

Il y a deux options:

Option 1 (atan):

ImZ=-4.593172163003
ImR=-4.297336384845

>>> z=y/x
>>> f1=math.atan(z)
>>> f1
0.8186613519278327

Option 2 (atan2)

>>> f=math.atan2(y,x)
>>> f
-2.3229313016619604

Pourquoi ces deux résultats sont-ils différents?

7
Richard Rublev

Atan prend un seul argument et Atan2 prend deux arguments. Le but d'utiliser deux arguments au lieu d'un, est de recueillir des informations sur les signes des entrées afin de renvoyer le quadrant approprié de l'angle calculé, ce qui n'est pas possible pour un seul argument Un bronzage

 enter image description here

Le résultat Atan2 est toujours compris entre -pi et pi.

Référence: https://en.wikipedia.org/wiki/Atan2

22
Abdul Rauf

docstring pour math.atan:

atan (x) Renvoie l'arc tangente (mesurée en radians) de x.

docstring pour math.atan2:

atan2 (y, x) Renvoie l'arc tangente (mesurée en radians) de y/x. Contrairement à atan (y/x), les signes de x et de y sont pris en compte.

Pour être très complet, voici ce que dit la doc sur atan2:

math.atan2 (y, x) Renvoie atan (y/x), en radians. Le résultat est compris entre -pi et pi. Le vecteur dans le plan de l'origine au point (x, y) fait cet angle avec l'axe des X positif. Le point atan2 () est que les signes des deux entrées lui sont connus, ainsi il peut calculer le quadrant correct pour l'angle. Par exemple, atan (1) et atan2 (1, 1) sont tous les deux pi/4, mais atan2 (-1, -1) est égal à -3 * pi/4.

C'est donc assez clair: les sorties sont différentes en raison des signes ImZ et ImR. atan2 renvoie le quadrant approprié, contrairement à atan.

7
DevShark

Une formule pour avoir un angle dans le sens anti-horaire à partir de 0, c'est-à-dire l'axe positif de x,

à 2pi pour toute valeur de x et y. Pour x = y = 0, le résultat est indéfini.

f(x,y)=pi()-pi()/2*(1+sign(x))* (1-sign(y^2))-pi()/4*(2+sign(x))*sign(y)

    -sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
0
theodore panagos