scipy.spatial.transform.RigidTransform.
__pow__#
- RigidTransform.__pow__(self, float n)#
将此变换与自身组合 n 次。
一个刚性变换 p,当提升为非整数幂时,可以被认为是找到变换的一部分。例如,0.5 的幂找到从恒等到 p 的“中间”变换。
这是通过在 p 和恒等变换之间应用螺旋线性插值 (ScLERP) 来实现的,其中旋转分量的角度按 n 缩放,并且平移沿螺旋轴按比例调整。
q = p ** n
也可以表示为q = RigidTransform.from_exp_coords(p.as_exp_coords() * n)
。如果 n 为负数,则在应用幂之前变换将被反转。换句话说,
p ** -abs(n) == p.inv() ** abs(n)
。- 参数:
- nfloat
将变换与自身组合的次数。
- 返回值:
RigidTransform
实例如果输入 Rotation p 包含 N 个多个旋转,则输出将包含 N 个旋转,其中第 i 个旋转等于
p[i] ** n
。
注释
有三个值得注意的情况:如果
n == 1
则返回原始变换的副本,如果n == 0
则返回恒等变换,如果n == -1
则返回逆变换。请注意,有效获取旋转根的分数幂
n
使用该角度的最短路径最小表示(主根)。这意味着n
和1/n
的幂不一定是彼此的逆。例如,+240 度旋转的 0.5 幂将被计算为 -120 度旋转的 0.5 幂,结果是 -60 度而不是 +120 度的旋转。示例
>>> from scipy.spatial.transform import RigidTransform as Tf >>> import numpy as np
2 的幂返回与自身组合的变换
>>> tf = Tf.from_translation([1, 2, 3]) >>> (tf ** 2).translation array([2., 4., 6.]) >>> (tf ** 2).as_matrix() array([[1., 0., 0., 2.], [0., 1., 0., 4.], [0., 0., 1., 6.], [0., 0., 0., 1.]])
负幂返回变换的倒数提升为 n 的绝对值
>>> (tf ** -2).translation array([-2., -4., -6.]) >>> np.allclose((tf ** -2).as_matrix(), (tf.inv() ** 2).as_matrix(), ... atol=1e-12) True
0 的幂返回恒等变换
>>> (tf ** 0).as_matrix() array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])
1 的幂返回原始变换的副本
>>> (tf ** 1).as_matrix() array([[1., 0., 0., 1.], [0., 1., 0., 2.], [0., 0., 1., 3.], [0., 0., 0., 1.]])
分数幂返回一个变换,该变换具有缩放的旋转并沿螺旋轴平移。这里我们取变换的平方根,平方根化时会恢复原始变换
>>> tf_half = (tf ** 0.5) >>> tf_half.translation array([0.5, 1., 1.5]) >>> (tf_half ** 2).as_matrix() array([[1., 0., 0., 1.], [0., 1., 0., 2.], [0., 0., 1., 3.], [0., 0., 0., 1.]])