Je me demande si quelqu'un a une manière élégante de calculer le scénario suivant.
J'ai un objet de (n) nombre de carrés, de formes aléatoires, mais nous allons prétendre qu'ils sont tous des rectangles.
Nous avons affaire à aucune gravité, alors considérons l'objet dans l'espace, dans une perspective descendante. J'applique une force à l'objet sur un carré spécifique (comme illustré ci-dessous).
Comment calculer l'angle de rotation, basé sur la force appliquée, à l'emplacement appliqué? Si appliqué dans le carré central, il irait tout droit. Comment doit-il se comporter plus je me déplace du centre? Comment calculer la vitesse de rotation?
Réponses:
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.
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)5) Couple : La composante perpendiculaire de la force multipliée par la longueur du bras du moment.
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 :
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
la source
orientation += angularVelocity * elapsedSeconds
est fausse, car elle surestime la vitesse sur le pas de temps, ce qui signifie que des valeurs de trame différentes donneront des orientations différentes. Une bonne formule serait la suivante:float oldVelocity = angularVelocity; angularVelocity += angularAcceleration * elapsedSeconds; orientation += 0.5f * (angularVelocity + oldVelocity) * elapsedSeconds;
. De plus, puisqu'il n'y a pas de gravité, je suggère d'utiliser «centre de masse» à la place. +1 pour la très bonne explication cependant.si les forces ne sont pas trop fortes, il est beaucoup plus facile de simuler la rotation en utilisant plusieurs points et ressorts les reliant. dans ce cas, vous vous contentez d'assumer votre forme en plusieurs points reliés par des ressorts. chaque point représente la masse et tout ce qui est en forme a une masse égale à zéro.
dans l'image ci-dessus, le point noir représente les masses et la ligne rouge représente les ressorts. ensuite, pour appliquer la force, il vous suffit de l'appliquer au point le plus proche et vous verrez que votre objet pivotera comme vous le souhaitez. Pour que votre forme ressemble à une structure solide, il est préférable de définir des ressorts avec une valeur d'amortissement élevée et une valeur k élevée.
la source