scipy.spatial.transform.Rotation.
from_quat#
- classmethod Rotation.from_quat(cls, quat, *, scalar_first=False)#
从四元数初始化。
三维旋转可以用单位范数的四元数表示 [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
在四元数中,有两种约定来排列组件:
标量优先顺序 –
(w, x, y, z)
标量最后顺序 –
(x, y, z, w)
选择由 scalar_first 参数控制。默认情况下,它是 False,并假设为标量在后顺序。
高级用户可能对四元数表示法对3D空间的双重覆盖感兴趣 [2]。截至版本1.11.0,以下操作子集(且仅此子集)在
Rotation
r
对应于四元数q
时,保证保留双重覆盖属性:r = Rotation.from_quat(q)
,r.as_quat(canonical=False)
,r.inv()
,以及使用*
运算符的组合,例如r*r
。- 参数:
- 四元数array_like, 形状 (N, 4) 或 (4,)
每一行是一个(可能是非单位范数)的四元数,表示一个主动旋转。每个四元数将被归一化为单位范数。
- scalar_firstbool, 可选
标量分量是放在首位还是末位。默认是 False,即假设为标量-末位顺序。
- 返回:
- 旋转 :
Rotation
实例旋转实例 包含由输入四元数表示的旋转的对象。
- 旋转 :
参考文献
[2]Hanson, Andrew J. “可视化四元数”。Morgan Kaufmann Publishers Inc., 旧金山, 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])