astrix.spatial.rotation module¶
- class RotationLike[source]¶
Bases:
ABCAbstract base class for rotation objects (RotationSingle, RotationSequence). ‘convert_to’ function is required for integration with other modules.
- property backend: str¶
- class RotationSequence(rot, time, backend=None)[source]¶
Bases:
RotationLikeA sequence of time-tagged rotations, enabling interpolation between them. Uses scipy.spatial.transform.Slerp for interpolation.
- Parameters:
rot (Rotation | list of Rotation) – A scipy Rotation object containing multiple rotations, or a list of such objects. If a list is provided, all elements must be scipy Rotation objects.
time (Time) – A Time object with time instances corresponding to each rotation. Must be the same length as the number of rotations and strictly increasing.
backend (BackendArg, optional) – Array backend to use (numpy, jax, etc.). Defaults to numpy.
Examples
>>> from astrix.primitives import Time, RotationSequence >>> from scipy.spatial.transform import Rotation >>> from datetime import datetime, timezone >>> times = Time.from_datetime( ... [ ... datetime(2021, 1, 1, 12, 0, 0, tzinfo=timezone.utc), ... datetime(2021, 1, 1, 13, 0, 0, tzinfo=timezone.utc), ... datetime(2021, 1, 1, 14, 0, 0, tzinfo=timezone.utc), ... ] ... ) >>> rots = Rotation.from_euler( ... "xyz", ... [ ... [0, 0, 0], ... [90, 0, 0], ... [180, 0, 0], ... ], ... degrees=True, ... ) >>> rot_seq = RotationSequence(rots, times)
>>> interp_rot = rot_seq.interp( ... Time.from_datetime(datetime(2021, 1, 1, 12, 30, 0, tzinfo=timezone.utc)) ... ) # Interpolate to halfway between first and second rotation >>> interp_rot.as_euler( ... "xyz", degrees=True ... ) # Get interpolated rotation as Euler angles array([[45., 0., 0.]])
- convert_to(backend)[source]¶
Convert the RotationSequence object to a different backend.
- Return type:
- Parameters:
backend (str | Any | None)
- downsample(dt_max)[source]¶
Downsample the rotation sequence to a coarser time resolution.
- Parameters:
dt_max (float) – Desired maximum time step in seconds for downsampling.
- Returns:
A new RotationSequence object with downsampled rotations.
- Return type:
- interp(time, check_bounds=True)[source]¶
Interpolate the rotation sequence at the given times to return Rotation(s).
- Return type:
Rotation- Parameters:
time (Time)
check_bounds (bool)
- property rots: Rotation¶
Get the underlying scipy Rotation object containing all rotations.