Ich versuche zu verstehen, wie die Quaternion-Rotationen funktionieren, ich fand dieses Mini-Tutorial Ссылка , aber Er macht einige Annahmen, die ich nicht trainieren kann, wie kann ich " die Rotationsvektoren um jede Achse berechnen, einfach indem ich den Vektor um eine Achse rotiere. " und wie berechnet er angleDegreesX, angleDegreesY und angleDegreesZ?
Kann jemand ein funktionierendes Beispiel oder eine Erklärung liefern?
Die kürzest mögliche Zusammenfassung ist, dass eine Quaternion nur eine Kurzform für eine Rotationsmatrix ist. Während eine 4x4-Matrix 16 Einzelwerte benötigt, kann eine Quaternion genau die gleiche Rotation in 4 darstellen.
Mathematisch gesehen bin ich mir vollkommen bewusst, dass das Vorstehende super vereinfacht ist.
Um ein wenig mehr Details zu liefern, lasst uns den Wikipedia-Artikel lesen:
Unit-Quaternionen bieten eine bequeme mathematische Notation zum Darstellen Orientierungen und Rotationen von Objekten in drei Dimensionen. Im Vergleich zu Euler Winkel sind sie einfacher zu komponieren und vermeiden Sie das Problem der kardanischen Verriegelung. Im Vergleich zu Rotationsmatrizen sind sie numerisch stabiler und kann sein effizienter
Was aus dem einleitenden Absatz nicht klar ist, ist, dass eine Quaternion nicht nur praktisch ist, sondern auch einzigartig. Wenn Sie eine bestimmte Ausrichtung eines Objekts haben, die sich um eine beliebige Anzahl von Achsen dreht, gibt es eine einzige eindeutige Quaternion, die diese Ausrichtung darstellt.
Wiederum, für den mathematisch geneigten, nimmt mein Eindeutigkeitskommentar oben rechtsdrehende Rotationen an. Es gibt eine äquivalente linkshändige Quaternion, die sich in der entgegengesetzten Richtung um die entgegengesetzte Achse dreht.
Zum Zwecke der einfachen Erklärung ist das eine Unterscheidung ohne Unterschied.
Wenn Sie eine einfache Quaternion erstellen möchten, die die Rotation um eine Achse darstellt, finden Sie hier eine kurze Reihe von Schritten, die Sie dorthin führen:
v = {x, y, z}
. Nur für Höflichkeit, wählen Sie bitte einen Einheitsvektor: Wenn es nicht schon von Länge 1 ist, teilen Sie alle Komponenten durch die Länge von v. theta
. Quaternion Konstruktion:
%Vor%Beachten Sie diese Unterteilungen durch zwei: diese sorgen dafür, dass es in der Rotation keine Verwirrung gibt. Bei einer normalen Rotationsmatrix ist die Drehung um 90 Grad gleichbedeutend mit der Drehung um 270 nach links. Die Quaternionen, die diesen beiden Rotationen entsprechen, sind verschieden: Sie können die eine nicht mit der anderen verwechseln.
BEARBEITEN: Beantworten Sie die Frage in den Kommentaren:
Lassen Sie uns das Problem vereinfachen, indem Sie das folgende Bezugssystem setzen:
Also, wenn wir ein Beispielobjekt (sagen wir einen Pfeil) haben, das anfängt, nach rechts zu zeigen (positive x-Achse). Wenn wir die Maus von der x-Achse nach oben bewegen, liefert uns die Maus ein positives x und ein positives y. Also, durchläuft die Reihe von Schritten:
%Vor%Sie brauchen etwas Grundrechenart, um zu tun, was Sie brauchen. Grundsätzlich drehen Sie einen Punkt um eine Achse, indem Sie die Matrix, die diesen Punkt darstellt, mit einer Rotationsmatrix multiplizieren. Das Ergebnis ist die gedrehte Matrixrepresentation dieses Punktes.
Die Zeile
%Vor%konvertiert die Graddarstellung einfach in eine Radiantendarstellung durch ein einfaches Formular (siehe dieser Wikipedia-Eintrag auf Radians )
Hier finden Sie weitere Informationen und Beispiele für Rotationsmatrizen: Rotation um beliebige Achsen
Es gibt wahrscheinlich Werkzeuge in Ihrem Programmierframework, um diese Rotation durchzuführen und die Matrizen abzurufen. Leider kann ich Ihnen mit den Quaternionen nicht helfen, aber Ihre Probleme scheinen etwas basischer zu sein.
Tags und Links java rotation quaternions