scipy.spatial.transform.Rotation.
__mul__#
- Rotation.__mul__()#
将此旋转与另一个组合。
如果 p 和 q 是两个旋转,那么 ‘q 接着 p’ 的组合等价于 p * q。在旋转矩阵的术语中,组合可以表示为
p.as_matrix() @ q.as_matrix()
。- 参数:
- 其他 :
Rotation
实例旋转实例 包含要与此组合的旋转的对象。请注意,旋转组合不具有交换性,因此
p * q
通常与q * p
不同。
- 其他 :
- 返回:
- 组合 : 旋转 实例旋转实例
此函数支持一次组合多个旋转。可能的情况如下:
p
或q
包含一个单一的旋转。在这种情况下,composition 包含了将另一个对象中的每个旋转与这个单一旋转组合的结果。p
和q
都包含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]])