from_quat#
- static Rotation.from_quat(quat, *, scalar_first=False)[source]#
从四元数初始化。
三维旋转可以使用单位范数四元数 [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 开始,以下子集(并且仅此子集)的
Rotationr对应于四元数q的操作保证保留双重覆盖属性:r = Rotation.from_quat(q)、r.as_quat(canonical=False)、r.inv()以及使用*运算符进行组合,例如r*r。- 参数:
- quatarray_like, shape (…, 4)
每一行都是表示主动旋转的(可能不是单位范数)四元数。每个四元数将被归一化为单位范数。
- scalar_firstbool, 可选
标量分量是放在最前面还是最后面。默认值为 False,即假定标量最后顺序。
- 返回:
- rotation
Rotation实例 包含由输入四元数表示的旋转的对象。
- rotation
附注
数组 API 标准支持
from_quat对 NumPy 之外的 Python Array API Standard 兼容后端具有实验性支持。请考虑通过设置环境变量SCIPY_ARRAY_API=1并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
✅
JAX
✅
✅
Dask
⛔
不适用
有关更多信息,请参阅 对数组 API 标准的支持。
参考文献
[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.]])
可以通过传递 N 维数组来在一个对象中初始化多个旋转
>>> 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 (1, 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])