Wie funktioniert dieser Quaternion-Rotationscode?

8

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?

    
Ricardo Sanchez 08.06.2011, 14:40
quelle

2 Antworten

16

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:

  1. Wählen Sie Ihre Rotationsachse 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.
  2. Wählen Sie einen Drehwinkel aus, den Sie um diese Achse drehen möchten, und rufen Sie theta .
  3. auf
  4. Die äquivalente Einheit quaternion kann mit dem folgenden Beispielcode berechnet werden:

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:

  1. Wählen Sie die Mitte des Bildschirms als Ursprung (wir drehen uns darum).
  2. X Achse zeigt nach rechts
  3. Y-Achse zeigt nach oben (oben auf dem Bildschirm)
  4. Z-Achse zeigt aus dem Bildschirm auf Ihrem Gesicht (bildet ein nettes rechtshändiges Koordinatensystem).

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%     
Bob Cross 08.06.2011, 15:09
quelle
0

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.

    
Michael Helwig 08.06.2011 15:16
quelle

Tags und Links