将复杂的矩阵变换分解为一系列简单的变换?

时间:2009-07-24 11:14:00

标签: math vector matrix transform decomposition

我想知道是否有可能(以及如果是这样)将任意M3矩阵变换重新呈现为一系列更简单的变换(例如平移,缩放,倾斜,旋转)

换句话说:如何从MComplex计算MTranslate,MScale,MRotate,MSkew矩阵,以便下列公式为真:

MComplex = MTranslate * MScale * MRotate * MSkew(或其他顺序)

2 个答案:

答案 0 :(得分:9)

Singular Value Decomposition(另见this blog和此PDF)。它将任意矩阵转换为3个矩阵的组合:正交+对角线+正交。正交矩阵是旋转矩阵;对角矩阵表示沿主轴的倾斜=缩放。

翻译会将一个猴子扳手投入到游戏中,但你应该做的是取出矩阵的平移部分,这样你就有一个3x3矩阵,在它上面运行SVD给你旋转+倾斜,然后添加翻译这样你将有一个旋转+比例+旋转+翻译4个矩阵的组合。可能有可能在3个矩阵中进行此操作(旋转+沿某些轴组的缩放+平移)但我不确定如何...可能是QR分解(Q =正交=旋转,但我不确定是否R只是倾斜或有旋转部分。)

答案 1 :(得分:1)

是的,但解决方案不会是唯一的。你也应该把翻译放在最后(其余的顺序无关紧要)

对于任何给定的方阵A,存在无限多个矩阵BC,以便A = B*C。选择任何可逆矩阵B(这意味着B ^ -1存在或det(B)!= 0)和现在C = B^-1*A

因此,对于您的解决方案,首先将MC分解为MTMS*MR*MSk*I,选择MT作为一些可逆转置矩阵。然后将其余部分分解为MSMR*MSk*I,以便MS是任意缩放矩阵。等等...

现在,如果在乐趣I结尾处是一个单位矩阵(对角线为1,其他地方为0),那么你就是好的。如果不是,请重新开始,但选择不同的矩阵;-)

事实上,使用上面的方法可以象征性地创建一组方程式,它们将为您提供所有这些矩阵的参数化公式。

这些分解对你有多大帮助 - 那是另一个故事。

如果您将此键入 Mathematica Maxima ,他们会立即为您计算。