Hi!
Mir ist vor kurzem ein Fehler aufgefallen, den ich bis jetzt nicht beheben konnte. Und zwar passiert er immer dann, wenn Objekte rotieren. Teils ist alles physikalisch korrekt, doch plötzlich fängt das Teil an rumzuspinnen. Dann beruhigt es sich wieder und dann spinnt es wieder! Ich weiß, das klingt jetzt ein wenig vage, doch ich weiß nicht, wie ich es anders beschreiben sollte. Hab noch keine Regelmäßigkeit feststellen können. Irgendwie (rein vom optischen) sieht es für mich aber so aus, als würde eine Funktion Richtung Polstelle kommen, oder ähnlichem! (ala tangens).
Angenommen folgendes Szenario:
Linearer Impuls gleich Null, Drehimpuls konstant. Rotationspräsentation durch ein Quaternion, numerischer Integrator: RK4.
Zeitliche Ableitung des Quaternions:
dq/dt = 1/2 * w(t) * q(t)
Integriert werden Position (= bleibt konstant), linearer impuls (ebenfalls), Drehimpuls (auch!) und Rotationsquaternion (siehe oben).
Nun braucht es noch ein wenig Code:
RK4 kann beliebig auch durch den Euler ersetzt werden, daher poste ich ihn nicht --> irrelevant.
Berechnung von omega. mRot wird aus dem Quaternion gewonnen:
|
C-/C++-Quelltext
|
1
|
*w = ogUtilsTransformCoords(L, *mRot * m_mInvInertiaTensor * ogMatrixTranspose(*mRot));
|
(Für mehr Infos einfach fragen!)
Der Inertiatensor wird mit einer Funktion berechnet, welche eigentlich für rechtsorientierte KoordSystem entwickelt wurde, ich habe ihn auf linksorientierte umgeschrieben. Bedeutet: es könnte durchaus der Fehler darin zu finden sein
Meine Frage: Habt ihr IRGEND eine Idee, einen Anhaltspunkt oder ähliches, was das Problem sein könnte? Könnte es mit links-rechtorientierung zu tun haben (bezüglich der Quaternions: spielt da die Orientierung eine Rolle?)
Haben Quaternion integrationen irgendwelche unzulässigen Zustände?
Ich hoffe, dass mir irgendjemand helfen kann, obwohl ich alles so vage formulieren musste... Danke, jedenfalls