mindsponge.common.invert_rigids

mindsponge.common.invert_rigids(rigids)[源代码]

求解刚体变换的逆变换。

通过 invert_rots 计算刚体变换的旋转矩阵的转置矩阵,再使用 rots_mul_vecs 让该旋转矩阵对平移距离进行旋转,所得平移距离的相反数即为刚体的逆平移距离。

\[ \begin{align}\begin{aligned}inv\_rots = r_r^T = (r_0, r_3, r_6, r_1, r_4, r_7, r_2, r_5, r_8)\\inv\_trans = -r_r^T \cdot r_t^T = (- (r_0 \times t_0 + r_3 \times t_0 + r_6 \times t_0), -(r_1 \times t_1 + r_4 \times t_1 + r_7 \times t_1), -(r_2 \times t_2 + r_5 \times t_2 + r_8 \times t_2))\end{aligned}\end{align} \]
参数:
  • rigids (tuple) - 把刚体从当前坐标系仿射变换到另一个坐标系的旋转矩阵与平移矩阵。

返回:

tuple(rots, trans)。把刚体坐标从当前坐标系变换到另一个坐标系的旋转矩阵与平移矩阵,长度为2,包含旋转矩阵 \((xx, xy, xz, yx, yy, yz, zx, zy, zz)\) 与平移距离 \((x, y, z)\) ,数据类型为标量或者shape相同的Tensor。

支持平台:

Ascend GPU

样例:

>>> import mindsponge
>>> a = ((1, 2, 3, 4, 5, 6, 7, 8, 9), (3, 4, 5))
>>> inv_a = mindsponge.common.invert_rigids(a)
>>> print(inv_a)
((1, 4, 7, 2, 5, 8, 3, 6, 9), (-54.0, -66.0, -78.0))