Salut à tous,
Je m'attaque cette fois-ci à la réalisation d'une simulation sur ordinateur d'un pendule tout simple.
Sans vouloir utiliser les moteurs physiques existants je désire bien comprendre le mécanisme en le programmant moi-même.
Donc j'ai deux particules, le premier est fixé au mur en hauteur, et le deuxième est à une certaine distance du premier. C'est cette deuxième particule (que j'assimile à un point P de masse m pour faire une étude ponctuelle) qui se balancera de gauche à droite, elle fera un demi arc de cercle vers le bas de la 1ere particule qui est fixe.
Remarque : On considérera qu'une tige d'une certaine longueur et indéformable relie la particule 1 à la 2
Les forces qui s'appliquent sur la particule sont : le POIDS (m*g) vers le bas et la REACTION de la tige qui maintien la 2eme particule à égale distance de la 1ere.
C'est cette force de réaction qui me pose probleme car lors du balancement la longueur de la tige augmente jusuq'a un moment ou le système diverge
Je vous montre le code pour trouver la force de réaction:
Donc pour résumé j'ai calculer le vecteur direction de la force de réaction (qui passe par l'axe des deux particules), puis j'ai calculé le produit scalaire entre le poids et cette direction afin de déterminer la réaction qui doit compenser la force du poids.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 vecteur v12; vecteur v12normalise; float normeV12; Cercle * obj1 = cercle1; Cercle * obj2 = cercle2; v12.InitEnMetre(obj1->vPos.x - obj2->vPos.x, obj1->vPos.y - obj2->vPos.y); normeV12 = sqrt(v12.x*v12.x + v12.y*v12.y); v12normalise.x = v12.x / normeV12; v12normalise.y = v12.y / normeV12; float produitscal; produitscal = v12normalise.x*0.0f + v12normalise.y*1.0f; // produit scalaire entre deux vecteurs normalisés (le poids et la réaction) obj->vReaction.x = -3.0f*produitscal * obj->vPoids.y * v12normalise.x; obj->vReaction.y = -3.0f*produitscal * obj->vPoids.y * v12normalise.y; // je pense plus à -2.0f * ... mais ca marche mieux avec -3.0f
Plusieurs problèmes restent sans réponse:
1/ Lorsque le produit scalaire entre le poids et le vecteur portant la réaction vaut 1 (donc lorsqu'ils sont sur le même axe) il suffit de mettre R = -M*G afin de compenser le poids. Mais cette formule ne marche que si l'on place la 2eme particule exactement à -90° (-pi/2 centre trigo) car si l'on place la particule plus haut, la distance augmente allégrement car il faut compenser - en plus du poids - la vitesse à laquelle elle tombe.
Quelle autre méthode utilisé afin d'avoir un résultat vraie et en restant en temps réel c'est a dire que d'autres forces viendront se rajouter a celles ci et pas en continu (j'utilise RK4 pour l'intégration numérique)
Bon je m'arrête la, je pense que vous voyez d'ou vient mon problème qui a première vue peu paraître simple.
Partager