__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преобразования.
- Параметры:
- other
RigidTransformэкземпляр Объект, содержащий преобразования для композиции с этим.
- other
- Возвращает:
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