as_quat#
- Rotation.as_quat(self, canonical=False, *, scalar_first=False)#
Als Quaternionen darstellen.
Rotationen in 3 Dimensionen können mit Quaternionen mit Norm 1 [1] dargestellt werden.
Die 4 Komponenten eines Quaternions werden in einen Skalarteil
wund einen Vektorteil(x, y, z)unterteilt und können aus dem Winkelthetaund der Achseneiner Rotation wie folgt ausgedrückt werdenw = cos(theta / 2) x = sin(theta / 2) * n_x y = sin(theta / 2) * n_y z = sin(theta / 2) * n_z
Es gibt 2 Konventionen zur Reihenfolge der Komponenten in einem Quaternion
Skalar-zuerst-Reihenfolge –
(w, x, y, z)Skalar-zuletzt-Reihenfolge –
(x, y, z, w)
Die Wahl wird durch das Argument scalar_first gesteuert. Standardmäßig ist es False und die Skalar-zuletzt-Reihenfolge wird verwendet.
Die Abbildung von Quaternionen zu Rotationen ist zweideutig, d. h. die Quaternionen
qund-q, wobei-qeinfach das Vorzeichen jeder Komponente umkehrt, stellen dieselbe räumliche Rotation dar.- Parameter:
- canonicalbool, standardmäßig False
Ob die redundante doppelte Überdeckung des Rotationsraums auf eine eindeutige "kanonische" einfache Überdeckung abgebildet wird. Wenn True, dann wird das Quaternion aus {q, -q} so gewählt, dass der w-Term positiv ist. Wenn der w-Term 0 ist, dann wird das Quaternion so gewählt, dass der erste Nicht-Null-Term der x-, y- und z-Terme positiv ist.
- scalar_firstbool, optional
Ob die Skalarkomponente zuerst oder zuletzt kommt. Standard ist False, d. h. die Skalar-zuletzt-Reihenfolge wird verwendet.
- Rückgabe:
- quat
numpy.ndarray, Form (4,) oder (N, 4) Die Form hängt von der Form der bei der Initialisierung verwendeten Eingaben ab.
- quat
Referenzen
Beispiele
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
Eine Rotation kann als Quaternion mit entweder Skalar-zuletzt (Standard) oder Skalar-zuerst-Komponentenreihenfolge dargestellt werden. Dies wird für eine einzelne Rotation gezeigt
>>> r = R.from_matrix(np.eye(3)) >>> r.as_quat() array([0., 0., 0., 1.]) >>> r.as_quat(scalar_first=True) array([1., 0., 0., 0.])
Wenn mehrere Rotationen in einem einzigen Rotationsobjekt gespeichert sind, ist das Ergebnis ein 2-dimensionales Array
>>> r = R.from_rotvec([[np.pi, 0, 0], [0, 0, np.pi/2]]) >>> r.as_quat().shape (2, 4)
Quaternionen können von einer redundanten doppelten Abdeckung des Rotationsraums auf eine kanonische Darstellung mit einem positiven w-Term abgebildet werden.
>>> r = R.from_quat([0, 0, 0, -1]) >>> r.as_quat() array([0. , 0. , 0. , -1.]) >>> r.as_quat(canonical=True) array([0. , 0. , 0. , 1.])