as_euler#
- Вращение.as_euler(self, seq, градусы=False)#
Представить в виде углов Эйлера.
Любая ориентация может быть выражена как композиция 3 элементарных вращений. После выбора последовательности осей углы Эйлера определяют угол вращения вокруг каждой соответствующей оси [1].
Алгоритм из [2] использовался для вычисления углов Эйлера для вращения вокруг заданной последовательности осей.
Углы Эйлера страдают от проблемы блокировки карданова подвеса [3], где представление теряет одну степень свободы, и невозможно однозначно определить первый и третий углы. В этом случае выдается предупреждение, и третий угол устанавливается в ноль. Однако обратите внимание, что возвращаемые углы всё ещё представляют правильное вращение.
- Параметры:
- seqстрока, длина 3
3 символа из набора {'X', 'Y', 'Z'} для внутренних вращений или {'x', 'y', 'z'} для внешних вращений [1]. Смежные оси не могут быть одинаковыми. Внешние и внутренние вращения нельзя смешивать в одном вызове функции.
- градусылогический, необязательный
Возвращаемые углы в градусах, если этот флаг True, иначе они в радианах. По умолчанию False.
- Возвращает:
- углыndarray, форма (3,) или (N, 3)
: BUG: исправление ошибки открытия временного файла в messagestream.pyx (#8850)
Первый угол принадлежит диапазону [-180, 180] градусов (включительно)
Третий угол принадлежит диапазону [-180, 180] градусов (включительно)
Второй угол принадлежит:
[-90, 90] градусов, если все оси различны (например, xyz)
[0, 180] градусов, если первая и третья оси одинаковы (например, zxz)
Ссылки
[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
Примеры
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
Представить одно вращение:
>>> 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,)
Представляет стек одиночных вращений:
>>> 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)
dlatrd
>>> 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)