Stai cercando di calcolare la coppia. La coppia dipende dalla forza applicata F, dal punto di applicazione e dal centro di massa dell'oggetto.
1) Centro di messa . Definire il centro di massa dell'oggetto.
2) Punto di applicazione : definire il punto in cui la forza agisce.
3) Moment Arm : la distanza tra i due punti sopra definiti.
Point centerofMass
Point applicationPoint
Vector momentArm = applicationPoint - centerofMass
4) Forza angolare : dividi la tua forza F in due vettori ortogonali, uno parallelo alla linea in 3) e uno perpendicolare. La componente parallela non influisce sul momento angolare. Quello perpendicolare lo fa. È possibile calcolare il componente parallelo mediante proiezione vettoriale. È possibile sottrarlo dall'originale per ottenere il componente perpendicolare. In pseudocodice ( dot
significa punto-prodotto)
Vector myForce
Vector momentArm
parallelComponent = momentArm * (dot(myForce, momentArm) / dot(momentArm, momentArm))
angularForce = myForce - parallelComponent
5) Coppia : la componente perpendicolare della forza moltiplicata per la lunghezza del braccio del momento.
Vector angularForce
Vector torque = angularForce * momentArm.Length
Per andare dalla coppia alla velocità angolare:
1) Momento d'inerzia : una definizione di quanta inerzia rotazionale ha un determinato oggetto. Ad esempio, per ruotare una barra lunga è necessaria una coppia maggiore rispetto a una sfera della stessa massa. Se non sei preoccupato per il realismo, puoi far finta che il momento d'inerzia sia relativo alla massa, oppure potresti ignorare completamente la forma e la massa dell'oggetto.
2) Accelerazione angolare :
Vector angularAcceleration = torque / momentOfInertia
3) Velocità angolare : la velocità angolare continuerà ad aumentare fino a quando viene applicata la coppia. Quindi una formula sarà approssimativamente "Velocità angolare al momento T è la somma cumulativa dell'accelerazione angolare fino a T. " Questo è espresso in pseudocodice come
void Update(float elapsedSeconds):
orientation += 0.5 * angularVelocity * elapsedSeconds;
angularVelocity += angularAcceleration * elapsedSeconds;
orientation += 0.5 * angularVelocity * elapsedSeconds;