Inscription / Connexion Nouveau Sujet
Niveau licence
Partager :

Problème de dynamique

Posté par
Ambryal
05-12-19 à 00:41

Bonjour,

Je suis étudiant en Licence d'informatique. Je ne me dirige pas du tout vers de la physique et j'ai toujours eu beaucoup de mal avec elle.

Je travaille depuis de nombreux mois sur un projet personnel de création de jeu. Cela passe par la création d'un moteur d'animations.

J'ai l'habitude de chercher les réponses à mes questions sur internet, et en général je les trouve. Si je me suis inscrit sur ce forum c'est que je suis completement perdu avec le problème sur lequel j'ai bloqué le plus longtemps de ma vie...

Voilà donc le problème que je cherche à résoudre depuis plusieurs jours :

-----------------------------------------------------------
Nous sommes en 1 dimension.
Un objet de taille nulle est pour simplifier à la position 0.
Il a une vitesse V0, qui peut être négative.
Il ne peut avoir au choix que l'accélération a OU -1*a.

Il doit aller à la position P.
-----------------------------------------------------------

Ce que je veux faire :
-----------------------------------------------------------
-Calculer le temps T que mettra l'objet pour aller en position P.
-Calculer le temps Tc où l'accélération doit s'inverser.
-Calculer pour tout temps t la position p de l'objet.
-Calculer pour tout temps t la vitesse v de l'objet.
-----------------------------------------------------------

Pour m'aider, j'ai mis en oeuvre mes seules vraies compétences, c'est à dire créer un simulateur qui me permet de visualiser mes solutions avec un objet qui bouge selon celle-ci.

Si je viens vous demander de l'aide, c'est que je piétine depuis vraiment trop longtemps...

Voici les résultats auxquels je suis arrivé :

-T=2*sqrt((V0/a)**2+P/a)-V0/a
Ça a l'air bon mais rien n'est moins sûr.

-Tc=2*sqrt((V0/a)**2+P/a)-V0/a
Ça fonctionne, mais ce n'est sans doute pas bon : Tc doit être nul si la vitesse est positive et grande (par exemple : V0=500m/s,a=20m/(s*s),P=50m), alors qu'avec cette formule Tc est presque nul et non nul.

-Pour t<Tc :
d=a*t**2/2 + V0*t
Presque bonne, le problème est dans le presque...
v=a*(t+v0/a)
A l'air bonne, mais je n'en sais rien

-Pour t>Tc :
d=a*t*T - a * t**2 /2 - a*T**2/2
Est "à moitié" bonne... (voire moins...)
v=a*(T-t-V0/a)+V0
A l'air bonne, mais je n'en sais rien


Je tiens à préciser deux choses :

-Je ne suis pas familier avec ce forum, je ne viens pas en attendant une solution miracle (même si j'en rêve), je viens parce que je suis perdu et que je ne sais pas vers qui me tourner... Si vous avez des liens où le problème est résolu par exemple ça serait déjà super, je n'ai pas réussi à en trouver...

-Je sais qu'il est écrit dans les règles du forum "Aider ne veut pas dire faire", mais pour le coup j'arrive en étranger complet au monde de la physique, réfléchir à des problèmes de physique est tristement désagréable pour moi. Si vous avez des pistes évidemment que je les prendrai, mais je n'ai rien à gagner dans mes études à résoudre ce problème moi-même, ce n'est pas mon domaine ni un problème que je prends plaisir à résoudre (désolé si ça peut sembler déplacé de dire ça ici, mais je tiens à être honnète). J'ai écrit "problème 'simple'" dans le titre peut-être abusivement, peut-être pas, je ne sais pas s'il est dur, mais par pitié, s'il est facile, je prierai mille fois le ciel pour vous si vous me balancez même violement des formules qui fonctionnent par magie...

Voilà j'ai été sans doute un peu long mais je ne sais pas où je mets les pieds et j'ai vraiment besoin d'une quelconque forme d'aide...


Merci,
Alexis G***

Posté par
gts2
re : Problème de dynamique 05-12-19 à 08:44

Bonjour,

Cela ressemble plus à des maths que de la physique, mais bon.
Je suppose que le mobile doit arriver avec une vitesse nulle en P ?

"Tc doit être nul si la vitesse est positive et grande"
Dans ce cas, Tc va être négatif et cela signifiera qu'il n'y a pas de solutions.

Sinon, d'un point de vue informatique, pourquoi avez-vous besoin de ces calculs : vous utilisez une méthode d'Euler ou autre et advienne que pourra.

Posté par
Ambryal
re : Problème de dynamique 05-12-19 à 11:49

Bonjour,

Quelle horreur j'ai oublié de préciser :

---------------------------------------
-La vitesse doit être nulle quand la position est atteinte.
-On n'inverse qu'une fois l'accélération, mais on choisit son signe au départ.
---------------------------------------


Merci de votre réponse :

Je ne sais pas si c'est des maths, mais je pensais que quand on intégrait une équation de position pour trouver la vitesse et l'accélération il s'agissait de physique (on a fait ça en physique en terminale).

Je me suis moi-même perdu dans mes explications pour Tc, je reprends avec des exemples, il y a deux principaux cas de figure :

-La vitesse PEUT devenir nulle avant P (ex : V0=-500m/s,a=+/-20m/(s**2),P=50m):
Alors, l'accélération de départ sera du même signe que P, puis elle s'inversera au moment Tc.

-La vitesse NE PEUT PAS devenir nulle avant P (ex : V0=500m/s, a=+/- 20m/(s**2), P=50m):
Alors, l'accélération de départ sera du signe opposé à P, l'objet dépassera P, puis l'accélération s'inversera et l'objet arrivera en position P avec une vitesse nulle.


Je ne comprends pas très bien la méthode d'euler, mais j'ai jusque là fait beaucoup d'approximations qui "fonctionnaient" lors de créations d'objets en mouvement.

Cependant je crois que ce n'est plus le cas ici :

Je serai dans mes projets très souvent amené à synchroniser des animations (par exemple couleur, rotation, position) de manière dynamiquement réaliste :

-Les éléments animés ensemble sur un même objet (exemple rotation, position, couleur), en plus d'avoir des "distances" de déplacement différentes, auront des accélérations de base différentes en fonction de leur nature. Pour les synchroniser, j'aurai alors besoin de tester pour chaque élément le temps d'animation nécessaire, puis de prendre le temps le plus grand parmi ceux là, puis d'instancier un changement de l'accélération de base de l'élément pour que tous les temps d'animation soient identiques pour cette animation.

-J'ai déjà le moteur pour des mouvements linéaires (exemple : rotation de la terre), mais j'ai impérativement besoin en plus d'un "mode" non linéaire. En effet, pour prendre un exemple tout simple, si je change la trajectoire d'un objet déjà en mouvement, le "mode" linéaire ne permet pas de rendre un effet d'inertie réaliste, l'objet ne continuera pas un peu le mouvement entamé.

-Je compte aussi animer beaucoup de choses simultanément, et je ne maîtrise pas "exactement" les moments t où la position sera rendue à l'écran. Il me semblait plus optimisé (au delà du fait que ça permette de modifier des données Pré animation pour que ces animations rendent mieux (exemple : soient synchronisées)), d'avoir une formule pour calculer la position exacte à tout moment.


Le problème me semblait si simple avant d'y réfléchir... Je suis désolé, je suis peut-être venu poser un problème compliqué de maths alors que je pensais poser un problème "simple" de physique...

Je ne sais toujours pas quoi faire, les profs de physique de la fac m'étaient inaccessibles, peut-être dois-je faire du forcing ou demander aux profs de maths?


Merci de votre réponse en tout cas, désolé de vous embêter avec tout ça...

Posté par
gts2
re : Problème de dynamique 05-12-19 à 13:17

Non, on va essayer d'avancer. Pour le moment une réponse de principe, après une "vraie" réponse.
"Je ne sais pas si c'est des maths" Je voulais dire que la physique c'est ce qui se passe avant, autrement dit la détermination de a.  Une fois a déterminé, x"=a, c'est du calcul.

"Je serai dans mes projets très souvent amené à synchroniser des animations" Je pensais que c'était le joueur qui gérait et que vous n'aviez qu'à représenter ce qu'il faisait.

"fonctionnaient lors de créations d'objets en mouvement." Pour déplacer un objet, il faut bien déterminer M(t+delta t) connaissant M(t), donc utiliser une méthode quelconque d'intégration (mais vous utilisez peut-être une bibliothèque)

"Alors, l'accélération de départ sera du signe opposé à P, l'objet dépassera P, puis l'accélération s'inversera et l'objet arrivera en position P avec une vitesse nulle."
OK je m'étais comme contrainte implicite de ne pas dépasser P.  Mais lors d'une animation de couleur, cela veut dire que la couleur va déborder puis revenir ?

J'ai compris l'utilité du Tc.

Pour revenir sur le pb maths/physique, en licence, les prof de maths risquent de vous dire que ce n'est pas des maths mais du calcul.



  

Posté par
gts2
re : Problème de dynamique 05-12-19 à 16:27

Voilà ce que je trouve dans le cas  V0 positive, si cela peut conforter vos calculs.

de 0 à t_C=\frac{2 V_0+\sqrt{2V_0^2-4 a d}}{2a} ; x=V0*t-a*t^2/2
marche si V_0>\sqrt{2ad}
de tC à t_f=2t_c-V_0/a ; x=x(t_C)+(V_0-a t_C)(t-t_C)+a(t-t_c)^2

si V_0<\sqrt{2ad}, il faut commencer avec une accélération positive  et
t_C=\frac{-2 V_0+\sqrt{2V_0^2+4 a d}}{2a} et t_f=2t_c+V_0/a

J'ai tracé les courbes x(t) correspondantes cela fonctionne.

Posté par
Ambryal
re : Problème de dynamique 05-12-19 à 19:45

Bonjour,


Merci infiniment de votre aide, je n'aurais jamais trouvé ce genre de résultats tout seul !

Cela fonctionne miraculeusement bien au début, cependant je rencontre un problème à la dernière borne qui ne colle pas avec d.

J'ai pris soin de recopier plusieurs fois scrupuleusement les formules, et j'ai fait un remplacement numérique à la main pour être sûr que ce n'est pas mon programme qui se trompe :

Trouvez-vous également 1042 au lieu de 300 comme position x finale pour :
d=300, a=70, V0=500 ?


Mon programme trouve cela, et j'ai relu plusieurs fois vos formules, et j'ai fait une application scrupuleuse à la main :

(attention les yeux)

(((2*500+sqrt(2*500*500-4*70*300))/(2*70))*500-70*((2*500+sqrt(2*500*500-4*70*300))/(2*70))*((2*500+sqrt(2*500*500-4*70*300))/(2*70))/2)+(500-70*((2*500+sqrt(2*500*500-4*70*300))/(2*70)))*((2*((2*500+sqrt(2*500*500-4*70*300))/(2*70))-(500/70))-((2*500+sqrt(2*500*500-4*70*300))/(2*70)))+70*(((2*((2*500+sqrt(2*500*500-4*70*300))/(2*70))-(500/70))-((2*500+sqrt(2*500*500-4*70*300))/(2*70))))*((2*((2*500+sqrt(2*500*500-4*70*300))/(2*70))-(500/70))-((2*500+sqrt(2*500*500-4*70*300))/(2*70)))

=1042 également


Merci encore de votre aide,

Alexis G***

Posté par
Ambryal
re : Problème de dynamique 05-12-19 à 19:53

OH mon dieu ABORT ABORT !

Ne vous embêtez plus à me répondre, j'ai tâtonné des corrections manuelles, et il se trouve que rajouter un "/2" au dernier terme de votre longue équation pour x semble résoudre le tout !

Cela fonctionne maintenant PARFAITEMENT c'est magnifique !

J'aurais cependant une dernière petite question sur le calcul des vitesses pour tout temps t, dont j'ai beaucoup besoin également, mes formules étaient-elles bonnes (modulo changement de signe), ou non?


Merci !

Posté par
Ambryal
re : Problème de dynamique 05-12-19 à 20:16

Désolé pour le triple post.

Après réflexion il ne faut que dériver les équations pour trouver la vitesse, je devrais pouvoir y arriver.

Merci du fond du c?ur, ça fait maintenant presque une semaine que mon manque de compétence en physique me rendait de plus en plus fou.

Vous ne savez pas comme je suis heureux de voir ces simulations fonctionner parfaitement, (même pour v0 négative !) !

Il me reste encore quelques détails à régler : les vitesses, isoler l'accélération ou la vitesse initiale dans le cas où ce sont elles les inconnues, mais je devrais m'en sortir maintenant !


Encore merci, je prierai mille fois pour vous.
Sincères salutations,
Alexis G***

Posté par
gts2
re : Problème de dynamique 05-12-19 à 20:40

Il y a pu y avoir des erreurs de frappe de ma part. Pour éviter cela je vous envoie le code en fichier pdf.  A la fin il y a les courbes simulées.



Mentions légales - Retrouvez cette page sur l'île de la physique - chimie
© digiSchool 2025

Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !