scipy.spatial.transform.RigidTransform.
inv#
- RigidTransform.inv(self)#
Invert this transform.
Composition of a transform with its inverse results in an identity transform.
A rigid transform is a composition of a rotation and a translation, where the rotation is applied first, followed by the translation. So the inverse transform is equivalent to the inverse translation followed by the inverse rotation.
- Returns:
RigidTransform
instanceThe inverse of this transform.
Examples
>>> from scipy.spatial.transform import RigidTransform as Tf >>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
A transform composed with its inverse results in an identity transform:
>>> rng = np.random.default_rng(seed=123) >>> t = rng.random(3) >>> r = R.random(rng=rng) >>> tf = Tf.from_components(t, r) >>> tf.as_matrix() array([[-0.45431291, 0.67276178, -0.58394466, 0.68235186], [-0.23272031, 0.54310598, 0.80676958, 0.05382102], [ 0.85990758, 0.50242162, -0.09017473, 0.22035987], [ 0. , 0. , 0. , 1. ]])
>>> (tf.inv() * tf).as_matrix() array([[[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]])
The inverse rigid transform is the same as the inverse translation followed by the inverse rotation:
>>> t, r = tf.as_components() >>> r_inv = r.inv() # inverse rotation >>> t_inv = -t # inverse translation >>> tf_r_inv = Tf.from_rotation(r_inv) >>> tf_t_inv = Tf.from_translation(t_inv) >>> np.allclose((tf_r_inv * tf_t_inv).as_matrix(), ... tf.inv().as_matrix(), ... atol=1e-12) True >>> (tf_r_inv * tf_t_inv * tf).as_matrix() array([[[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]])