Vous essayez de calculer le couple. Le couple dépend de la force appliquée F, du point d'application et du centre de gravité de l'objet.
1) Centre de la messe . Définit le centre de masse de l'objet.
2) Point d'application : définissez le point auquel la force agit.
3) Moment Arm : La distance entre les deux points définis ci-dessus.
Point centerofMass
Point applicationPoint
Vector momentArm = applicationPoint - centerofMass
4) Force angulaire : Divisez votre force F en deux vecteurs orthogonaux, un parallèle à la ligne en 3) et un perpendiculaire. La composante parallèle n'affecte pas le moment cinétique. La perpendiculaire fait. Vous pouvez calculer la composante parallèle par projection vectorielle. Vous pouvez soustraire cela de l'original pour obtenir le composant perpendiculaire. En pseudocode ( dot
signifie produit scalaire)
Vector myForce
Vector momentArm
parallelComponent = momentArm * (dot(myForce, momentArm) / dot(momentArm, momentArm))
angularForce = myForce - parallelComponent
5) Couple : La composante perpendiculaire de la force multipliée par la longueur du bras du moment.
Vector angularForce
Vector torque = angularForce * momentArm.Length
Pour aller du couple à la vitesse angulaire:
1) Moment d'inertie : définition du degré d'inertie en rotation d'un objet donné. Par exemple, il faut plus de couple pour faire tourner une longue barre qu'une sphère de même masse. Si le réalisme ne vous préoccupe pas, vous pouvez prétendre que le moment d'inertie est relatif à la masse ou ignorer totalement la forme et la masse de l'objet.
2) accélération angulaire :
Vector angularAcceleration = torque / momentOfInertia
3) Vitesse angulaire : La vitesse angulaire continuera à augmenter tant que le couple est appliqué. Donc, une formule sera grossièrement "La vitesse angulaire à l'instant T est la somme cumulative de l'accélération angulaire jusqu'à T ". Ceci est exprimé en pseudocode par
void Update(float elapsedSeconds):
orientation += 0.5 * angularVelocity * elapsedSeconds;
angularVelocity += angularAcceleration * elapsedSeconds;
orientation += 0.5 * angularVelocity * elapsedSeconds;