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