Quaternion und Singularität
Verfasst: 26.09.2021, 12:50
Hallo,
ich habe mal wieder ein mathematisches Problem.
Ich verwende ja Quaternionen für die Rotation. Nun geben ich über das GUI folgende Werte ein:
Rotation um X: 0°
Rotation um Y: 91°(!!! Problem bei >90° und <-90°)
Rotation um Z: 0°
Wenn ich mit diesen Werten ein Quaternion erstelle, und dieses Quaternion anschließend wieder in Euler-Winkel-Konvention überführe, dann erhalte ich folgende Werte:
Rotation um X: 180°
Rotation um Y: 89
Rotation um Z: 180°
Hier mal der Code:
Ich habe mal etwas gegoogelt und herausbekommen, dass sich dieser Effekt, oder Zustand, Singularität nennt.
Unter Anderem bin ich auch auf diese Seite herausgekommen, auf der beschrieben wird wie man diesen Effekt umgehen kann (etwas runterscrollen zu dem Abschnitt "Singularities").
Nur leider funktioniert das bei mir nicht, oder besser gesagt, ich mache dabei bestimmt etwas falsch.
Meine Frage nun:
Ist dieses Problem jemanden bekannt?
Bzw. weiß jemand wie ich das lösen kann?
Ich hätte also gerne genau die Werte nach dem glm::eulerAngles(orientation), die ich in der ersten Zeile angegeben habe.
Edit:
Hatte mich im Code bei der Angabe der Rotation um Y verschrieben. Es sollte nicht 90° sondern 91° heißen^^
ich habe mal wieder ein mathematisches Problem.
Ich verwende ja Quaternionen für die Rotation. Nun geben ich über das GUI folgende Werte ein:
Rotation um X: 0°
Rotation um Y: 91°(!!! Problem bei >90° und <-90°)
Rotation um Z: 0°
Wenn ich mit diesen Werten ein Quaternion erstelle, und dieses Quaternion anschließend wieder in Euler-Winkel-Konvention überführe, dann erhalte ich folgende Werte:
Rotation um X: 180°
Rotation um Y: 89
Rotation um Z: 180°
Hier mal der Code:
Code: Alles auswählen
glm::vec3 rotVec{ glm::radians(0), glm::radians(91), glm::radians(0) };
glm::quat orientation( rotVec);
//und jetzt gleich wieder zurück
glm::vec3 euler = glm::eulerAngles(orientation);
glm::vec3 eulerInDegree(glm::degrees(euler.x), glm::degrees(euler.y), glm::degrees(euler.z));
//eulerInDegree.x = 180
//eulerInDegree.y = 89
//eulerInDegree.z = 180
Ich habe mal etwas gegoogelt und herausbekommen, dass sich dieser Effekt, oder Zustand, Singularität nennt.
Unter Anderem bin ich auch auf diese Seite herausgekommen, auf der beschrieben wird wie man diesen Effekt umgehen kann (etwas runterscrollen zu dem Abschnitt "Singularities").
Nur leider funktioniert das bei mir nicht, oder besser gesagt, ich mache dabei bestimmt etwas falsch.
Meine Frage nun:
Ist dieses Problem jemanden bekannt?
Bzw. weiß jemand wie ich das lösen kann?
Ich hätte also gerne genau die Werte nach dem glm::eulerAngles(orientation), die ich in der ersten Zeile angegeben habe.
Edit:
Hatte mich im Code bei der Angabe der Rotation um Y verschrieben. Es sollte nicht 90° sondern 91° heißen^^