Convertir un angle ... en déplacement

Fermé
Mathieu - 14 févr. 2014 à 16:55
 Yoda - 17 févr. 2014 à 13:22
Bonjour à tous !

Dans le cadre d'un petit jeux que j'essaye de réaliser je dois trouver une formule permettant de convertir un angle en sens de déplacement, pour l'heure j'utilise simplement une structure conditionnelle IF mais j'aimerais trouver une "formule" pour convertir l'angle en déplacement.

If (angle > 337.5 && angle < 22.5) {
// Direction sud
dX = 0;
dY = -2.24;
}
If (angle > 22.5 && angle < 45) {
// Direction sud est
dX = -2;
dY = -1;
}
If (angle > 45 && angle < 67.5) {
// Direction est
dX = -2.24;
dY = 0;
}

et ainsi de suite, pour le moment j'utilise 8 angles possibles...

Voilà si un matheux/matheuse a l'âme charitable passe par là et qu'il veux bien m'aider je lui en serait reconnaissant !!
A voir également:

6 réponses

Bonjour,

Utilises les fonctions trigo.
sinus(a) -> décalage sur l'axe des X
cosinus(a) -> décalage sur l'axe des Y

angle exprimé en radians
sinus et cosinus compris entre -1 et +1

A+
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
14 févr. 2014 à 18:02
Lut', ce que tu cherches à obtenir se calcule grâce aux fonctions cosinus et sinus.
C'est de la trigonométrie, du niveau de Première (j'ai eu un contrôle dessus la semaine dernière...). Ne t'en fais pas si jamais tu n'est pas en 1ere, avec un schéma c'est plutôt simple à comprendre.
Voilà le dit schéma, le cercle trigonométrique.
En fonction de ton angle, on peut déterminer une abscisse et une ordonnée (d'un point sur le bord du cercle), qui indiquera la "direction" que tu souhaites. L'angle est exprimé --sur le schéma et dans les fonctions sin et cos du C/C++/C#/Java-- en radian, entre -pi et pi; le schéma donne des exemples radian/degrés.
Pour faire simple la conversion c'est:
float angleRadian = angleDegre * (pi/180);

Après on utilise
dX = cos(angleRadian);
pour avoir l'abscisse, et
dY = sin(angleRadian);
pour avoir l'ordonnée du point.
Il est a noter que les valeur de cosinus et sinus sont toujours comprises entre -1 et 1, donc il faudra peut-être multiplier les résultats par un nombre pour "aller plus vite".
0
Salut !

Merci pour les réponses ça fonctionne parfaitement !! Mais je viens de me rendre compte que ça ne fonctionne pas sur une grille isométrique, en fait un angle de 45° correspond à un déplacement en utilisant un angle d'environ 26.6°, existe t-il une formule pour transformer l'angle en angle dans un repère isométrique ?

Merci !
0
Bonjour,

Les angles doivent etre exprimés en radians.
Le cercle vaut 2.Pi radians, soit 360 degrés, soit 400 grades
En prenant la valeur approchée de Pi=3,1416 on peut peut faire toutes les transformations.
Ex:
1° = 2Pi/360 = 2*3,1416 / 360 = 0,017453 rd

26,6° = 2Pi * 26,6 / 360 = 2*3,1416 * 26,6 / 360 = 0,4642586 rd

A+
0
Bonjour à tous !

Ok alors avec de nombreux test ce WE il me reste un problème. La conversion de mon angle en radian puis en prenant le cosinus et le sinus fonctionne parfaitement, mais uniquement dans le cadre d'un cercle parfait, puisque j'utilise un affiche isométrique il s'agit plutôt d'un ovale, un cercle "réduit" dans sa hauteur de 50%. Comment inclure cette particularité dans mon calcul ?

Merci encore pour tout, j'apprécie vraiment !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 févr. 2014 à 09:53
Bonjour

Tout simplement, tu multiplies le dX par le coefficient "qui va bien" (environ 2 d'après ce que tu dis)
0
Bonjour,

Pour un ovale, disons plutôt une ellipse,
la distance du centre à un point de l'ellipse est donnée par la relation

t = (a*b) / Racine( b²*Cos²(angle) + a²*Sin²(angle))

a est le grand rayon (axe des x)
b est le petit rayon (axe des y)
angle : angle entre l'axe du grand rayon et le rayon intermédiaire (dans le sens trigonométrique).

t étant calculé, il ne reste plus qu'a appliquer les formules classiques
dX = t * sin(angle)
dY = t * cos(angle)

A+.
0