scipy.spatial.transform.Rotation.

as_mrp#

Rotation.as_mrp()[source]#

表示为修正的罗德里格参数 (MRPs)。

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

MRPs 在 360 度处存在奇异性,可以通过确保旋转角度不超过 180 度来避免,即当旋转角度超过 180 度时,切换旋转方向。 此函数将始终返回对应于小于或等于 180 度的旋转的 MRPs。

返回:
mrpsndarray, shape (…, 3)

形状取决于用于初始化的输入的形状。

附注

版本 1.6.0 中新增。

数组 API 标准支持

as_mrp 对 NumPy 之外的 Python 数组 API 标准兼容后端具有实验性支持。 请考虑通过设置环境变量 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_rotvec([0, 0, np.pi])
>>> r.as_mrp()
array([0.        , 0.        , 1.         ])
>>> r.as_mrp().shape
(3,)

表示包含单个旋转的堆栈

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

表示多个旋转

>>> r = R.from_rotvec([[np.pi/2, 0, 0], [0, 0, np.pi/2]])
>>> r.as_mrp()
array([[0.41421356, 0.        , 0.        ],
       [0.        , 0.        , 0.41421356]])
>>> r.as_mrp().shape
(2, 3)