Math 改变';利手';行主4x4变换矩阵的构造

Math 改变';利手';行主4x4变换矩阵的构造,math,matrix,transformation,Math,Matrix,Transformation,我有一个变换和旋转坐标数据,它是一个以行为主的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 ]

我有一个变换和旋转坐标数据,它是一个以行为主的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 ]
要在翻转的坐标空间中应用变换,可以翻转Y轴,应用变换,然后再次翻转Y轴以返回原始坐标空间。写为矩阵乘法,如下所示:

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是它自己的逆矩阵。

你能澄清一下你的预期结果是什么吗?我在目标软件中看到了反向旋转。我的预期结果将是源和目标中完全相同的旋转。源是:+Z向上+X向前+Y侧目标是:+Z向上+X向前-Y侧我们已经尝试将源矩阵乘以:1 0 0 0 0 1 0 1 0,如下所述:但它仍然使一个轴反转。谢谢你!看起来很棒。非常感谢!