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. ])