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?
mathematics
terminology
SirMathhman
quelle
quelle
Antworten:
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:
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.
quelle
Dies ist zu @ Philipps Antwort hinzuzufügen.
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).
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.
quelle