-
angle entre deux points
Bonjour,
Voila, je suis en train de programmer un jeux tout simple et j'en suis au début du codage et je bute sur un point.
J'essaye de faire pivoter le héro en fonction de la ou se trouve le curseur.
J'ai essayé tout un tas de truc mais je n'arrive pas a trouver de bibliotheque ou d'algorythme qui me permette d'obtenir cet angle en degrés (pour pivoter l'image dans pygame).
J'ai essayé avec la librairie qu'il y a dans les cookbooks de pygames qui propose une fonction get_angle_between(self,other) qui semble tout indiqué surtout qu'elle est censée retourner un angle en degres. Hélas, ca ne me retourne des angles toujours assez faibles en général de 0 a 45 degrés.
Je n'arrive pas a comprendre comment faire.
Merci de bien vouloir m'aider :)
ps : désolé si j'ai posté au mauvais endroit.
-
Je sais que le post commence à se faire vieux, vu comment j'ai galéré pour trouver la réponse après avoir rencontré le même problème, ça pourra toujours être utilie à quelqu'un...
il faut utiliser des vecteurs.
En partant du principe que les axes x et y peuvent chacun être représentés par un vecteur unitaire
dans un plan O v(i) v(j) où i et j sont des vecteurs unitaires, on peut considérer pour un point N un vecteur v(ON) : (v(i)*x ; v(j)*y)
admettons le point P ( || i ||*x ; || j ||*y ) la position du personnage, et son vecteur associé v(OP)
admettons le point C ( || i ||*t ; || j ||*u ) la position du curseur, et son vecteur associé v(OC).
le vecteur v(PC) = v(OP)-v(OC)
il faut maintenant calculer l'angle relatif entre v(i) et v(PC).
alpha = acos( ( || v(i) ||² + || v(PC) ||² - || v(i) - v(PC) ||² ) / ( 2*|| v(i) || * || v(PC) || ) )
à noter que l'angle obtenu sera toujours <= à 180° (si exprimer en degrés) ou pi (si exprimé en radians), il faut donc s'aider de la direction du vecteur pour l'ajuster.
NB : au cas où tu sois aussi peu familier que moi aux notations mathémathiques, les || autours des vecteurs signifient leur magnitude (ou distance si tu préfère). Ne pouvant mettre de flèches au dessus des vecteurs, j'ai désigné les vecteur v(x) ou x est le nom du vecteur en question.
PS: un angle entre deux points n'existe pas