更改行优先 4x4 变换矩阵的 'handedness'

Change 'handedness' of a Row-major 4x4 transformation matrix

我有行主 4x4 变换矩阵格式的变换和旋转坐标数据。

Ux Vx Wx Tx    
Uy Vy Wy Ty    
Uz Vz Wz Tz    
0  0  0  1

数据的来源和我需要发送它的软件有不同的手坐标系。一个是左撇子,一个是右撇子

如何将矩阵从右手变为左手,反之亦然? 我知道对于转换你可以只反转 Y 轴,但对于旋转它似乎更复杂。

谢谢。

您可以通过翻转 Y 轴在两个坐标系之间转换向量。这相当于乘以矩阵:

F = [ 1  0  0  0 ]
    [ 0 -1  0  0 ]
    [ 0  0  1  0 ]
    [ 0  0  0  1 ]

要在翻转的坐标 space 中应用变换,您可以翻转 Y 轴,应用变换,然后再次翻转 Y 轴以返回到原始坐标 space。写成矩阵乘法,这看起来像:

F*(M*(F*x))                [1]

(其中 M 是您的矩阵)。好的,但这很浪费——现在我们有三个矩阵乘法而不是一个;幸运的是,矩阵乘法是关联的,所以我们改写:

F*(M*(F*x)) = (FMF)*x

我们只需要计算矩阵 FMF。左乘对角矩阵通过对角线上的相应元素缩放另一个矩阵的行;右乘缩放列。所以我们需要做的就是否定第二行和第二列:

FMF = [ Ux -Vx  Wx  Tx ]
      [-Uy  Vy -Wy -Ty ]
      [ Uz -Vz  Wz  Tz ]
      [  0   0   0   1 ]

根据您的评论,听起来您可能实际上并不想转换回原始坐标系,在这种情况下,您可以简单地使用矩阵 MF 而不是 FMF。

[1] 更一般地,进行变换,然后进行一些操作,然后撤消变换称为 共轭作用 ,它通常具有 F⁻¹MF 的形式.恰好我们的矩阵 F 是它自己的逆矩阵。