j'ai créé un petit programme, sur la HP PRIME G2 pour simuler le lancer d'un ballon de basket avec une équation de trajectoire, mais je rencontre un problème avec les collisions contre les mur.
Lorsque la balle arrive au bord droit de l'écran, elle repart bien vers la gauche, mais pas dans la continuité de la trajectoire, on dirait qu'elle repart avec la même énergie qu'au rebond précèdent.
- Code: Select all
VIEW "NBA JAM", START()
BEGIN
LOCAL x, y, x0, y0, v0, t;
LOCAL theta, g;
LOCAL vx, vy;
// Initialisation des variables
x0 := 20;
y0 := 100;
v0 := 20;
theta := 77;
g := 9.81/8;
// Vitesse initiale
vx := v0 * COS(theta*π/180);
vy := v0 * SIN(theta*π/180);
t := 0;
// Chargement des images
G2 := AFiles("fond_basket.png");
G3 := AFiles("ballon_basket.png");
DIMGROB_P(G1, 320, 240, #000000);
REPEAT
// Affichage des images
BLIT_P(G1, 0, 0, G2);
BLIT_P(G1, x, 239 - y, G3);
BLIT_P(G0, 0, 0, 320, 240, G1);
// Mise à jour des coordonnées
x := x0 + vx * t;
y := y0 + vy * t - (1/2) * g * t^2;
// Rebond au sol
IF y < 60 THEN
y := 60;
vy := -vy * 0.9; // Perte d'énergie
x0 := x; // On garde x au moment du rebond
y0 := y; // Maintenant y0 pour repartir du sol
t := 0;
END;
// Rebond mur gauche
IF x < 0 THEN
x := 0;
vx := -vx; // Inversion de vitesse
x0 := x; // Mise à jour du point de départ
y0 := y; // Continuité de la hauteur
t := 0;
END;
// Rebond mur droit
IF x > 320 THEN
x := 320;
vx := -vx; // Inversion de vitesse
x0 := x; // Mise à jour du point de départ
y0 := y; // Continuité de la hauteur
t := 0;
END;
t := t + 0.1;
WAIT(0.002);
UNTIL (x > 320 AND vx > 0) OR ABS(vy) < 1;
WAIT;
END;
Si vous trouvez d'où peux venir le problème, car je sèche .