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?