CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Physique d'une balle et rebond

Fvirtman
Fvirtman
Niveau 10
28 juin 2007 à 17:56:20

Salut !

Je suis en train de continuer mes tutos C++ sur mon site.
Actuellement, je fais des exemples sur l´utilisation de la physique dans un programme.
(dans mon tuto (cf ma carte), le §2.B a pour l´instant qu´un seul fichier : une balle en chute libre)

Pour cela, j´ai utilisé F = mA, en soumettant uniquement la balle a un champ de pesanteur F = P = mG, ce qui me permet d´ignorer le m.
Je gere donc tout ça avec un vecteur vitesse, une position, j´obtiens de belles simulations.

Le 2e tuto de ce paragraphe est presque pres, je n´ai plus qu´a le commenter : un rebond que je qualifierai de "bricolage" : c´est une fois que la balle est dans le sol que j´inverse le vy, ce qui est pas top.

Maintenant, je veux aller plus loin. J´ai déja commencé le 3e tuto la dessus. A chaque frame, je calcule le dt écoulé,
et je lance une évolution (en appliquant l´équation horraire) de parametre dt.
Or, si je detecte que cette évolution fera passer la balle a travers le sol, cela veut dire qu´il existe un st tel que 0 < st < dt tel que, pour une évolution de st, la balle soit pile sur le sol.

Je procede donc ainsi :

- calcul de st (une bete regle de 3)
- une Evolution de st -> apres cette évolution la, ma balle est pile sur le sol -> temps du rebond
- rebond
- Evolution de dt-st pour finir la frame.

Pour l´instant, je pars du principe que mon sol est bien droit (normale verticale).
Pour l´instant, mon rebond consiste juste a consiéder vy = -vy (vy est ma vitesse instantanée en y, apres évolution)

--> Cela me donne un bon résultat, mais ma balle rebondit sans atténuation.

Maintenant, je veux considérer une atténuation : je change donc, dans le rebond :
vy = -0.8*vy;

ça donne un beau truc, mais il y a quelque chose qui me gene : le vecteur vy ne tendra pas vers 0, (a cause de G qui lui donnra d´autres valeurs)
Du coup, finalement, ma balle "sautille" a la fin, et ne s´arrete jamais....

A mon avis, je compense mal l´apesanteur avec la réaction du support, ou il a quelque chose que je fais mal...

(lien temporaire pour illustrer)
http://perso.numericable.fr/~fvirtman/phys.zip

dnob700
dnob700
Niveau 10
28 juin 2007 à 18:17:52

pour calculer st, je ne crois pas qu´une règle de 3 suffise (l´équation est forcément du second degré vu qu´il y a quand même une accélération), mais ça ne change pas grand chose : considérer une règle de 3, c´est l´algo de Runge Kutta qui est ce qui est utilisé presque tout le temps pour ce genre de chose.

Pour l´inversion de la vitesse, il faut bien considérer le vy au temps st, là on voit bien que vy tend vers 0, car la bale est sur le sol, donc la prochaine fois qu´elle touchera le seul elle le fera avec la vitesse 0.8*vy (vu que c´est la vitesse avec laquelle elle l´a quitté), et vy tend vers 0, mais peut-être pas assez vite à ton gout (après tout, il faut une infinité de rebond pour que vy soit nul).

Une solution résonable est que lorsque vy est inférieur à une certaine valeurs, tu écrit vy = 0, c´est ce qui se produit en réalité. Une autre solution qui limite se phénomène de rebond est de faire aussi vx=0.8*vx (sans changer de signe), ce qui fait que ta balle reste plus logntemps visible. Tu peut aussi combiner ces deux possibilité (et faire décroitre vx linéairement une fois que vy=0, ou encore le faire décroitre d´un facteur proportionnel à lui même (0.2*vx) mais l´annuler lui aussi en dessous d´un certain seuil).

Bon ce sont les idées qui me passent par la tête, mais il y a probablement mieux.

agemO
agemO
Niveau 10
28 juin 2007 à 18:40:27

"vy = -0.8*vy"
"le vecteur vy ne tendra pas vers 0, (a cause de G qui lui donnra d´autres valeurs)"

Je comprend pas pourquoi quand tu fait ça vy ne tend pas vers zero.

Fvirtman
Fvirtman
Niveau 10
29 juin 2007 à 11:11:24

Je regarderai tout ça a tete reposée, a mon avis, le rebond éternel vient effectivement du mauvais calcul de ´st´ : il doit etre trop grand
-> du coup, la gravité agit trop longtemps a chaque frame, ce qui empeche vy de tendre vers 0 :)
Pas le temps de tester maintenant, mais je vous tiendrai au courant !

Merci en tout cas !

Sous forums
  • Astronomie
La vidéo du moment