as_quat#
- Вращение.as_quat(self, канонический=False, *, 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, и используется порядок скаляр-последний.
Отображение из кватернионов в повороты является двузначным, т.е. кватернионы
qи-q, где-qпросто меняет знак каждой компоненты, представляя то же самое пространственное вращение.- Параметры:
- каноническийbool, по умолчанию False
Следует ли отображать избыточное двойное покрытие пространства вращений в уникальное «каноническое» одиночное покрытие. Если True, то кватернион выбирается из {q, -q} так, чтобы член w был положительным. Если член w равен 0, то кватернион выбирается так, чтобы первый ненулевой член из x, y и z был положительным.
- scalar_firstbool, необязательно
Идёт ли скалярная компонента первой или последней. По умолчанию False, т.е. используется порядок скаляр-последний.
- Возвращает:
- quat
numpy.ndarray, форма (4,) или (N, 4) Форма зависит от формы входных данных, использованных для инициализации.
- quat
Ссылки
Примеры
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
Вращение может быть представлено как кватернион с порядком компонентов либо скаляр-последний (по умолчанию), либо скаляр-первый. Это показано для одного вращения:
>>> r = R.from_matrix(np.eye(3)) >>> r.as_quat() array([0., 0., 0., 1.]) >>> r.as_quat(scalar_first=True) array([1., 0., 0., 0.])
Когда несколько вращений хранятся в одном объекте Rotation, результат будет двумерным массивом:
>>> r = R.from_rotvec([[np.pi, 0, 0], [0, 0, np.pi/2]]) >>> r.as_quat().shape (2, 4)
Кватернионы могут быть отображены из избыточного двойного покрытия пространства вращений в каноническое представление с положительным членом w.
>>> r = R.from_quat([0, 0, 0, -1]) >>> r.as_quat() array([0. , 0. , 0. , -1.]) >>> r.as_quat(canonical=True) array([0. , 0. , 0. , 1.])