scipy.spatial.transform.Rotation.

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)