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