Je bute sur un détail. Et plus je regarde sur Internet, moins j’y comprends quelque chose.
Mon problème est simple : j’ai un émetteur de particules. Je veux que cet émetteur de particules s’oriente en direction d’un point.
Il y a bien l’action “Tourner un objet vers un autre”. Mais ça ne marche que pour les sprites.
Or, ce que je veux, c’est modifier dynamiquement les angles d’émission 1 et 2, de sorte que mon émetteur arrose en direction d’un point donné.
Je ne possède donc que 4 éléments : les deux coordonnées de l’émetteur et les deux coordonnées du point.
Comment je fasse ?
L’une des solutions seraient cos-1 ((objet.X-emetteur.X)/distance entre deux objets). Sauf que cos-1 n’existe pas sous GD. C’est acos …
Mais acos me renvoie un angle quasi-nul dans toutes les occurrences. Logique puisque mon point peut être n’importe où autour de l’émetteur. Il me faut aussi prendre en compte le asin.
Mais comment et à quel moment ?
Sur Internet, il me sort des formules alakon à coup de sin, tan et cos. Il me parle de cercle trigonométrique, mais sans jamais me dire clairement comment déterminer un angle par rapport à une position sur le cercle.
Bref, c’est la loose.
Et je refuse de croire qu’un truc aussi basique ne soit pas plus simple à réaliser.
La solution la plus simple serait une fonction analogue à celle du sprite, qui oriente sa direction vers un point.
Mais en attendant qu’elle y soit …
Vu qu’en informatique* on est souvent confronté à ce problème, il existe une fonction faite pour ça qui s’appelle atan2(y,x) : Elle renvoie l’angle entre le vecteur unité de l’axe des abscisses et le vecteur de coordonnées (x;y).
Dans ton cas, il faut donc faire atan2(objet.Y()-Emetteur.Y(),objet.X()-Emetteur.X())*180/3.14.
( J’ai rajouté pour la prochaine version deux expressions : ToRad et ToDeg pour alléger un petit peu les conversions d’unité ).
*Mathématiquement, si on ne dispose pas de atan2, il faut normalement :
-Normer le vecteur, c’est à dire le diviser par sa longueur.
-Faire arccos(vecteurNormé.x) pour avoir l’angle à un signe près.
-Mettre un signe + si vecteurNormé.y > 0 ( et donc un signe - si vecteurNormé.y < 0 ).
Bref, c’est la galère
Mais normalement, ta dernière formule aurait du marcher ( à un signe près ).
Oui, normal, cos n’est pas une bijection sur l’ensemble des réels ( Il faut se limiter au domaine [0;Pi] ). C’est pour ça que la notation cos-1 n’est pas valide et que la fonction réciproque de cos s’appelle arccos ( abrégée en acos ).
Désolé de continuer à faire mon boulax (c’est de la trigo de 3eme parait-il … ).
Mais concrètement, la bonne formule dans GD pour avoir mon angle en degré à partir de deux points, ce serait quoi ?
Parce que atan2 n’a pas l’air d’exister non plus …