π
<-

Trajectoire de balle et rebonds

Programmation et implémentation d'algorithmes.

Trajectoire de balle et rebonds

Unread postby canomod74 » Yesterday, 22:15

Bonjour :) ,

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 . :bored:
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
User avatar
canomod74
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: Yesterday, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile

Re: Trajectoire de balle et rebonds

Unread postby critor » Today, 00:17

Bonjour.

Je n'ai pas les images donc j'ai bricolé, mais je confirme le problème sur les rebonds sur les bords droit et gauche.
Image
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42133
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Trajectoire de balle et rebonds

Unread postby critor » Today, 00:23

Et effectivement, tu traites les rebonds à droite/gauche, de façon similaire au rebond bas.

C'est-à-dire que tu prends un nouveau point de départ (x0, y0, t=0) et donc repars de ce dernier point à vitesse maximale.

Là de suite, je ne vois pas de façon évidente de corriger sans complexifier sensiblement le code, ou bien le changer radicalement car je n'aurais pas codé la trajectoire de cette façon.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42133
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Trajectoire de balle et rebonds

Unread postby canomod74 » Today, 10:17

Salut, d'accord, si tu as un moment pour me proposer la solution à laquelle tu penses, avec plaisir, je vais continuer à chercher de mon côté
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
User avatar
canomod74
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: Yesterday, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile

Re: Trajectoire de balle et rebonds

Unread postby critor » Today, 12:25

Bonjour.

Finalement j'y arrive sans faire plus compliqué et en restant sur un fonctionnement paramétrique, juste en utilisant les paramètres de façon un peu différente.
Code: Select all
EXPORT TEST()
BEGIN
  LOCAL x, y, ysol, v0, t, dt;
  LOCAL theta, g;
  LOCAL vx, vy;

  // Initialisation des variables
  x := 20;
  y := 100;
  ysol := 60;
  v0 := 20;     
  theta := 77;
  g := 9.81/8;
  dt := 0.1;

  // 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 := x + vx*dt;
   y := y + vy*dt;
   vy := vy - g*dt;

   // Rebond au sol
   IF y < ysol AND vy < 0 THEN
     vy := -vy * 0.8; // Perte d'énergie
   END;

   // Rebond mur gauche ou droit
   IF x < 0 AND vx < 0 OR x > 319 AND vx > 0 THEN
     vx := -vx; // Inversion de vitesse
   END;

   WAIT(0.002);
  UNTIL y < ysol AND ABS(vy) < 1;

  WAIT;
END;

Image
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42133
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Trajectoire de balle et rebonds

Unread postby canomod74 » Today, 18:02

Parfait merci beaucoup :)

J'ai ajusté un peu les valeur pour que ça soit réaliste, mais c'est top.

Plus qu'a faire un petit jeu maintenant que j'ai la base qui va bien
J'ai aussi une SHARP EL-9300 et une HP PRIME G2, et une feu HP 48 GX que j'adorais, mais problème au niveau de l'écran, irréparable 🥲.
User avatar
canomod74
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: Yesterday, 22:05
Location: Haute-Savoie / ANNECY
Gender: Male
Calculator(s):
MyCalcs profile

Re: Trajectoire de balle et rebonds

Unread postby arnaudfpm » Today, 18:05

Bravo, j'allais te dire au lieu de réinitialiser t := 0, il faut calculer une nouvelle origine temporelle en fonction du dernier instant de rebond.


critor wrote:Bonjour.

Finalement j'y arrive sans faire plus compliqué et en restant sur un fonctionnement paramétrique, juste en utilisant les paramètres de façon un peu différente.
Code: Select all
EXPORT TEST()
BEGIN
  LOCAL x, y, ysol, v0, t, dt;
  LOCAL theta, g;
  LOCAL vx, vy;

  // Initialisation des variables
  x := 20;
  y := 100;
  ysol := 60;
  v0 := 20;     
  theta := 77;
  g := 9.81/8;
  dt := 0.1;

  // 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 := x + vx*dt;
   y := y + vy*dt;
   vy := vy - g*dt;

   // Rebond au sol
   IF y < ysol AND vy < 0 THEN
     vy := -vy * 0.8; // Perte d'énergie
   END;

   // Rebond mur gauche ou droit
   IF x < 0 AND vx < 0 OR x > 319 AND vx > 0 THEN
     vx := -vx; // Inversion de vitesse
   END;

   WAIT(0.002);
  UNTIL y < ysol AND ABS(vy) < 1;

  WAIT;
END;

Image
User avatar
arnaudfpm
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: Today, 17:53
Location: Paris
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Trajectoire de balle et rebonds

Unread postby critor » Today, 18:38

arnaudfpm wrote:Bravo, j'allais te dire au lieu de réinitialiser t := 0, il faut calculer une nouvelle origine temporelle en fonction du dernier instant de rebond.


critor wrote:Bonjour.

Finalement j'y arrive sans faire plus compliqué et en restant sur un fonctionnement paramétrique, juste en utilisant les paramètres de façon un peu différente.
Code: Select all
EXPORT TEST()
BEGIN
  LOCAL x, y, ysol, v0, t, dt;
  LOCAL theta, g;
  LOCAL vx, vy;

  // Initialisation des variables
  x := 20;
  y := 100;
  ysol := 60;
  v0 := 20;     
  theta := 77;
  g := 9.81/8;
  dt := 0.1;

  // 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 := x + vx*dt;
   y := y + vy*dt;
   vy := vy - g*dt;

   // Rebond au sol
   IF y < ysol AND vy < 0 THEN
     vy := -vy * 0.8; // Perte d'énergie
   END;

   // Rebond mur gauche ou droit
   IF x < 0 AND vx < 0 OR x > 319 AND vx > 0 THEN
     vx := -vx; // Inversion de vitesse
   END;

   WAIT(0.002);
  UNTIL y < ysol AND ABS(vy) < 1;

  WAIT;
END;

Image

La variable t n'est plus utilisée, il suffit de supprimer les dernières lignes la mentionnant :
Code: Select all
EXPORT TEST()
BEGIN
  LOCAL x, y, ysol, v0, dt;
  LOCAL theta, g;
  LOCAL vx, vy;

  // Initialisation des variables
  x := 20;
  y := 100;
  ysol := 60;
  v0 := 20;     
  theta := 77;
  g := 9.81/8;
  dt := 0.1;

  // Vitesse initiale
  vx := v0 * COS(theta*π/180);
  vy := v0 * SIN(theta*π/180);

  // 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 := x + vx*dt;
   y := y + vy*dt;
   vy := vy - g*dt;

   // Rebond au sol
   IF y < ysol AND vy < 0 THEN
     vy := -vy * 0.8; // Perte d'énergie
   END;

   // Rebond mur gauche ou droit
   IF x < 0 AND vx < 0 OR x > 319 AND vx > 0 THEN
     vx := -vx; // Inversion de vitesse
   END;

   WAIT(0.002);
  UNTIL y < ysol AND ABS(vy) < 1;

  WAIT;
END;
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 50.2%
 
Posts: 42133
Images: 16453
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor


Return to Programmation

Who is online

Users browsing this forum: André Lenormand and 0 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1266 utilisateurs:
>1224 invités
>35 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)