Ah oui, Alors tu pourrais peut-être procéder par intégration sur des pas de temps ? Désignons la dérivée par rapport au temps par '. Si la position (vecteur) est x, nous avons La vitesse = x' L'accélération = x''
Nommons x0, v0, a0 la position, la vitesse et l'accélération à l'instant précédent, et x1, v1, a1, la position, la vitesse et l'accélération à ce moment.
La seule force agissant sur le projectile est la gravité : mg. Par Newton, on sait que F = ma, nous avons donc mg = ma, et donc a = g. L'accélération est donc constante...
On commence à t = 0, on trouve facilement x0 = point de départ v0 = (vitesse de départ * cos alpha) selon x et (vitesse de départ * sin alpha) selon y a0 = g...
Ensuite on va avancer par des pas des temps dt avec une boucle du style double dt = 0.0001; //Plus le pas de temps est petit, meilleure est l'intégration double tfin = 20; //Durée de la simulation for (double t = 0; t < tfin; t += dt) { //Calcul de x1, v1 x0 = x1; v0 = v1; //a0 = a1; inutile car accélération constante. }
Le calcul de x1, v1 se fait par intégration, en supposant la vitesse constante dans l'interval de temps dt considéré.
Théoriquement, nous avons :
v(t) = x'(t) = lim (dt -> 0) (x(t+dt) - x(t)) /dt //Définition de la dérivée
Ici on prends dt très petit, sans qu'il tende réellement vers 0, c'est une légère approximation. Ce qui donne
dt * v = x1 - x0
Donc x1 = x0 + dt * v, où v est la vitesse moyenne dans l'interval de temps
Tout à fait similairement pour v, on a
v1 = v0 + dt * a0 = v0 + dt * g
Donc au final on a :
double dt = 0.0001; //Plus le pas de temps est petit, meilleure est l'intégration double tfin = 20; //Durée de la simulation for (double t = 0; t < tfin; t += dt) { //Calcul de x1, v1 v1 = v0 + dt * g; x1 = x0 + dt * (v1 + v0) / 2 //A chaque pas d'itérations, afficher ici le point x0 comme point de trajectoire // du projectile en t x0 = x1; v0 = v1; //a0 = a1; inutile car accélération constante. }
Bien sûr tout ceci est en notation vectorielle, je te conseille de faire une petite structure Vector avec deux champs x et y ainsi que les opérations nécessaires...
|