Was ist eine Quaternion?


50

Was ist eine Quaternion und wie funktionieren sie? Welche Vorteile bietet die Verwendung von drei Punkten in einer 2D-Ebene? Wann schließlich wird die Verwendung von Quaternionen als bewährte Methode angesehen?



Historisch gesehen, denke ich, kamen zuerst die Quaternionen, und später wurden die Punkt- und Kreuzprodukte von den Quaternionen abgeleitet.

2
Ich fand diesen animierten Artikel sehr informativ: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly

In der reinen Mathematik glaube ich, dass Quaternionen 3 komplexe Zahlen sind, wie i² = j² = k² =
ijk

Quaternionen sind der beste Weg, um Rotationen reibungslos zu interpolieren. Nur Rotationsmatrizen zu interpolieren, funktioniert nicht, weil Sie nicht immer eine Rotationsmatrix als Ergebnis erhalten. Das Interpolieren von Eulerwinkeln führt nicht zu einer gleichmäßigen Drehung. Für die Animation von Rotationen, wie sie in der Computergrafik oder in der Robotik benötigt werden, sind Quaternionen der richtige Weg. Und es gibt eine nützliche, aber nicht allzu oft verwendete Erweiterung, die man Dual Quaternions nennt und mit der man Transformation und Rotation darstellen kann
Tobias B,

Antworten:


43

Mathematisch gesehen ist eine Quaternion eine komplexe Zahl mit vier Dimensionen. In der Spieleentwicklung werden Quaternionen jedoch häufig verwendet, um eine Drehung im 3D-Raum durch Codierung zu beschreiben:

  1. eine Rotationsachse (in Form eines dreidimensionalen Vektors)
  2. wie weit man sich um diese Achse dreht

Beachten Sie, dass diese Informationen mit Sinus- und Cosinus-Werten innerhalb der Quaternion codiert sind. Daher sollten Sie im Allgemeinen nicht versuchen, die internen Komponenten (xyzw) der Quaternion einzeln explizit festzulegen oder zu lesen. Es ist leicht, auf diese Weise einen Fehler zu machen und ein nicht aussagekräftiges Ergebnis zu erhalten. Eine Quaternion-Mathematikbibliothek bietet in der Regel Funktionen für die Bearbeitung von Quaternionen (z. B. Konvertieren in und aus Euler-Winkeln oder Achsenwinkeln), die sicherstellen, dass die Mathematik korrekt ist und den Vorteil hat, dass der Code einfacher zu lesen und zu verstehen ist.

Eine alternative Möglichkeit, Rotationen zu beschreiben, besteht darin, zu beschreiben, wie weit um die drei festen Achsen x, y und z (auch Euler-Winkel genannt) gedreht werden soll. Dies erfordert nur drei statt vier Zahlen und ist in der Regel intuitiver zu bedienen. Bei Euler-Winkeln tritt jedoch ein Problem auf, das als Gimbal-Lock bezeichnet wird : Wenn Sie sich um 90 ° um eine Achse drehen, werden die beiden anderen Achsen gleich. Bei Quaternions tritt dieses Problem nicht auf.

Eine andere Möglichkeit, Rotationen im 3D-Raum auszudrücken, ist die Verwendung einer 4x4- Transformationsmatrix . Mit einer Transformationsmatrix können Sie jedoch nicht nur drehen, sondern auch skalieren, verschieben und neigen. Wenn Sie nur Rotation wollen , wäre eine Matrix Overkill und eine Quaternion eine viel schnellere und einfachere Lösung.

Dieses Problem ist nur im 3D-Raum relevant. Im 2D-Raum haben Sie nur eine Rotationsachse. Jede Drehung kann mit einer einzelnen Gleitkommazahl oder einer einzelnen komplexen Zahl ausgedrückt werden, sodass Sie dieses Problem nicht haben. Während Sie theoretisch eine Drehung auf einer 2d-Ebene mit einem Quaternion ausdrücken können, bei dem die Achse in die Ebene hinein (oder aus dieser heraus) zeigt, ist dies normalerweise ein Overkill.


6
Gimbal Lock ist in Quaternionen kein Problem, wenn Sie von Quaternionen ausgehen und mit Quaternionen enden. Das Gimbal Lock setzt ein, wenn Sie eine Stufe haben, die in Euler-Winkel oder zurück konvertiert wird.
Ratschenfreak

2
Quaternionen sind nicht Achse + Winkel, sondern 3 komplexe Zahlen und eine Skala.
transistor09

11
@transistor09 würdest du glauben, dass ihr beide recht habt? Der 3-Komponenten-Imaginärteil eines Einheitsquaternions kann als Einheitsvektor entlang der Rotationsachse interpretiert werden, skaliert mit dem Sinus des halben Rotationswinkels. Der Realteil des Einheitsquaternions ist der Kosinus des halben Drehwinkels. Sie haben also Recht, dass es sich nicht genau um ein Winkelachsenformat handelt, aber es stimmt, dass die Komponenten eines Quaternions als Achse und als (nicht lineares) Maß dafür interpretiert werden können, wie weit um diese Achse gedreht werden muss.
DMGregory

2
Sie können auch erwähnen, welchen Vorteil Quaternionen gegenüber einer Rotationsmatrix haben: Sie lassen sich schneller kombinieren. Beim Kombinieren von Rotationen erfordert das Multiplizieren von zwei Quaternionen weniger Operationen als das Multiplizieren von Matrizen.
Setzen Sie Monica

3
Tatsächlich sind komplexe Zahlen im 2D-Raum das genaue Analogon. Multiplizieren Sie einen 2D-Punkt mit einer komplexen Zahl, und Sie haben ihn gedreht. Tatsächlich ist es genau das Gleiche wie die übliche Sin / Cos-Drehung (was offensichtlich sein sollte, wenn Sie komplexe Zahlen gut genug verstehen). Dies kann ein wenig ausgenutzt werden, aber letztendlich sind 2D-Grafiken heutzutage nicht mehr so ​​leistungsintensiv, sodass Sie nur dann eine große Verbesserung erzielen, wenn Sie mit komplexen Zahlen wirklich vertraut sind (was die meisten Menschen entschieden nicht tun) - wie der unglaublich schlechte quaternionbasierte Code beweist: D).
Luaan

13

Dies ist zu @ Philipps Antwort hinzuzufügen.

Welche Vorteile bietet die Verwendung von drei Punkten in einer 2D-Ebene?

Sie brauchen eigentlich keine Quaternionen, wenn Sie sich nur für eine Drehung auf der Ebene, dh um die z-Achse, interessieren . In diesem Fall brauchen Sie nur den Gierwinkel, und Sie können die Tatsache ausnutzen, dass aufeinanderfolgende Rotationen um die z-Achse pendeln. So können Sie Ihre Rotationen in beliebiger Reihenfolge anwenden.

Die Situation ist anders, wenn Sie sich in einer Ebene drehen, die nicht die XY-Ebene ist. Diese Drehung entspricht einer Drehung um eine beliebige 3D-Achse. Nun haben Sie zwei Möglichkeiten:

  • Drehe deine Ebene in 3D so, dass sie mit der XY-Ebene übereinstimmt und giere dann und transformiere zurück oder

  • Stellen Sie sich Ihre Rotation zunächst in 3D vor.

Die zweite Wahl ist einfacher zu codieren. Wie @Philipp sagte, vermeiden Quaternionen eine Kardansperrung (wenn Sie Zwischen-RPY- oder Achsen- / Winkelumwandlungen vermeiden).

Wann schließlich wird die Verwendung von Quaternionen als bewährte Methode angesehen?

Bei 3D-Rotationen empfiehlt es sich, Quaternionen zu verwenden.

Z.B:

  • In Qt . Quats erleichtern das Interpolieren zwischen Rotationen, wie in der Slerp- Funktion.

  • ROS verwendet sie zur Transformation von Roboterposen.

  • In der Bullet Dynamics Engine

  • Eine sehr anspruchsvolle Anwendung finden Sie hier für den Einsatz in der klassischen 3D-Mechanik.


"Bei 3D-Rotationen empfiehlt es sich, Quaternionen zu verwenden." ist einfach etwas zu stark. Fast immer ist besser; Es gibt Situationen, in denen Alternativen angebracht sind. (Als Beispiel für eine Unvollkommenheit ist die n-te Wurzel einer Quaternion mehrwertig)
Yakk

1
Quaternionen sind ein Gebrauchsgegenstand und ein zu implementierender Schmerz. Sie können ohne sie auskommen, wenn Sie die Gimbal-Sperre kennen.
Hatoru Hansou
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.