10

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

换句话说:如何从 MComplex 计算 MTranslate、MScale、MRotate、MSkew 矩阵,以便以下等式成立:

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

4

2 回答 2

10

奇异值分解(另请参阅此博客和此PDF)。它将任意矩阵转换为 3 个矩阵的组合:正交 + 对角线 + 正交。正交矩阵是旋转矩阵;对角矩阵表示沿主轴的倾斜 = 缩放。

翻译在游戏中抛出了一个活动扳手,但你应该做的是取出矩阵的平移部分,这样你就有一个 3x3 矩阵,在其上运行 SVD 以给你旋转+倾斜,然后将平移部分添加回. 这样,您将拥有 4 个矩阵的旋转 + 缩放 + 旋转 + 平移组合。可能可以在 3 个矩阵中执行此操作(旋转 + 沿一组轴缩放 + 平移),但我不确定如何......也许是 QR 分解(Q = 正交 = 旋转,但我不确定是否R 仅倾斜或具有旋转部分。)

于 2009-07-24T15:23:06.747 回答
0

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

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

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

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

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

这些分解对你有多大用处,嗯——那是另一回事了。

如果您将其输入MathematicaMaxima,他们会立即为您计算。

于 2009-07-24T12:50:26.090 回答