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 使用该角度的最短路径最小表示(主根)。这意味着 n1/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.]])