scipy.spatial.transform.RigidTransform.

apply#

RigidTransform.apply(self, вектор, обратный=False)#

Применить преобразование к вектору.

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

  • Как проекция компонентов вектора, выраженных в конечной системе координат, на исходную систему координат.

  • Как физическое преобразование вектора, приклеенного к исходной системе координат при её преобразовании. В этом случае компоненты вектора выражаются в исходной системе координат до и после преобразования.

В терминах матриц поворота и векторов переноса это применение эквивалентно self.translation + self.rotation.as_matrix() @ vector.

Параметры:
векторarray_like, форма (N, 3) или (3,)

Одиночный вектор или стек векторов.

обратныйbool, необязательно

Если True, применяется обратное преобразование к вектору.

Возвращает:
transformed_vectornumpy.ndarray, форма (N, 3) или (3,)

Преобразованный вектор(ы). Форма зависит от следующих случаев:

  • Если объект содержит одно преобразование (в отличие от стека с одним преобразованием) и указан один вектор с формой (3,), затем transformed_vector имеет форму (3,).

  • Во всех остальных случаях, transformed_vector имеет форму (N, 3), где N является либо количеством преобразований, либо векторов.

Примеры

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

Применить одно преобразование к вектору. Здесь преобразование — это просто сдвиг, поэтому результат — вектор, сложенный с вектором сдвига.

>>> t = np.array([1, 2, 3])
>>> tf = Tf.from_translation(t)
>>> t + np.array([1, 0, 0])
array([2, 2, 3])
>>> tf.apply([1, 0, 0])
array([2., 2., 3.])

Применить одно преобразование к стеку векторов:

>>> tf.apply([[1, 0, 0], [0, 1, 0]])
array([[2., 2., 3.],
       [1., 3., 3.]])

Применить обратное преобразование к вектору, так что результат - это отрицание вектора перевода, добавленного к вектору.

>>> -t + np.array([1, 0, 0])
array([0, -2, -3])
>>> tf.apply([1, 0, 0], inverse=True)
array([0., -2., -3.])

Для преобразований, которые не являются чистыми трансляциями, применение к вектору эквивалентно применению компонента вращения к вектору и затем добавлению компонента трансляции.

>>> r = R.from_euler('z', 60, degrees=True)
>>> tf = Tf.from_components(t, r)
>>> t + r.apply([1, 0, 0])
array([1.5,       2.8660254, 3.       ])
>>> tf.apply([1, 0, 0])
array([1.5,       2.8660254, 3.       ])

При применении обратного преобразования результат представляет собой отрицание вектора переноса, добавленного к вектору, а затем повернутого обратным вращением.

>>> r.inv().apply(-t + np.array([1, 0, 0]))
array([-1.73205081, -1.        , -3.        ])
>>> tf.apply([1, 0, 0], inverse=True)
array([-1.73205081, -1.        , -3.        ])