from_quat#
- метод класса Вращение.from_quat(cls, quat, *, scalar_first=False)#
Инициализация из кватернионов.
Вращения в 3-х измерениях могут быть представлены с использованием единичных нормированных кватернионов [1].
4 компонента кватерниона разделены на скалярную часть
wи векторная часть(x, y, z)и может быть выражен через уголthetaи осьnвращения следующим образом:w = cos(theta / 2) x = sin(theta / 2) * n_x y = sin(theta / 2) * n_y z = sin(theta / 2) * n_z
Существует 2 соглашения для порядка компонентов в кватернионе:
скалярный первый порядок –
(w, x, y, z)скаляр-последний порядок –
(x, y, z, w)
Выбор контролируется scalar_first аргумент. По умолчанию он равен False, и предполагается порядок скаляр-последний.
Опытные пользователи могут быть заинтересованы в «двойном покрытии» 3D-пространства представлением кватернионами [2]. Начиная с версии 1.11.0, следующий поднабор (и только этот поднабор) операций над
Rotationrсоответствующий кватернионуqгарантированно сохраняют свойство двойного покрытия:r = Rotation.from_quat(q),r.as_quat(canonical=False),r.inv(), и композиция с использованием*оператор, такой какr*r.- Параметры:
- quatarray_like, форма (N, 4) или (4,)
Каждая строка представляет собой (возможно, не единичной нормы) кватернион, представляющий активное вращение. Каждый кватернион будет нормализован к единичной норме.
- scalar_firstbool, необязательно
Whether the scalar component goes first or last. Default is False, i.e. the scalar-last order is assumed.
- Возвращает:
- вращение
Rotationэкземпляр Объект, содержащий вращения, представленные входными кватернионами.
- вращение
Ссылки
[2]Hanson, Andrew J. "Visualizing quaternions." Morgan Kaufmann Publishers Inc., San Francisco, CA. 2006.
Примеры
>>> from scipy.spatial.transform import Rotation as R
Вращение может быть инициализировано из кватерниона с порядком компонентов скаляр-последний (по умолчанию) или скаляр-первый, как показано ниже:
>>> r = R.from_quat([0, 0, 0, 1]) >>> r.as_matrix() array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) >>> r = R.from_quat([1, 0, 0, 0], scalar_first=True) >>> r.as_matrix() array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Можно инициализировать несколько вращений в одном объекте, передавая двумерный массив:
>>> r = R.from_quat([ ... [1, 0, 0, 0], ... [0, 0, 0, 1] ... ]) >>> r.as_quat() array([[1., 0., 0., 0.], [0., 0., 0., 1.]]) >>> r.as_quat().shape (2, 4)
Также возможно иметь стек из одного вращения:
>>> r = R.from_quat([[0, 0, 0, 1]]) >>> r.as_quat() array([[0., 0., 0., 1.]]) >>> r.as_quat().shape (1, 4)
Кватернионы нормализуются перед инициализацией.
>>> r = R.from_quat([0, 0, 1, 1]) >>> r.as_quat() array([0. , 0. , 0.70710678, 0.70710678])