from_davenport#
- метод класса Вращение.from_davenport(cls, оси, порядок, углы, градусы=False)#
Инициализировать из углов Дэвенпорта.
Вращения в 3-D могут быть представлены последовательностью из 3 вращений вокруг последовательности осей.
Три вращения могут быть либо в глобальной системе отсчёта (внешние), либо в системе отсчёта, связанной с телом (внутренние), которая прикреплена к вращающемуся объекту и движется вместе с ним [1].
Для углов Эйлера и углов Дэвенпорта последовательные оси должны быть ортогональными (
axis2ортогонален обоимaxis1иaxis3). Для углов Эйлера существует дополнительная связь междуaxis1илиaxis3, с двумя возможностями:axis1иaxis3также ортогональны (асимметричная последовательность)axis1 == axis3(симметричная последовательность)
Для углов Дэвенпорта это последнее соотношение ослаблено [2], и только требование последовательных ортогональных осей сохраняется.
- Параметры:
- осиarray_like, форма (3,) или ([1 или 2 или 3], 3)
Ось вращения, если она одномерная. Если двумерная, описывает последовательность осей для вращений, где каждая ось axes[i, :] является i-й осью. Если задано более одной оси, то вторая ось должна быть ортогональна как первой, так и третьей осям.
- порядокstring
Если равно 'e' или 'extrinsic', последовательность будет внешней. Если равно 'i' или 'intrinsic', последовательность будет рассматриваться как внутренняя.
- углыfloat или array_like, форма (N,) или (N, [1 или 2 или 3])
Углы Эйлера, заданные в радианах (градусы равно False) или степени (градусы равно True). Для одной оси, углы может быть:
единственное значение
array_like с формой (N,), где каждый angle[i] соответствует одному вращению
array_like с формой (N, 1), где каждый angle[i, 0] соответствует одному вращению
Для 2 и 3 осей, углы может быть:
array_like с формой (W,) где W это количество строк оси, что соответствует одному вращению с W оси
array_like с формой (N, W), где каждый angle[i] соответствует последовательности углов Дэвенпорта, описывающей единственное вращение
- градусыbool, необязательно
Если True, то предполагается, что заданные углы указаны в градусах. По умолчанию False.
- Возвращает:
- вращение
Rotationэкземпляр Объект, содержащий вращение, представленное последовательностью вращений вокруг заданных осей с заданными углами.
- вращение
Ссылки
[2]Шустер, Малкольм и Маркли, Лэндис. (2003). Обобщение углов Эйлера. Журнал астронавтических наук. 51. 123-132. 10.1007/BF03546304.
Примеры
>>> from scipy.spatial.transform import Rotation as R
Углы Дэвенпорта — это обобщение углов Эйлера, когда мы используем канонические базисные оси:
>>> ex = [1, 0, 0] >>> ey = [0, 1, 0] >>> ez = [0, 0, 1]
Инициализировать одно вращение с заданной последовательностью осей:
>>> axes = [ez, ey, ex] >>> r = R.from_davenport(axes, 'extrinsic', [90, 0, 0], degrees=True) >>> r.as_quat().shape (4,)
Это эквивалентно углам Эйлера в данном случае:
>>> r.as_euler('zyx', degrees=True) array([90., 0., -0.])
Инициализировать несколько вращений в одном объекте:
>>> r = R.from_davenport(axes, 'extrinsic', [[90, 45, 30], [35, 45, 90]], degrees=True) >>> r.as_quat().shape (2, 4)
Использование только одной или двух осей также возможно:
>>> r = R.from_davenport([ez, ex], 'extrinsic', [[90, 45], [35, 45]], degrees=True) >>> r.as_quat().shape (2, 4)
Некканонические оси возможны, и они не должны быть нормализованы, пока последовательные оси ортогональны:
>>> e1 = [2, 0, 0] >>> e2 = [0, 1, 0] >>> e3 = [1, 0, 1] >>> axes = [e1, e2, e3] >>> r = R.from_davenport(axes, 'extrinsic', [90, 45, 30], degrees=True) >>> r.as_quat() [ 0.701057, 0.430459, -0.092296, 0.560986]