-
Bonjour à tous !
Actuellement je me retrouve face à un problème concernant la vitesse x d'un objet selon l'angle vers lequel celui-ci est orienté. Si l'objet est lancé parallèlement à l'axe x tout va bien. En revanche si celui-ci est lancé selon un angle différent alors l'objet semble beaucoup plus rapide dans le mouvement (ce qui est logique en fait). Mon problème se situe donc ici, comment faire pour changer correctement la vitesse de x selon l'angle de tir ? Dois-je utiliser le coefficient directeur ? ou l'angle ?
Voici le résultat obtenu où l'on peut distinguer la différence de vitesse :
https://youtu.be/7Qyvlo0fTx8 (https://youtu.be/7Qyvlo0fTx8)
Et voici les opérations effectuées pour le mouvement :
// Calcul du coeff et de l'ordonnée à l'origine
m_coeff = (float) tan(m_angle * PI / 180);
m_ordOrigin = m_y - (m_coeff * m_x);
// Move
m_x += (m_angle * m_speed * dt) / 360.f;
m_y = (m_coeff * m_x) + m_ordOrigin; // y = mx + p
Donc l'objet suit correctement la trajectoire de la droite selon l'angle mais la vitesse de x ne diminue pas assez (elle oscille entre 14 et 16), même en appliquant une proportionnalité sur m_x.
Aurais-je oublié une donnée quelque part dans mon calcul ?
-
Les équations de projectile sont assez simples et très connues :
https://fr.wikipedia.org/wiki/Trajectoire_d%27un_projectile#.C3.89quations_horaires_et_cart.C3.A9siennes
(1er encadré)
-
Super merci ! Je vais voir ce que je peux faire avec ça, n'ayant pas manipulé ce type d'équations depuis quelques années je suis un peu perdu mais ça devrait revenir.
Je posterai la réponse une fois le problème résolu.
-
Tout est ok !
Finalement, étant donné que je n'applique aucune force sur les projectiles (gravité 0) et que le projectile n'est pas censé suivre une parabole, l'équation y = mx + p reste inchangée.
En revanche la vitesse donnée pour x évolue selon l'angle de tir initial donc en tenant compte des équations horaires de base et en convertissant l'angle de rotation du projectile en radian, m_x devient :
// Conversion de l'angle
float radA = (m_angle) * ((2 * PI) / 360.f);
// m_x
m_x += cos(radA) * m_speed * dt;
Encore merci pour le coup de pouce.
-
Ok, si la trajectoire est droite alors effectivement c'est plus simple
x = cos(angle) * speed * dt
y = sin(angle) * speed * dt
-
y = sin(angle) * speed * dt
Ah je n'avais même pas remarqué qu'il était possible d'éviter l'équation de droite classique ::), mais c'est vrai qu'en regardant de plus près l'équation horaire pour y je comprends mieux, ce qui m'évite le calcul du coeff. directeur et de l'ordonnée à l'origine. Merci bien.