Bonjour à tous,
J'ai un petit problème que je n'arrive pas résoudre alors que je suis sûr que la solution est simple. Pourtant je n'y arrive pas, il faut avouer que les maths n'ont jamais été mon point fort...
Pour l'instant, je dispose d'un pion et j'aimerai faire en sorte qu'il puisse tirer des projectiles avec une trajectoire rectiligne.
Les informations dont je dispose sont : la position X/Y (suivant l'axe par défaut (0,0) coin haut gauche), et l'angle de tir en radian.
Voici mon code pour l'instant, il marche presque comme je le souhaite... à un détail près. Si je tire avec un angle proche de pi/2 ou -pi/2, les projectiles sont beaucoup plus rapides que si je tire avec un angle plus petit.
Ayant réfléchis pas mal de temps dessus, je crois que le problème vient du fait que mon calcul tan(angle) retourne une valeur extrêmement grande étant donné que je me base sur un X constant (côté adjacent) et que l'angle est quasiment à 90°. Par conséquent, la valeur du côté opposé est aussi extrêmement grande. La solution serait de se baser sur un X non constant, mais tous mes autres calculs sont basés là-dessus... Donc je ne vois pas trop de solution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if ((direction < -1.6 && direction > -3.8)|| (direction > 1.6 && direction < 3.8)) vitesse = -10; else vitesse = 10; float largeur = position.X + vitesse; float tangente = (float)Math.Tan((double)direction); float hauteur = vitesse * tangente; position.Y = position.Y + hauteur; position.X = largeur;
Je suis sûr que ce problème est très courant, mais je n'ai pas trouvé de réelles solutions sur internet (google). Est-ce quelqu'un saurait comment résoudre mon problème ?
PS : j'ai entendu dire qu'il fallait utiliser Vector2.Normalize(ref Vector2, out Vector2). Mais lorsque je l'utilise, mes projectiles font n'importe quoi.
Bonne journée à tous et merci de m'avoir lu.
Partager