Warum werden Quaternionen für Rotationen verwendet?


107

Ich bin Physiker, habe Programmieren gelernt und bin auf viele Leute gestoßen, die Quaternionen für Rotationen verwenden, anstatt Dinge in Matrix- / Vektorform zu schreiben.

In der Physik gibt es sehr gute Gründe, warum wir keine Quaternionen verwenden (trotz der bizarren Geschichte, die gelegentlich über Hamilton / Gibbs / etc erzählt wird). Die Physik erfordert, dass unsere Beschreibungen ein gutes analytisches Verhalten aufweisen (dies hat eine genau definierte Bedeutung, aber auf einige eher technische Arten, die weit über das hinausgehen, was in normalen Intro-Klassen gelehrt wird, sodass ich nicht auf Details eingehen werde). Es stellt sich heraus, dass Quaternionen dieses nette Verhalten nicht haben und daher nicht nützlich sind, und Vektoren / Matrizen, also verwenden wir sie.

3D-Rotationen sind jedoch auf starre Rotationen und Beschreibungen beschränkt, bei denen keine analytischen Strukturen verwendet werden. Sie können auf beide Arten (oder auf einige andere Arten) gleichwertig beschrieben werden.

Im Allgemeinen wollen wir nur eine Abbildung eines Punktes X = (x, y, z) auf einen neuen Punkt X '= (x', y ', z') unter der Bedingung, dass X 2 = X ' 2 . Und es gibt viele Dinge, die dies tun.

Der naive Weg besteht darin, nur die Dreiecke zu zeichnen, die dies definiert, und Trigonometrie zu verwenden, oder den Isomorphismus zwischen einem Punkt (x, y, z) und einem Vektor (x, y, z) und der Funktion f (X) = X 'und zu verwenden eine Matrix MX = X 'oder unter Verwendung von Quaternionen oder Projizieren von Komponenten des alten Vektors entlang des neuen Vektors unter Verwendung einer anderen Methode (x, y, z) T. (a, b, c) (x', y ', z ') usw.

Aus mathematischer Sicht sind diese Beschreibungen in dieser Einstellung (als Theorem) alle gleichwertig. Sie haben alle die gleiche Anzahl von Freiheitsgraden, die gleiche Anzahl von Einschränkungen usw.

Warum scheinen Quaternionen Vektoren vorzuziehen?

Die üblichen Gründe, die ich sehe, sind keine Kardanverriegelung oder numerische Probleme.

Das Argument no gimbal lock erscheint seltsam, da dies nur ein Problem der Eulerwinkel ist. Es ist auch nur ein Koordinatenproblem (genau wie die Singularität bei r = 0 in Polarkoordinaten (der Jacobi verliert den Rang)), was bedeutet, dass es nur ein lokales Problem ist und durch Umschalten der Koordinaten, Rotieren aus der Entartung, gelöst werden kann. oder unter Verwendung von zwei überlappenden Koordinatensystemen.

Bei numerischen Problemen bin ich mir weniger sicher, da ich nicht im Detail weiß, wie diese beiden (und alle Alternativen) implementiert werden würden. Ich habe gelesen, dass es einfacher ist, eine Quaternion neu zu normalisieren, als dies für eine Rotationsmatrix zu tun, aber dies gilt nur für eine allgemeine Matrix. Eine Rotation hat zusätzliche Einschränkungen, die dies trivialisieren (die in die Definition von Quaternionen integriert sind) (Tatsächlich muss dies zutreffen, da sie die gleiche Anzahl von Freiheitsgraden haben).

Was ist der Grund für die Verwendung von Quaternionen über Vektoren oder anderen Alternativen?


2
Das "No Gimbal Lock" ist sowieso eine Lüge. Sie haben das gleiche Problem mit der kardanischen Verriegelung wie bei Euler-Winkeln, wenn Sie zwei orthogonale Rotationen mit einem Quaternion verwenden. Sie haben nur kein Problem für eine einzelne Umdrehung, da es sich um eine Operation handelt, nicht um 3.
Damon,

2
@Damon Das ist nicht ganz richtig. Siehe mathoverflow.net/a/95908/97344
plasmacel

Antworten:


61

Gimbal Lock ist ein Grund, obwohl es, wie Sie sagen, nur ein Problem mit Euler-Winkeln ist und leicht lösbar ist. Euler-Winkel werden immer noch verwendet, wenn der Speicher ein Problem darstellt, da Sie nur 3 Zahlen speichern müssen.

Bei Quaternionen gegenüber einer 3x3-Rotationsmatrix hat die Quaternion den Vorteil in Bezug auf Größe (4 Skalare gegenüber 9) und Geschwindigkeit (die Quaternionsmultiplikation ist viel schneller als die 3x3-Matrixmultiplikation).

Beachten Sie, dass alle diese Darstellungen von Rotationen in der Praxis verwendet werden. Eulerwinkel verwenden den geringsten Speicher; Matrizen verbrauchen mehr Speicher, leiden jedoch nicht unter Gimbal Lock und haben gute analytische Eigenschaften. und Quaternionen sorgen für eine gute Balance zwischen beidem, sind leicht, aber frei von Gimbal Lock.


Eine Rotationsmatrix hat jedoch nicht so viele unabhängige Komponenten - sie ist eingeschränkt. Eine zweidimensionale Drehung wird unabhängig von der Darstellung durch drei Koordinaten in drei Dimensionen angegeben. Matrizen haben im Allgemeinen mehr Komponenten, weil sie mehr als nur Rotationen können. Bei Rotationen werden die zusätzlichen Komponenten jedoch anhand der anderen bestimmt.
JMP

1
@JMP: Du hast recht. Viele Leute "komprimieren" die Matrix, so dass Sie nur so viele Informationen wie nötig speichern, aber eine komprimierte Matrix ist schwieriger zu handhaben, sodass Sie an Leistung verlieren. Es geht um Kompromisse bei Speicher und Leistung.
Peter Alexander

10
@JMP Standard-Matrixmultiplikationsroutinen benötigen jedoch alle 9 Werte. Obwohl nur 3 von ihnen unabhängig sind, benötigt es immer noch 9 Zahlen Speicher, wenn Sie tatsächlich rechnen (wieder, wenn Sie tatsächlich die Matrixmultiplikation im Computer durchführen).
David Z

1
"Quaternionsmultiplikation ist viel schneller als 3x3-Matrixmultiplikation" Wirklich? Die Quaternion-Rotation erfordert 24 Add / Mul-Operationen (aufgrund von zweimal produktübergreifenden und ergänzenden Operationen), die 3x3-Matrix erfordert nur 15 Add / Mul-Operationen.
Marat Buharov

Verwenden Sie nur 2 Vektoren (6 Floats), um eine 3D-Ausrichtung vollständig darzustellen. Der 3. Vektor ist nur ein Kreuz entfernt. Ein Vorteil von Matrizen besteht darin, dass sie bereits in einer Form vorliegen, die für viele Anwendungen verwendet werden kann. Euler und Quats müssen beide verpackt (von der Matrix) und entpackt (in die Matrix) werden, was zusätzliche Verarbeitung erfordert. Euler und Quats können für eine kompakte Langzeitlagerung nützlich sein.
user3015682

39

In der Physik gibt es sehr gute Gründe, warum wir keine Quaternionen verwenden (trotz der bizarren Geschichte, die gelegentlich über Hamilton / Gibbs / etc erzählt wird). Die Physik erfordert, dass unsere Beschreibungen ein gutes analytisches Verhalten aufweisen (dies hat eine genau definierte Bedeutung, aber auf einige eher technische Arten, die weit über das hinausgehen, was in normalen Intro-Klassen gelehrt wird, sodass ich nicht auf Details eingehen werde). Es stellt sich heraus, dass Quaternionen dieses nette Verhalten nicht haben und daher nicht nützlich sind, und Vektoren / Matrizen, also verwenden wir sie.

Nun, ich bin auch Physiker. Und es gibt Situationen, in denen Quaternionen einfach rocken! Sphärische Harmonische zum Beispiel. Sie haben zwei Atome, die streuen und ein Elektron austauschen: Was ist der Orbitalspintransfer? Bei Quaternionen handelt es sich lediglich um eine Multiplikation, dh das Aufsummieren der Exponenten der SH-Basisfunktionen, ausgedrückt als Quaternionen. (Es ist allerdings etwas mühsam, die Legendre-Polynome in Quaternionsnotation zu bringen.)

Aber ich stimme zu, sie sind kein universelles Werkzeug, und besonders in der Starrkörpermechanik wäre ihre Verwendung sehr umständlich. Um Bertrand Russells Antwort auf die Frage eines Studenten zu zitieren, wie viel Mathematik ein Physiker wissen muss: "So viel wie möglich!"

Wie auch immer: Warum lieben wir Quaternionen in der Computergrafik? Weil sie eine Reihe ansprechender Eigenschaften haben. Zuerst kann man sie gut interpolieren, was wichtig ist, wenn man rotierende Dinge wie die Gliedmaßen um ein Gelenk animiert. Mit einer Quaternion ist es nur skalare Multiplikation und Normalisierung. Um dies mit einer Matrix auszudrücken, müssen sin und cos ausgewertet und anschließend eine Rotationsmatrix erstellt werden. Dann ist das Multiplizieren eines Vektors mit einer Quaternion immer noch billiger als das Durchlaufen einer vollständigen Vektor-Matrix-Multiplikation. Es ist auch immer noch billiger, wenn man danach eine Übersetzung hinzufügt. Wenn Sie ein Skelettanimationssystem für einen menschlichen Charakter in Betracht ziehen, bei dem viele Übersetzungen / Rotationen für eine große Anzahl von Scheitelpunkten ausgewertet werden müssen, hat dies enorme Auswirkungen.

Ein weiterer netter Nebeneffekt bei der Verwendung von Quaternionen ist, dass jede Transformation von Natur aus orthonormal ist. Bei Übersetzungsmatrizen muss man aufgrund numerischer Rundungsfehler alle paar Animationsschritte neu orthonormalisieren.


1
Haben Sie eine Referenz für sphärische Harmonische / Legendre-Polynome mit Quaternionen? Ich bin dabei, ein Papier einzureichen, das sich mit verwandten Themen befasst, und würde gerne andere Arbeiten dazu sehen (zitieren können).
Mike

4
@ Mike: Aus meinem Kopf, leider nichts veröffentlicht. Leider sind Quaternionen für Physiker immer noch ziemlich dunkel. Ich erinnere mich nur daran, weil mein Tutor von Quantum Mechanic 2 dies zu einer Übung gemacht hat und ich davon überwältigt war. Was wir im Wesentlichen taten, war die Verwendung des Ausdrucks exp ((a · iω + b · jθ + c · kη + d) r), wobei r selbst eine komplexe Variable war. Wenn Sie dies zeichnen, erhalten Sie eine dreidimensionale Verteilung (wir mussten zuerst die Exponentialreihe in Bezug auf eine Quaternionsvariable entwickeln). Dies ermöglicht eine "Fourier" -Transformation, die zu etwas führt, das Sie in die bekannten SH-Begriffe verwandeln können.
Datenwolf

31

Das Argument no gimbal lock erscheint seltsam, da dies nur ein Problem der Eulerwinkel ist. Es ist auch nur ein Koordinatenproblem (genau wie die Singularität bei r = 0 in Polarkoordinaten (der Jacobi verliert den Rang)), was bedeutet, dass es nur ein lokales Problem ist und durch Umschalten der Koordinaten, Rotieren aus der Entartung, gelöst werden kann. oder unter Verwendung von zwei überlappenden Koordinatensystemen.

Viele 3D-Anwendungen verwenden gerne Euler-Winkel, um die Ausrichtung eines Objekts zu definieren. Insbesondere für Flugsimulationen stellen sie eine theoretisch nützliche Möglichkeit dar, die Ausrichtung so zu speichern, dass sie leicht geändert werden kann.

Sie sollten sich auch darüber im Klaren sein, dass Dinge wie "Koordinaten wechseln, aus der Entartung herausdrehen oder zwei überlappende Koordinatensysteme verwenden" alle Aufwand erfordern. Anstrengung bedeutet Code. Und Code bedeutet Leistung. Leistungsverlust, wenn Sie nicht müssen , ist für viele 3D-Anwendungen keine gute Sache. Was können Sie mit all diesen Tricks erreichen, wenn Sie mit Quaternionen alles bekommen, was Sie brauchen?

Bei numerischen Problemen bin ich mir weniger sicher, da ich nicht im Detail weiß, wie diese beiden (und alle Alternativen) implementiert werden würden. Ich habe gelesen, dass es einfacher ist, eine Quaternion neu zu normalisieren, als dies für eine Rotationsmatrix zu tun, aber dies gilt nur für eine allgemeine Matrix. Eine Rotation hat zusätzliche Einschränkungen, die dies trivialisieren (die in die Definition von Quaternionen integriert sind) (Tatsächlich muss dies zutreffen, da sie die gleiche Anzahl von Freiheitsgraden haben).

Die numerischen Probleme treten auf, wenn mehrere aufeinanderfolgende Umdrehungen einer Ausrichtung behandelt werden. Stellen Sie sich vor, Sie haben ein Objekt im Raum. Und bei jeder Zeitscheibe wenden Sie eine kleine Gieränderung an. Nach jeder Änderung müssen Sie die Ausrichtung neu normalisieren. Andernfalls schleichen sich Präzisionsprobleme ein und vermasseln die Dinge.

Wenn Sie Matrizen verwenden, müssen Sie die Matrix jedes Mal, wenn Sie eine Matrixmultiplikation durchführen, neu orthonormalisieren. Die Matrix, die Sie orthonormalisieren, ist noch keine Rotationsmatrix, daher wäre ich mir bei dieser einfachen Orthonormalisierung nicht sicher. Da kann ich mir jedoch sicher sein:

Es ist nicht so schnell wie eine 4D-Vektornormalisierung. Das ist es, was Quaternionen verwenden, um sich nach aufeinanderfolgenden Rotationen zu normalisieren.

Quaternion Normalisierung ist billig. Selbst eine spezialisierte Rotationsmatrixnormalisierung wird nicht so billig sein. Auch hier ist die Leistung wichtig.

Es gibt noch ein weiteres Problem, das Matrizen nicht einfach lösen können: die Interpolation zwischen zwei verschiedenen Ausrichtungen.

Wenn Sie sich mit einem 3D-Charakter befassen, haben Sie häufig eine Reihe von Transformationen, die die Position jedes Knochens im Charakter definieren. Diese Hierarchie von Knochen repräsentiert den Charakter in einer bestimmten Pose.

In den meisten Animationssystemen interpoliert man zwischen Transformationen, um die Pose für einen Charakter zu einem bestimmten Zeitpunkt zu berechnen. Dies erfordert die Interpolation der entsprechenden Transformationen.

Das Interpolieren von zwei Matrizen ist ... nicht trivial. Zumindest, wenn Sie etwas wollen, das am Ende einer Rotationsmatrix ähnelt. Schließlich besteht der Zweck der Interpolation darin, etwas auf halbem Weg zwischen den beiden Transformationen zu erzeugen.

Für Quaternionen benötigen Sie lediglich einen 4D-Lerp, gefolgt von einer Normalisierung. Das ist alles: Nehmen Sie zwei Quaternionen und interpolieren Sie die Komponenten linear. Normalisieren Sie das Ergebnis.

Wenn Sie eine Interpolation mit besserer Qualität wünschen (und manchmal auch), können Sie den sphärischen Lerp hervorheben . Dadurch verhält sich die Interpolation bei unterschiedlicheren Orientierungen besser. Diese Mathematik ist viel schwieriger und erfordert mehr Operationen für Matrizen als Quaternionen.


7

Meinung: Quaternionen sind nett.

Rotationsmatrix: Kleiner Nachteil : Die Multiplikation von Matrizen ist ~ 2-mal langsamer als Quaternionen. Kleiner Vorteil : Die Matrix-Vektor-Multiplikation ist ~ 2-mal schneller und groß. Großer Nachteil : Normalisierung! Ghram-Shmit ist asymmetrisch, was bei Differentialgleichungen keine genaue Antwort höherer Ordnung liefert. Anspruchsvollere Methoden sind sehr komplex und teuer.

Achse (Winkel = Länge der Achse) Kleiner Vorteil : Klein. Moderater Nachteil : Die Multiplikation und Anwendung auf einen Vektor ist mit trig langsam. Moderater Nachteil : Nordpol-Singularität bei Länge = 2 * pi, da alle Achsenrichtungen nichts bewirken. Mehr Code (und Debugging), um ihn automatisch neu zu skalieren, wenn er sich 2pi nähert.


5

Im Allgemeinen wollen wir nur eine Abbildung eines Punktes X = (x, y, z) auf einen neuen Punkt X '= (x', y ', z') unter der Bedingung, dass X ^ 2 = X '^ 2. Und es gibt viele Dinge, die dies tun.

Das wollen wir absolut nicht nur . Es gibt eine sehr wichtige Subtilität, die viele Leute vermissen . Die Konstruktion, von der Sie sprechen (zeichnen Sie die Dreiecke und verwenden Sie Trig usw.), dreht einen Vektor korrekt in den anderen. Aber es gibt unendlich viele Umdrehungen, die dies tun. Insbesondere kann ich mitkommen, nachdem Sie Ihre Drehung durchgeführt haben, und dann das gesamte System um den X'-Vektor drehen. Das ändert nichts an der Position von X '. Die Kombination Ihrer und meiner Rotation entspricht einer weiteren einzelnen Rotation (da Rotationen eine Gruppe bilden ). Im Allgemeinen müssen Sie in der Lage sein, eine solche Drehung darzustellen.

Es stellt sich heraus, dass Sie dies nur mit einem Vektor tun können . (Das ist die Achsenwinkeldarstellung von Rotationen .) Das Kombinieren von Rotationen in der Achsenwinkeldarstellung ist jedoch schwierig. Quaternionen machen es einfach, zusammen mit vielen anderen Dingen. Grundsätzlich haben Quaternionen alle Vorteile anderer Darstellungen und keinen der Nachteile. (Obwohl ich zugeben werde, dass es bestimmte Anwendungen geben kann, für die eine andere Darstellung möglicherweise besser ist.)


4

Die üblichen Gründe, die ich sehe, sind keine Gimble-Sperre oder numerische Probleme.

Und das sind gute Gründe.

Wie Sie bereits zu verstehen scheinen, codieren Quaternionen eine einzelne Rotation um eine beliebige Achse im Gegensatz zu drei aufeinanderfolgenden Rotationen im Euler-3-Raum. Dies macht Quaternionen immun gegen Gimbal Lock .

Außerdem werden einige Interpolationsformen wie SLERP einfach und leicht zu handhaben .

... oder mit zwei überlappenden Koordinatensystemen.

Warum ist Ihre Lösung aus Sicht der Leistung besser?

Ich könnte weitermachen, aber Quaternionen sind nur ein mögliches Werkzeug. Wenn sie nicht Ihren Anforderungen entsprechen, verwenden Sie sie nicht.


Rotationsmatrizen tun dasselbe und haben mehr algebraische Eigenschaften, die ordentlich verwendet werden können. Darüber hinaus ist die Matrixmanipulation eines der Dinge, in denen Computer besonders gut sind.
Paul23

3

Es ist zu beachten, dass alle mit der Rotation verbundenen Eigenschaften nicht wirklich Eigenschaften von Quaternionen sind: Sie sind Eigenschaften von Euler-Rodrigues-Parametrisierungen , der tatsächlichen 4-Element-Struktur, die zur Beschreibung einer 3D-Rotation verwendet wird.

Ihre Beziehung zu Quaternions beruht ausschließlich auf einem Artikel von Cayley "Über bestimmte Ergebnisse im Zusammenhang mit Quaternionen", in dem der Autor die Korrelation zwischen der Quaternion-Multiplikation und der Kombination von Euler-Rodrigues-Parametrisierungen beobachtet. Dies ermöglichte es, Aspekte der Quaternionstheorie auf die Darstellung von Rotationen und insbesondere auf die Interpolation zwischen ihnen anzuwenden.

Sie können das Papier hier lesen: https://archive.org/details/collmathpapers01caylrich . Zu dieser Zeit gab es jedoch keinen Zusammenhang zwischen Quaternions und Rotation, und Cayley war ziemlich überrascht, dass es Folgendes gab:

Tatsächlich sind die Formeln genau diejenigen, die für eine solche Transformation von M. Olinde Rodrigues Liouville, TV, "Des lois géométriques qui régissent les déplacements d'un système solide [...]" (oder Comb. Math. Journal, t. iii. S. 224 [6]). Es wäre eine interessante Frage, a priori das Auftreten dieser Koeffizienten hier zu berücksichtigen.

Quaternionen haben jedoch nichts Eigenes, was der Rotation Vorteile bringt. Quaternionen vermeiden nicht die kardanische Verriegelung; Euler-Rodrigues-Parametrisierungen tun dies. Nur sehr wenige Computerprogramme, die eine Rotation ausführen, implementieren wahrscheinlich Quaternionstypen, die erstklassige komplexe mathematische Werte sind. Leider scheint irgendwo ein Missverständnis der Rolle von Quaternions durchgesickert zu sein, was dazu geführt hat, dass einige verblüffte Grafikstudenten die Details komplexer Mathematik mit mehreren imaginären Konstanten gelernt haben und dann verblüfft sind, warum dies die Probleme mit der Rotation löst.


1

Eine Antwort, die jemand lesen könnte: Es gibt mühsame Probleme mit allen Darstellungen. Quaternionen sind kleiner als Matrizen, aber die Quaternionsmultiplikation ist kein bloßes Vektorpunktprodukt oder dergleichen und benötigt auf einem Computer tatsächlich mehr Zeit als das Punktprodukt zweier 3x3-Matrizen. (Computer können sehr gut mit normalen Matrizen arbeiten)

Matrizen haben jedoch andere nervige Eigenschaften. Zum Beispiel sind sie auf lange Sicht keine stabilen Kreaturen. Bei der Modellierung von Rotationen im 3D-Raum werden normalerweise Rotationen übereinander in einer Orientierungsmatrix akkumuliert, dh nur einer einzelnen Rotationsmatrix, in der die Orientierung eines Referenzrahmens gespeichert wird. Dieser Prozess wird im Verlauf von Millionen von Additionen dazu führen, dass die O-Matrix von einer strengen Rotationsmatrixform abweicht. Dies kann umgangen werden, indem die Matrix regelmäßig neu konfiguriert wird. Es gibt jedoch Bedingungen, unter denen dies nicht trivial ist. Nämlich der Fall der Identitätsmatrix ohne Rotation.

Sie möchten eine Achsenwinkeldarstellung (oder Quaternionsdarstellung) der Drehung finden und dann eine Matrix dafür reproduzieren. Die meisten Algorithmen erzeugen einen Nullvektor und stoßen dann in diesem Fall auf eine Nullteilung. In solchen Fällen ist es im Allgemeinen auch eine schlechte Idee, solche Fälle mit Lösungen vom Typ "wenn 0 dann ..." zu vermeiden, da a) Gabeln langsam sind und b) Sie immer noch Maschinen-Epsilon erhalten können Singularität und am Ende mit schrecklichen Fehlern.

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.