from_euler#
- static Rotation.from_euler(seq, angles, degrees=False)[source]#
Initialize from Euler angles.
Rotations in 3-D can be represented by a sequence of 3 rotations around a sequence of axes. In theory, any three axes spanning the 3-D Euclidean space are enough. In practice, the axes of rotation are chosen to be the basis vectors.
The three rotations can either be in a global frame of reference (extrinsic) or in a body centred frame of reference (intrinsic), which is attached to, and moves with, the object under rotation [1].
- Parameters:
- seqstring
Specifies sequence of axes for rotations. Up to 3 characters belonging to the set {‘X’, ‘Y’, ‘Z’} for intrinsic rotations, or {‘x’, ‘y’, ‘z’} for extrinsic rotations. Extrinsic and intrinsic rotations cannot be mixed in one function call.
- anglesfloat or array_like, shape (N,) or (N, [1 or 2 or 3])
Euler angles specified in radians (degrees is False) or degrees (degrees is True). For a single character seq, angles can be:
a single value
array_like with shape (N,), where each angle[i] corresponds to a single rotation
array_like with shape (N, 1), where each angle[i, 0] corresponds to a single rotation
For 2- and 3-character wide seq, angles can be:
array_like with shape (W,) where W is the width of seq, which corresponds to a single rotation with W axes
array_like with shape (N, W) where each angle[i] corresponds to a sequence of Euler angles describing a single rotation
- degreesbool, optional
If True, then the given angles are assumed to be in degrees. Default is False.
- Returns:
- rotation
Rotation
instance Object containing the rotation represented by the sequence of rotations around given axes with given angles.
- rotation
Notes
Array API Standard Support
from_euler
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
Examples
>>> from scipy.spatial.transform import Rotation as R
Initialize a single rotation along a single axis:
>>> r = R.from_euler('x', 90, degrees=True) >>> r.as_quat().shape (4,)
Initialize a single rotation with a given axis sequence:
>>> r = R.from_euler('zyx', [90, 45, 30], degrees=True) >>> r.as_quat().shape (4,)
Initialize a stack with a single rotation around a single axis:
>>> r = R.from_euler('x', [90], degrees=True) >>> r.as_quat().shape (1, 4)
Initialize a stack with a single rotation with an axis sequence:
>>> r = R.from_euler('zyx', [[90, 45, 30]], degrees=True) >>> r.as_quat().shape (1, 4)
Initialize multiple elementary rotations in one object:
>>> r = R.from_euler('x', [90, 45, 30], degrees=True) >>> r.as_quat().shape (3, 4)
Initialize multiple rotations in one object:
>>> r = R.from_euler('zyx', [[90, 45, 30], [35, 45, 90]], degrees=True) >>> r.as_quat().shape (2, 4)