scipy.spatial.transform.RigidTransform.

apply#

RigidTransform.apply(self, vector, inverse=False)#

将变换应用于向量。

如果原始坐标系通过此变换转换为最终坐标系,则可以从两种方式看待它对向量的应用

  • 作为最终坐标系中表达的向量分量到原始坐标系的投影。

  • 作为向量被粘附到原始坐标系并在其变换时进行的物理变换。 在这种情况下,向量分量在变换之前和之后都以原始坐标系表示。

用旋转矩阵和平移向量表示,此应用与 self.translation + self.rotation.as_matrix() @ vector 相同。

参数:
vectorarray_like, 形状 (N, 3) 或 (3,)

单个向量或向量堆栈。

inversebool, 可选

如果为 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.        ])