Model physique de balle (colision elastique)

cs_coulix Messages postés 2 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 21 septembre 2003 - 21 sept. 2003 à 03:41
gillig Messages postés 32 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 décembre 2003 - 30 oct. 2003 à 05:02
Bonjour =)
apres avoir programmer une sorte de pong en mode text, j essaye de faire une chose simple :

j ai ma balle gotoxy(5,1)
je la lache et elle rebondit selon l axe y, mais a cahque rebond elle pert de l energie 10% de (1/2 m v^2)
acceleration = dv/dt

bref c est pas tres clair
comment faire pour que la balle accelere jusquea gotoxy(5,50), pui rebondissent en ralentissant ect...

si vous avex un bout de code qui traine =)
apperement il ny a pas de source de ce genre ici. :)

1 réponse

gillig Messages postés 32 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 4 décembre 2003
30 oct. 2003 à 05:02
En fait il faut comprendre que a=dv/dt est plus utile sous la forme v = Integrale(a.dt). Il faut donc faire la somme des a.dt pour connaitre la vitesse.
Même chose pour la position, somme des v.dt .
Le seul truc chiant c'est le rebond (voir commentaires).

Je propose quelque chose du genre :

#define ACC_PESANTEUR 9.8 // m/s2
#define PERTE_ENERGIE 0.01 // 10 % perdu au rebond

double h = 1; // Hauteur
double v = 0; // Vitesse
double dt = 0.04 // <=> 25 ème de seconde
double dh; // Variation de la hauteur pendant dt
double dv; // variation de la vitesse pendant dt
while (...)
{
dv = ACC_PESANTEUR * dt;
v += dv;
dh = v * dt;
if (h + dh < 50)
h += dh;
else
{
// on va rentrer en collision =>
// on avance la balle au point de
// rebond (1), on calcule la nouvelle
// vitesse (2) et le temps qu'il reste (3), et
// on redéplace la balle

v = -v; // (2) ça repart dans l'autre sens
v *= PERTE_ENERGIE;

double dt2 = dt*(dh+h-50)/dh; // (3)
h = 50; // (1) pas avant calcul précédent!
dh = v * dt2; // Réactualise dh
h += dh;
}
// afficher
}
Pour passer en 2D, c'est simple, tu transformes h en x et y, v en vx et vy, etc. Tu doubles le code, quoi...
0
Rejoignez-nous