【问题标题】:Change 'handedness' of a Row-major 4x4 transformation matrix更改行主要 4x4 变换矩阵的“惯用手”
【发布时间】:2015-05-14 10:25:08
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 您能否说明您的预期结果是什么?
  • 我在目标软件中看到倒转。我的预期结果将是在源和目标中完全相同的旋转。源是:+Z up +X forward +Y side 目标是:+Z up +X forward -Y side 我们尝试将源矩阵乘以:1 0 0 0 0 1 0 1 0,如下所述:@987654321 @ 但是它仍然使一个轴倒置。谢谢

标签: math matrix transformation


【解决方案1】:

您可以通过翻转 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 是它自己的逆矩阵。

【讨论】:

  • 谢谢!看起来很棒。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 2015-12-16
  • 2021-03-24
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多