scipy.spatial.transform.Rotation.

__mul__#

Rotation.__mul__()#

将此旋转与另一个旋转组合。

如果 pq 是两个旋转,则“q 后跟 p”的组合等效于 p * q。就旋转矩阵而言,组合可以表示为 p.as_matrix() @ q.as_matrix()

参数:
otherRotation 实例

包含要与此旋转组合的旋转的对象。请注意,旋转组合不可交换,因此 p * q 通常不同于 q * p

返回:
compositionRotation 实例

此函数支持一次组合多个旋转。以下情况是可能的

  • pq 包含单个旋转。在这种情况下,composition 包含将另一个对象中的每个旋转与单个旋转组合的结果。

  • pq 都包含 N 个旋转。在这种情况下,每个旋转 p[i] 都与相应的旋转 q[i] 组合,并且 output 包含 N 个旋转。

示例

>>> from scipy.spatial.transform import Rotation as R
>>> import numpy as np

两个单旋转的组合

>>> p = R.from_quat([0, 0, 1, 1])
>>> q = R.from_quat([1, 0, 0, 1])
>>> p.as_matrix()
array([[ 0., -1.,  0.],
       [ 1.,  0.,  0.],
       [ 0.,  0.,  1.]])
>>> q.as_matrix()
array([[ 1.,  0.,  0.],
       [ 0.,  0., -1.],
       [ 0.,  1.,  0.]])
>>> r = p * q
>>> r.as_matrix()
array([[0., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])

包含相同旋转数量的两个对象的组合

>>> p = R.from_quat([[0, 0, 1, 1], [1, 0, 0, 1]])
>>> q = R.from_rotvec([[np.pi/4, 0, 0], [-np.pi/4, 0, np.pi/4]])
>>> p.as_quat()
array([[0.        , 0.        , 0.70710678, 0.70710678],
       [0.70710678, 0.        , 0.        , 0.70710678]])
>>> q.as_quat()
array([[ 0.38268343,  0.        ,  0.        ,  0.92387953],
       [-0.37282173,  0.        ,  0.37282173,  0.84971049]])
>>> r = p * q
>>> r.as_quat()
array([[ 0.27059805,  0.27059805,  0.65328148,  0.65328148],
       [ 0.33721128, -0.26362477,  0.26362477,  0.86446082]])