cs_coulix
Messages postés2Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention21 septembre 2003
-
21 sept. 2003 à 03:41
gillig
Messages postés32Date d'inscriptionmercredi 5 février 2003StatutMembreDerniè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. :)
gillig
Messages postés32Date d'inscriptionmercredi 5 février 2003StatutMembreDerniè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).
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...