scipy.spatial.transform.Rotation.__mul__

Rotation.__mul__()

将这一旋转与另一旋转组合在一起。

如果 pq 是两个旋转,则‘q后跟p’的组成等价于 p * q 。根据旋转矩阵,组成可以表示为 p.as_matrix().dot(q.as_matrix())

参数
其他Rotation 实例循环实例

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

退货
作文Rotation 实例循环实例

此功能支持一次合成多个旋转。可能出现以下情况:

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

  • 两者都有 pq 包含 N 旋转。在这种情况下,每次旋转 p[i] 由相应的旋转组合而成 q[i]output 包含 N 旋转。

示例

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

两个单圈的组成:

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