En réponse à l'utilisation de l'inverse du cosinus pour trouver les angles de retour via math.acos, c'est très bien tant que l'angle est <=90* ; au-delà, python n'aura aucun moyen de différencier l'angle voulu.
Observez.
>>> math.cos(5)
0.28366218546322625
Ci-dessus, j'ai demandé à python de me donner le cosinus d'un angle de 5 radian, et il m'a donné .28~ Super, ci-dessous je vais demander à python de me donner le radian qui a un cosinus de .28~. Ça devrait être 5, non ? Il vient littéralement de me dire que ça l'était.
>>> math.acos(0.28366218546322625)
1.2831853071795865
C'est faux ! Python renvoie 1,28~ radians. La raison est évidente lorsqu'on la trace visuellement, 1.28rad a le même cosinus que 5rad, ce sont des angles inverses. Chaque angle partage le même sinus avec un autre angle (et le -sinus avec deux autres). C'est-à-dire que 5/175* partagent un sinus équivalent. Ils partagent des cosinus inversement proportionnels .99~/-.99 respectivement. Leurs cousins en -sinus seraient 185 et 355. Le mème de relation ici est que tous ces angles partagent la même déviation angulaire de l'axe horizontal. 5*.
La raison pour laquelle python renvoie 1,28 et non 5 est que tous les ordinateurs/calculateurs sont basés sur une table de données de type boulier d'un angle/radian, son sinus, cos, tan etc etc. Ainsi, lorsque j'utilise math.acos(x), python demande au noyau de chercher dans cette table de données l'angle dont le cosinus est égal à x, et lorsqu'il le trouve, il renvoie la première entrée avec laquelle il apparaît. et ensuite, python me donne cet angle.
En raison de cette symétrie partagée et proportionnelle, les rapports sin/cos se répètent fréquemment. Et vous êtes susceptible de voir la même figure, plusieurs fois. Il n'y a aucun moyen pour python, ou le système d'exploitation, de déterminer la différence entre les deux angles dont vous avez besoin sans faire appel à une logique supplémentaire qui prend en compte la valeur -/+ du sinus de l'angle. Ou de la tangente de l'angle.
1.28 Rad has x cosine, y sine, z tan (72*)
1.88 Rad has -x cosine, y sine, -z tan (108*)
4.39 Rad has -x cosine, -y sine, z tan (252*)
5 Rad has x cosine, -y sine, -z tan (288*)
ou, vu de manière cartésienne,
negX,posY | posX,posY
-----+-----
negX,negY | posX,negY
1.88 Rad has -x cosine, y sine (108) | 1.28 Rad has x cosine, y sine (72*)
-----+-----
4.39 Rad has -x cosine, -y sine (252)| 5 Rad has x cosine, -y sine (288)
Donc si, pour une raison quelconque, j'ai besoin de choisir 5 radians (par exemple pour un dessin vectoriel ou un jeu pour déterminer les différents vecteurs des ennemis par rapport au joueur), je devrais faire une sorte de logique if/then en comparant les sinus/tangents.