scipy.spatial.transform.Rotation.

__mul__#

Вращение.__mul__(self, Вращение other)#

Скомбинируйте это вращение с другим.

Если p и q являются двумя вращениями, тогда композиция ‘q, за которым следует p’ эквивалентна p * q. В терминах матриц вращения, композиция может быть выражена как p.as_matrix() @ q.as_matrix().

Параметры:
otherRotation экземпляр

Объект, содержащий вращения для композиции с этим. Обратите внимание, что композиции вращений не коммутативны, поэтому p * q обычно отличается от q * p.

Возвращает:
композицияRotation экземпляр

Эта функция поддерживает композицию нескольких поворотов одновременно. Возможны следующие случаи:

  • Либо p или q содержит одно вращение. В этом случае композиция содержит результат композиции каждого вращения в другом объекте с единичным вращением.

  • Оба p и q содержать N вращения. В этом случае каждое вращение p[i] составляется с соответствующим вращением q[i] и вывод содержит 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]])