Sie versuchen das Drehmoment zu berechnen. Das Drehmoment hängt von der ausgeübten Kraft F, dem Angriffspunkt und dem Schwerpunkt des Objekts ab.
1) Schwerpunkt . Definieren Sie den Massenmittelpunkt des Objekts.
2) Punkt der Applikation : Definieren Sie den Punkt , an dem die Kraft wirkt.
3) Momentarm : Der Abstand zwischen den beiden oben definierten Punkten.
Point centerofMass
Point applicationPoint
Vector momentArm = applicationPoint - centerofMass
4) Winkelkraft : Teilen Sie Ihre Kraft F in zwei orthogonale Vektoren, einen parallel zur Linie in 3) und einen senkrecht. Die Parallelkomponente beeinflusst den Drehimpuls nicht. Das Senkrechte tut es. Sie können die Parallelkomponente durch Vektorprojektion berechnen. Sie können dies vom Original subtrahieren, um die senkrechte Komponente zu erhalten. Im Pseudocode ( dot
bedeutet Skalarprodukt)
Vector myForce
Vector momentArm
parallelComponent = momentArm * (dot(myForce, momentArm) / dot(momentArm, momentArm))
angularForce = myForce - parallelComponent
5) Drehmoment : Die senkrechte Komponente der Kraft multipliziert mit der Länge des Momentarms.
Vector angularForce
Vector torque = angularForce * momentArm.Length
Um vom Drehmoment zur Winkelgeschwindigkeit zu gelangen:
1) Trägheitsmoment : Eine Definition, wie viel Rotationsträgheit ein bestimmtes Objekt hat. Zum Beispiel ist mehr Drehmoment erforderlich, um einen langen Stab zu drehen als eine Kugel derselben Masse. Wenn Sie sich keine Gedanken über den Realismus machen, können Sie so tun, als ob das Trägheitsmoment relativ zur Masse ist, oder Sie könnten die Form und Masse des Objekts vollständig ignorieren.
2) Winkelbeschleunigung :
Vector angularAcceleration = torque / momentOfInertia
3) Winkelgeschwindigkeit : Die Winkelgeschwindigkeit steigt so lange an, wie das Drehmoment aufgebracht wird. Eine Formel lautet also ungefähr "Winkelgeschwindigkeit zum Zeitpunkt T ist die kumulative Summe der Winkelbeschleunigung bis T ". Dies wird im Pseudocode ausgedrückt als
void Update(float elapsedSeconds):
orientation += 0.5 * angularVelocity * elapsedSeconds;
angularVelocity += angularAcceleration * elapsedSeconds;
orientation += 0.5 * angularVelocity * elapsedSeconds;