Gibt es einen Algorithmus zur Umwandlung einer Quaternion-Darstellung einer Rotation in eine Euler-Winkel-Darstellung? Die Rotationsordnung für die Euler-Darstellung ist bekannt und kann eine der sechs Permutationen sein (d. H. Xyz, xzy, yxz, yzx, zxy, zyx). Ich habe Algorithmen für eine feste Rotationsordnung gesehen (normalerweise NASA-Kurs, Bank, Rollkonvention), aber nicht für eine willkürliche Rotationsordnung.Gibt es einen Algorithmus zur Umwandlung von Quaternion-Rotationen in Euler-Winkel-Rotationen?
Darüber hinaus wird dieses Ergebnis mehrdeutig sein, da es mehrere Euler-Winkel-Darstellungen einer einzelnen Orientierung gibt. Dies ist akzeptabel (weil die Orientierung immer noch ist gültig, es ist vielleicht nicht die, die der Benutzer erwartet zu sehen), aber es wäre noch besser, wenn es einen Algorithmus gäbe, der Rotationsgrenzen (dh die Anzahl der Grade von Freiheit und die Grenzen für jeden Freiheitsgrad) berücksichtigt und die "sinnvollste" Euler-Repräsentation unter Berücksichtigung dieser Zwänge ergeben.
Ich habe das Gefühl, dass dieses Problem (oder etwas Ähnliches) in den IK- oder Starrkörperdynamikdomänen existieren kann.
Gelöst: Ich habe erkannt, dass es nicht klar sein könnte, dass ich dieses Problem durch die folgenden Ken Shoemake Algorithmen aus Graphics Gems gelöst. Ich habe zu der Zeit meine eigene Frage beantwortet, aber es fällt mir auf, dass es nicht klar ist, dass ich das getan habe. Weitere Informationen finden Sie in der Antwort unten.
Nur um zu klären - ich weiß, wie von einer Quaternion auf die so genannten ‚Tait-Bryan‘ Darstellung zu konvertieren - was ich die Konvention ‚NASA‘ rufe. Dies ist eine Rotationsreihenfolge (unter der Annahme, dass die 'Z'-Achse oben ist) von zxy. Ich brauche einen Algorithmus für alle Rotationsaufträge.
Möglicherweise besteht die Lösung darin, die Umwandlung der zxy-Reihenfolge vorzunehmen und daraus fünf weitere Umwandlungen für die anderen Rotationsreihenfolgen abzuleiten. Ich glaube, ich hatte gehofft, dass es eine "übergreifende" Lösung gibt. Auf jeden Fall bin ich überrascht, dass ich dort keine bestehenden Lösungen finden konnte.
Zusätzlich, und das sollte vielleicht eine separate Frage insgesamt sein, wird jede Konvertierung (unter der Annahme einer bekannten Reihenfolge, natürlich) eine Euler-Darstellung wählen, aber es gibt tatsächlich viele. Zum Beispiel sind die beiden Darstellungen (0, 0, 180) und (180, 180, 0) bei einer Rotationsreihenfolge von yxz äquivalent (und würden die gleiche Quaternion ergeben). Gibt es eine Möglichkeit, die Lösung mit Einschränkungen der Freiheitsgrade zu beschränken? Wie bei IK und Starrkörperdynamik? in dem obigen Beispiel, wenn es nur einen Freiheitsgrad um die Z-Achse gäbe, könnte die zweite Darstellung vernachlässigt werden.
Ich habe ein Papier aufgespürt, die ein Algorithmus in this pdf sein könnte, aber ich muss zugeben, dass ich die Logik und Mathematik ein wenig schwer zu folgen finden. Sicherlich gibt es andere Lösungen da draußen? Ist eine willkürliche Reihenfolge der Drehungen wirklich so selten? Sicherlich muss jedes größere 3D-Paket, das Skelettanimation zusammen mit Quaternion-Interpolation ermöglicht (d. H. Maya, Max, Blender usw.), genau dieses Problem gelöst haben.
Die Leute sind normalerweise faul genug zu versuchen, sich an irgendeine Art von Standard anzupassen. Meine unausgesprochene Vermutung wäre daher, dass Sie kaum eine Quelle für mehr als zwei oder drei der verschiedenen Permutationen finden könnten. –
Möglicherweise suchen Sie nach etwas anderem, da Euler-Winkel für jede Lösung eine unendliche Anzahl von Repräsentationen haben. –
Ich würde _love_ nicht auf die Verwendung von Euler-Winkeln für die Darstellung beschränkt sein, aber für die Domäne, in der ich arbeite (3D-Animation), sind sie die Standardmethode, um dem Benutzer Drehungen zu präsentieren. Und wegen des ihnen innewohnenden Problems (Gimbal Lock, etc.) ist es notwendig, dass die Rotationsreihenfolge ebenfalls editierbar ist. –