Forum de la communauté SFML
Aide => Général => Discussion démarrée par: elhant1 le Décembre 28, 2013, 12:18:42 pm
-
Bonjour,
J ai un léger problème de géométrie: je dispose d un sprite qui occupe une
Position précise sur mon vecteur, il dispose d une orientation en degrés et
Se déplace toujours dans la direction face à lui. Comment puis je faire pour
Savoir de combien de x et de y il se déplace si par exemple il a
Une orientation de 20 degrés?
Merci de votre aide
-
Tu peux transformer l'angle d'orientation (en radians) de ton sprite en un vecteur direction :
direction.x = cos(angle)
direction.y = sin(angle)
Ensuite tu multiplies ça par la vitesse que tu veux.
-
Merci c'est exactement ce que je cherchais.
-
Bonjour,
J'ai une nouvelle question:
Je cherche à connaître l'angle de direction que mon sprite 1 doit emprunter pour rejoindre un sprite 2 en fonction de la position de ce sprite 2.
J'ai fait comme cela:
Angle=Asin((ysprite2-ysprite1) / racineCarrée((xsprite2 - xsprite1)² + (ysprite2 - ysprite1)²))
En clair j'ai fait l'arsin de la division du côté opposé à l'angle par l'hypothénuse ce qui devrait me donner donc l'angle cependant il n'est pas correcte.
Merci pour votre aide :)
EDIT: En fait plus précisément, il ne fait pas la différence lorsque le sprite 2 et derrière ou devant le sprite1 l'angle est toujours le même
EDIT2: Je pense que c'est parce que l'hypothénuse est selon mon calcul toujours positive alors qu'elle devrait pouvoir être négative pour monter qu'elle se trouve devant ou derrières mon sprite.
-
Utilise atan2 (http://www.cplusplus.com/reference/cmath/atan2/).
http://gamedev.stackexchange.com/questions/17105/getting-the-angle-between-two-objects/17127#17127
-
Vous êtes mon héros. Moi qui s'essayais à faire ça avec Al-Kashi...
Je crois que la programmation de programmes à rendu graphiques nécessite un meilleur niveau de maths que celui d'un tout nouvel élève de seconde :'(
En tout cas merci.
Une légère remarque cependant j'ai vu que parfois la fonction suivante me renvoyer des valeurs négatives d'angles :
aobj = 180 * Atan2(yobj - y, xobj - x) / PI
If aobj < 0 Then
aobj = 360 + aobj
End If
J'ai réussi à corriger cela de la manière suivante:
aobj = 180 * Atan2(yobj - y, xobj - x) / PI
If aobj < 0 Then
aobj = 360 + aobj
End If
If aobj >= 360 Then
aobj = aobj - 360
End If
Avec ce code ça marche sans aucun problème cependant si vous aviez le temps de m'éclairer sur ces étranges valeurs d'angles en radian négatifs...
Encore merci.
-
atan2 renvoie une valeur entre pi et -pi, donc si t'ajoutes 2pi (ou 360 en degrés comme tu le fais) quand la valeur de l'angle est négative tu te retrouves avec une valeur entre 0 et 2pi (entre 0° et 360°), je crois pas que ça puisse être négatif et ta première fonction me semble tout à fait correcte.
On apprend peut-être pas tout au collège, mais le niveau est suffisant pour comprendre les trucs utiles. Et avec un moteur de recherche et un niveau potable en anglais on peut déjà faire beaucoup de choses en 2D. ;)
Si ta question c'était de savoir pourquoi avec atan2 tu te retrouves avec un angle négatifs, ben t'as un cercle qui fait 360 (comme celui sur wikipedia (http://fr.wikipedia.org/wiki/Atan2#Illustrations)), le sens positif c'est de tourner dans le sens anti-horaire (inverse à celui des aiguilles d'une montre). Ensuite tu remarques vite que tourner de 3π/2 dans le sens positif c'est pareil que de tourner de π/2 dans le sens négatif.
Sinon pas besoin de se vouvoyer sur un forum. :D
-
Merci pour ton aide. :)