Ich berechne mir, in einem C-Programm, aus Euler-Winkeln ein Gesamt-Quaternion und möchte dieses wieder zurück in meine Euler-Winkel umrechnen.
Als Rotationsvorschrift habe ich die ZYX Vorschrift gewählt. Das heißt zuerst wird um die Z-Achse gedreht(Gier-Winkel), dann um die Y-Achse(Nick-Winkel) und dann um die X-Achse(Roll-Winkel).
Wenn ich nun die Euler-Winkel in ein Gesamt-Quaternion umrechne und dieses Quaternion wieder in die Euler-Winkel zurück rechnen möchte, komme ich bei bestimmten, anfangs "ungünstig gewählten", Euler-Winkeln nicht mehr auf die Ursprungswerte.
Wähle ich zum Beispiel einen Gier-Winkel von 179° und rechne das in ein Quaternion und dann wieder in Euler-Winkel um, bekomme ich den ursprünglichen Wert. Wähle ich allerdings einen Wert größer 179°, zB.: 181°, komme ich bei gleicher Berechnung auf den Wert 181° - 360° = -179°. Wähle ich einen Winkel von 190° komme ich später bei der Rückrechnung auf 360° - 190° = -170°. Das gleiche Problem habe ich auch bei dem Roll-Winkel.
Hier sind die Gleichungen, welche ich in meinem C-Programm implementiert habe. EulerToQuat:
QuatToEuler:
wird noch normiert
arctan arcsin arctan
In meinem C-Programm nutze ich die atan2 Funktion anstelle des arctan.
Hat jemand eine Idee wo hier mein Problem liegt?
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |