scipy.spatial.transform.Rotation.

from_mrp#

static Rotation.from_mrp(mrp)[source]#

从修正的 Rodrigues 参数 (MRPs) 初始化。

MRPs 是一个与旋转轴共线的 3 维向量,其大小等于 tan(theta / 4),其中 theta 是旋转角度(以弧度为单位)[1]

MRPs 在 360 度处存在奇异性,可以通过确保旋转角度不超过 180 度来避免,即当旋转角度超过 180 度时,切换旋转方向。

参数:
mrparray_like, shape (…, 3)

单个向量或 ND 数组的向量,其最后一个维度包含旋转参数。

返回:
rotationRotation 实例

包含由输入 MRP 表示的旋转的对象。

附注

版本 1.6.0 中新增。

数组 API 标准支持

from_mrp 对 Python Array API 标准兼容的后端具有实验性支持,除了 NumPy 之外。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

Dask

不适用

有关更多信息,请参阅 对数组 API 标准的支持

参考文献

[1]

Shuster, M. D. “A Survey of Attitude Representations”, The Journal of Astronautical Sciences, Vol. 41, No.4, 1993, pp. 475-476

示例

>>> from scipy.spatial.transform import Rotation as R
>>> import numpy as np

初始化单个旋转

>>> r = R.from_mrp([0, 0, 1])
>>> r.as_euler('xyz', degrees=True)
array([0.        , 0.        , 180.      ])
>>> r.as_euler('xyz').shape
(3,)

在一个对象中初始化多个旋转

>>> r = R.from_mrp([
... [0, 0, 1],
... [1, 0, 0]])
>>> r.as_euler('xyz', degrees=True)
array([[0.        , 0.        , 180.      ],
       [180.0     , 0.        , 0.        ]])
>>> r.as_euler('xyz').shape
(2, 3)

也可以有一个单个旋转的堆栈

>>> r = R.from_mrp([[0, 0, np.pi/2]])
>>> r.as_euler('xyz').shape
(1, 3)