ktk.geometry.rotate

Contents

ktk.geometry.rotate#

rotate(coordinates, /, seq, angles, *, degrees=False)[source]#

Rotate a series of coordinates along given axes.

Parameters:
  • coordinates – ArrayLike of shape (N, …): the coordinates to rotate.

  • seq (str) – Specifies sequence of axes for rotations. Up to 3 characters belonging to the set {“X”, “Y”, “Z”} for intrinsic rotations (moving axes), or {“x”, “y”, “z”} for extrinsic rotations (fixed axes). Extrinsic and intrinsic rotations cannot be mixed in one function call.

  • angles (ArrayLike) –

    ArrayLike of shape (N,) or (N, [1 or 2 or 3]). Angles are specified in radians (if degrees is False) or degrees (if degrees is True).

    For a single-character seq, angles can be:

    • ArrayLike with shape (N,), where each angle[i] corresponds to a single rotation;

    • ArrayLike with shape (N, 1), where each angle[i, 0] corresponds to a single rotation.

    For 2- and 3-character seq, angles is an ArrayLike with shape (N, W) where each angle[i, :] corresponds to a sequence of Euler angles and W is the length of seq.

  • degrees (bool) – If True, then the given angles are in degrees. Default is False.

Returns:

ArrayLike of shape (N, …): the rotated coordinates.

Return type:

np.ndarray

Examples

Rotate the point (1, 0, 0) by theta degrees around z, then by 45 degrees around y, for theta in [0, 10, 20, 30, 40]:

>>> import kineticstoolkit.lab as ktk
>>> angles = np.array([[0, 45], [10, 45], [20, 45], [30, 45], [40, 45]])
>>> ktk.geometry.rotate([[1, 0, 0, 1]], "zx", angles, degrees=True)
array([[1.        , 0.        , 0.        , 1.        ],
       [0.98480775, 0.1227878 , 0.1227878 , 1.        ],
       [0.93969262, 0.24184476, 0.24184476, 1.        ],
       [0.8660254 , 0.35355339, 0.35355339, 1.        ],
       [0.76604444, 0.45451948, 0.45451948, 1.        ]])