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

Math 将复杂矩阵变换分解为一系列简单变换?,math,vector,matrix,transform,decomposition,Math,Vector,Matrix,Transform,Decomposition,我想知道是否有可能(如果是这样的话)将任意M3矩阵变换重新表示为一系列更简单的变换(例如平移、缩放、倾斜、旋转) 换句话说:如何从MComplex计算MTranslate、MScale、MRotate、MSkew矩阵,从而使以下等式为真: MComplex=MTranslate*MScale*MRotate*MSkew(或其他顺序)是,但解决方案不是唯一的。你也应该把翻译放在最后(其余的顺序无关紧要) 对于任何给定的方阵A存在无限多个矩阵B和C,因此A=B*C。选择任意可逆矩阵B(这意味着B^-

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

换句话说:如何从MComplex计算MTranslate、MScale、MRotate、MSkew矩阵,从而使以下等式为真:


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

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

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

因此,对于您的解决方案,首先将
MC
分解为
MT
MS*MR*MSk*I
,选择MT作为某种可逆转置矩阵。然后将其余部分分解为
MS
MR*MSk*I
,使MS为任意缩放矩阵。等等

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

事实上,使用上述方法,你可以创建一组方程,为所有这些矩阵生成一个参数化公式

这些分解对你来说是多么有用,好吧,那是另一回事了

如果你把它输入Mathematica或Maxima,他们会很快为你计算出来

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


翻译在游戏中使用了一个活动扳手,但是你应该做的是取出矩阵的翻译部分,这样你就有了一个3x3矩阵,在上面运行SVD,给你旋转+倾斜,然后将翻译部分添加回游戏中。这样你将有一个由4个矩阵组成的旋转+缩放+旋转+平移组合。这可能在3个矩阵中实现(旋转+沿某组轴缩放+平移),但我不确定具体如何。。。可能是QR分解(Q=正交=旋转,但我不确定R是仅倾斜还是有旋转部分。)

你有一个好的观点,除了这些矩阵有额外的键(平移是最右边列包含平移向量的单位矩阵,等等)。就我所能想象的,这四种转换——假设顺序是固定的——应该会产生明确的结果。