更改行优先 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 是它自己的逆矩阵。
我有行主 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 是它自己的逆矩阵。