as_euler#
- Rotation.as_euler(self, seq, degrees=False)#
Als Euler-Winkel darstellen.
Jede Orientierung kann als eine Komposition von 3 Elementardrehungen ausgedrückt werden. Sobald die Achsenreihenfolge gewählt wurde, definieren die Euler-Winkel den Drehwinkel um jede jeweilige Achse [1].
Der Algorithmus aus [2] wurde verwendet, um Euler-Winkel für die Drehung um eine gegebene Achsenreihenfolge zu berechnen.
Euler-Winkel leiden unter dem Problem des Gimbal Locks [3], bei dem die Darstellung einen Freiheitsgrad verliert und es nicht möglich ist, den ersten und dritten Winkel eindeutig zu bestimmen. In diesem Fall wird eine Warnung ausgegeben und der dritte Winkel auf Null gesetzt. Beachten Sie jedoch, dass die zurückgegebenen Winkel immer noch die korrekte Drehung darstellen.
- Parameter:
- seqstring, Länge 3
3 Zeichen aus der Menge {‘X’, ‘Y’, ‘Z’} für intrinsische Rotationen oder {‘x’, ‘y’, ‘z’} für extrinsische Rotationen [1]. Angrenzende Achsen dürfen nicht gleich sein. Extrinsische und intrinsische Rotationen dürfen nicht in einem einzigen Funktionsaufruf gemischt werden.
- degreesboolean, optional
Die zurückgegebenen Winkel sind in Grad, wenn dieses Flag auf True gesetzt ist, andernfalls in Radiant. Standard ist False.
- Rückgabe:
- anglesndarray, Form (3,) oder (N, 3)
Die Form hängt von der Form der Eingaben ab, die zur Initialisierung des Objekts verwendet wurden. Die zurückgegebenen Winkel liegen im Bereich
Erster Winkel gehört zu [-180, 180] Grad (beide inklusive)
Dritter Winkel gehört zu [-180, 180] Grad (beide inklusive)
Zweiter Winkel gehört zu
[-90, 90] Grad, wenn alle Achsen unterschiedlich sind (wie xyz)
[0, 180] Grad, wenn die erste und dritte Achse gleich sind (wie zxz)
Referenzen
[2]Bernardes E, Viollet S (2022) Quaternion to Euler angles conversion: A direct, general and computationally efficient method. PLoS ONE 17(11): e0276302. https://doi.org/10.1371/journal.pone.0276302
Beispiele
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
Eine einzelne Rotation darstellen
>>> r = R.from_rotvec([0, 0, np.pi/2]) >>> r.as_euler('zxy', degrees=True) array([90., 0., 0.]) >>> r.as_euler('zxy', degrees=True).shape (3,)
Stapel einzelner Rotationen darstellen
>>> r = R.from_rotvec([[0, 0, np.pi/2]]) >>> r.as_euler('zxy', degrees=True) array([[90., 0., 0.]]) >>> r.as_euler('zxy', degrees=True).shape (1, 3)
Mehrere Rotationen in einem einzigen Objekt darstellen
>>> r = R.from_rotvec([ ... [0, 0, np.pi/2], ... [0, -np.pi/3, 0], ... [np.pi/4, 0, 0]]) >>> r.as_euler('zxy', degrees=True) array([[ 90., 0., 0.], [ 0., 0., -60.], [ 0., 45., 0.]]) >>> r.as_euler('zxy', degrees=True).shape (3, 3)