[RESOLU]Orienter emetteur de particules vers point

Bonsoir,

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 …

Merci pour votre aide.

Salut,

Tu as peut-être pas fait attention, mais les angles utilisés par cos sin acos asin sont en radians.

Même en faisant la conversion (radian * 180 / 3.14), l’angle reste proche de zéro.

C’est pourtant bien la formule acos((objet.X()-Emetteur.X)/Objet.Distance(Emetteur))*180/3.14 ?

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 :smiley:
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] ). :slight_smile: 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 … :frowning:

Et bien :

J’ai testé ( sur un émetteur de particule pour être sûr ), atan2 marche correctement.

Mais il faut l’écrire à la main.
Moi, je cherchais dans l’éditeur de formules. :laughing:

C’est bon donc, résolu !

Ah oui, en fait elle s’appelle “Arctangente à deux arguments” :slight_smile: