Eulerwinkel vs. Quaternions - durch die Spannung zwischen den internen Speicher und Präsentation für den Benutzer verursacht Probleme?

StackOverflow https://stackoverflow.com/questions/832805

Frage

Quaternionen sind wohl eine geeignete Wahl für intern Objekt Drehungen darstellen. Sie sind einfach und effizient zu interpolieren und eine einzige Orientierung eindeutig darstellen.

Allerdings Quaternionen in der Benutzeroberfläche präsentiert ist in der Regel ungeeignet -. Euler-Winkel generell viel vertrauter Benutzer sind, und ihre Werte sind ein wenig intuitiv und berechenbar

Euler-Winkel leiden an der Code-Ebene kompliziert ist - sie erfordern, dass eine Reihenfolge von Dreh gespeichert ist, und eine praktische Orientierung Komponieren (seien es Matrix- oder Quaternion) unter Verwendung dieser Ordnung und zugehöriger Winkel ist umständlich, gelinde gesagt.

Zuverlässige Einschübe werden am bequemsten quaternion Darstellung unter Verwendung - so bedeutet das, dass wir ständig zwischen einer Euler-Darstellung und einer quaternion Darstellung umwandeln müssen? Ist das machbar in Bezug auf Leistung?

Können wir speichern die Orientierungen als Quaternionen und wandeln sie nur für den Benutzer angezeigt werden? Dies kann nicht möglich sein, weil für jede gegebene Orientierung genau eine quaternion Darstellung ist, aber viele Euler Darstellungen. Wie wollen wir holen "die Euler-Darstellung, die derjenigen entspricht, die ursprünglich diese Orientierung definiert? Es scheint wie eine unmögliche Aufgabe -. Wir haben effektiv Informationen verloren, wenn sie eine quaternion Umwandlung

Können wir speichern, wie Euler-Winkel und dann zu quaternions konvertieren je nach Bedarf? Dies ist wahrscheinlich nicht skalierbar -. Umwandlung von einem Euler-Winkel zu einer Quaternion, Interpolation und dann Umwandlung wieder wahrscheinlich relativ teuer Code sein

Können wir einfach beiden Darstellungen speichern und die am besten geeigneten für jede gegebene Situation nutzen? Eine große Kosten in Bezug auf Speicher (Animationskurven für ein Skelett mit rund sechzig Knochen vorstellen) und sein diese Werte synchronisiert könnten halten teuer oder zumindest umständlich.

Hat jemand gesehen, verwendet oder wenn sie jede clevere Lösung für dieses Problem? Sicherlich die drei Optionen sind oben nicht aus Einzigen? Gibt es noch andere Problembereiche wie folgt aus, dass Haben gelöst?

War es hilfreich?

Lösung

Ich bin ein Raumfahrtingenieur; Ich habe quaternions für Raumfahrzeuglageregelung und Navigation wurden mit auf drei Jahrzehnte gehen. Hier sind einige Gedanken auf Ihrer Situation:

  1. Darstellende jede Art von Prozess, der Orientierung mit Euler-Winkeln ändert sich auf unmöglich ist grenzend. Euler-Winkel leidet unter Singularitäten - Winkel, die von sofort bis zu 180 Grad ändern als andere Winkel durch die Singularität gehen; Euler-Winkel sind praktisch unmöglich, für sequenzielle Rotationen zu verwenden. Quaternionen leiden nicht an einem dieser Probleme
  2. Es gibt 12 verschiedene mögliche Euler-Winkel Rotationssequenzen - XYZ, XYX, XZY usw. Es gibt keine „einfachste“ oder „rechts“ Satz von Euler-Winkel. Um einen Satz ableiten der Euler-Winkel, müssen Sie wissen, welche Drehfolge Sie verwenden, und auch daran halten.
  3. Ich schlage vor, Sie alle Lager- und Drehoperationen mit Quaternionen ausführen und wandeln nur eine Quaternion zu Euler-Winkel, wenn der Ausgang erforderlich ist. Wenn Sie dies tun, müssen Sie festlegen, welche Euler-Rotationssequenz Sie verwenden.

I haben Algorithmen für all diese Operationen und viele mehr: Quaternionen nach / von Euler-Winkeln von jeder Drehsequenz zu / von Rotationsmatrizen (Richtungskosinus Matrices), Quaternion Interpolation Anpassungs Position, Geschwindigkeit usw. an End- oder Zwischenpunkten, Verwendung von Quaternionen starren und flexiblen Körperdynamik und Kinematik.

Bitte kontaktieren Sie mich, wenn ich Ihnen behilflich sein können nhughes1ster@gmail.com

Andere Tipps

Ich bin ein Fan von Quaternionen. Um sich Arbeit zu machen, könnten Sie Ihre Präsentation für den Benutzer überdenken? Anstatt die Drehung an den Benutzer zu präsentieren, wie eine Reihe von Euler in Textform Winkel, können Sie stattdessen ein paar einfache 3D-Objekt auswählen und die quaternion Drehung auf das Objekt anwenden visuell die Drehung in der Tat angezeigt werden soll.

Warum Quaternionen nicht im Code verwenden und die Q Engel konvertieren, wenn für die Anzeige benötigt?

Sie können die Rotation als Achse + Drehwinkel darstellen, die im wesentlichen als quaternion gleich ist (bis zu einem Zeichen)

Ich glaube nicht, es Sinn Euler-Winkel intern einzusetzen - Sie wollen quaternions für alle Ihre Berechnungen verwenden, und in der Regel leisten können, um die Umwandlungen geht nicht überall. Wie für die es zurück zu Euler-Winkel für die UI-Umwandlung - wäre es so schlimm sein, wenn der Benutzer nur einen Winkel erhält, die den ursprünglichen Eingang äquivalent ist, aber anders dargestellt? Wenn Sie das Wandlungsrecht zu tun, sollten Sie mit dem „einfachsten“ am Ende Euler-Winkel für jede gegebene quaternion.

Wie viele Conversions reden wir. Es sieht aus wie Sie für etwa zwei transzendentale Operationen pro Umwandlung zu zahlen, die auf moderner Hardware in der Größenordnung von 100millions pro Sekunde zur Verfügung. Ich würde speichern beide, Quaternionen für Genauigkeit und Ästhetik und Euler-Rotationen für die Benutzerinformationen zu erhalten. Vielleicht ein Flag hinzuzufügen, um anzuzeigen, welche für einen bestimmten Gegenstand bevorzugt. Hinzu kommt, dass, müssen Sie nur die Umwandlung einmal pro gedreht Mitglied auszuführen. Sobald Sie eine Transformationsmatrix berechnet haben, seine mehrfach ergänzt, bis Sie aus Eckpunkten ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top