from_mrp#
- static Rotation.from_mrp(mrp)[source]#
Initialize from Modified Rodrigues Parameters (MRPs).
MRPs are a 3 dimensional vector co-directional to the axis of rotation and whose magnitude is equal to
tan(theta / 4)
, wheretheta
is the angle of rotation (in radians) [1].MRPs have a singularity at 360 degrees which can be avoided by ensuring the angle of rotation does not exceed 180 degrees, i.e. switching the direction of the rotation when it is past 180 degrees.
- Parameters:
- mrparray_like, shape (N, 3) or (3,)
A single vector or a stack of vectors, where mrp[i] gives the ith set of MRPs.
- Returns:
- rotation
Rotation
instance Object containing the rotations represented by input MRPs.
- rotation
Notes
Added in version 1.6.0.
Array API Standard Support
from_mrp
has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variableSCIPY_ARRAY_API=1
and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.Library
CPU
GPU
NumPy
✅
n/a
CuPy
n/a
✅
PyTorch
✅
✅
JAX
✅
✅
Dask
⛔
n/a
See Support for the array API standard for more information.
References
[1]Shuster, M. D. “A Survey of Attitude Representations”, The Journal of Astronautical Sciences, Vol. 41, No.4, 1993, pp. 475-476
Examples
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
Initialize a single rotation:
>>> r = R.from_mrp([0, 0, 1]) >>> r.as_euler('xyz', degrees=True) array([0. , 0. , 180. ]) >>> r.as_euler('xyz').shape (3,)
Initialize multiple rotations in one object:
>>> 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)
It is also possible to have a stack of a single rotation:
>>> r = R.from_mrp([[0, 0, np.pi/2]]) >>> r.as_euler('xyz').shape (1, 3)