scipy.spatial.transform.RigidTransform.

__mul__#

RigidTransform.__mul__(self, RigidTransform other)#

Скомбинировать это преобразование с другим.

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

В терминах трансляций и вращений, композиция при применении к вектору v эквивалентно p.translation + p.rotation.apply(q.translation) + (p.rotation * q.rotation).apply(v).

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

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

  • Оба p и q содержать N преобразования. В этом случае каждое преобразование p[i] композируется с соответствующим преобразованием q[i] и результат содержит N преобразования.

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

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

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

Составное преобразование.

Примеры

>>> from scipy.spatial.transform import RigidTransform as Tf
>>> from scipy.spatial.transform import Rotation as R
>>> import numpy as np

Композиция двух преобразований:

>>> tf1 = Tf.from_translation([1, 0, 0])
>>> tf2 = Tf.from_translation([0, 1, 0])
>>> tf = tf1 * tf2
>>> tf.translation
array([1., 1., 0.])
>>> tf.single
True

При применении к вектору композиция двух преобразований применяется в порядке справа налево.

>>> t1, r1 = [1, 2, 3], R.from_euler('z', 60, degrees=True)
>>> t2, r2 = [0, 1, 0], R.from_euler('x', 30, degrees=True)
>>> tf1 = Tf.from_components(t1, r1)
>>> tf2 = Tf.from_components(t2, r2)
>>> tf = tf1 * tf2
>>> tf.apply([1, 0, 0])
array([0.6339746, 3.3660254, 3.       ])
>>> tf1.apply(tf2.apply([1, 0, 0]))
array([0.6339746, 3.3660254, 3.       ])

Когда хотя бы одно из преобразований не является одиночным, результат - это стек преобразований.

>>> tf1 = Tf.from_translation([1, 0, 0])
>>> tf2 = Tf.from_translation([[0, 2, 0], [0, 0, 3]])
>>> tf = tf1 * tf2
>>> tf.translation
array([[1., 2., 0.],
       [1., 0., 3.]])
>>> tf.single
False
>>> len(tf)
2