scipy.spatial.transform.Rotation.

__mul__#

Rotation.__mul__()#

将此旋转与另一个组合。

如果 pq 是两个旋转,那么 ‘q 接着 p’ 的组合等价于 p * q。在旋转矩阵的术语中,组合可以表示为 p.as_matrix() @ q.as_matrix()

参数:
其他 : Rotation 实例旋转实例

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

返回:
组合 : 旋转 实例旋转实例

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

  • 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]])