将变换矩阵拆分为orhhogonal矩阵和比例矩阵

时间:2011-06-29 07:08:10

标签: math graphics matrix

如果我有一个来自缩放,平移和旋转变换的矩阵。我想把这个矩阵分成两个矩阵。一个是旋转+平移矩阵,另一个是比例矩阵。

因为我想计算正确的法向量变换,所以我只需要正交矩阵来计算表面法向量

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

  

如果我有一个来自缩放,平移和旋转变换的矩阵。我想把这个矩阵分成两个矩阵。一个是旋转+平移矩阵,另一个是比例矩阵。

我假设你所说的这个矩阵是一个4x4矩阵,被一些人广泛使用,被其他人广泛鄙视,第四行是0,0,0,1。

我将导致这两个操作“缩放”和“旋转+翻译”。注意:这些操作不是可交换的。缩放3向量,然后旋转/平移此缩放向量会产生与通过反转操作顺序得到的结果不同的结果。

案例1,操作是“旋转+翻译”,然后是“缩放”。
令SR = S * R,其中S是具有正对角线元素的3×3对角矩阵(缩放矩阵),并且R是3×3正交旋转矩阵。矩阵SR的行将彼此正交,但列不是正交的。比例因子是矩阵SR行的范数的平方根。

算法: 给定4×4矩阵A,产生4×4缩放矩阵S,4×4旋转+平移矩阵T

A = [  SR(3x3)  Sx(3x1) ]
    [   0(1x3)     1    ]
  1. 将A分区为3x3矩阵SR和3矢量Sx,如上所述。
  2. 构造缩放矩阵S.前三个对角元素是矩阵SR行的向量范数;最后一个对角元素是1。
  3. 通过将A的每一行除以相应的比例因子来构造4x4旋转+平移矩阵T.
  4. 案例2,操作是“缩放”,然后是“旋转+翻译”。
    现在考虑RS = R * S的情况。这里A的列将彼此正交,但行不是正交的。在这种情况下,比例因子是矩阵RS列的范数的平方根。

    算法: 给定4×4矩阵A,产生4×4旋转+平移矩阵T,4×4缩放矩阵S

    A = [  RS(3x3)  x(3x1) ]
        [   0(1x3)    1    ]
    
    1. 将A分区为3x3矩阵RS和3矢量x,如上所述。
    2. 构造缩放矩阵S.前三个对角元素是矩阵RS的列的向量范数;最后一个对角元素是1。
    3. 通过将A的每一行除以相应的比例因子来构造4x4旋转+平移矩阵T.
    4. 如果缩放不均匀(例如,缩放x乘2,y乘4,z乘1/2),您可以通过查看上部3x3的行和列的内积来说明操作的顺序矩阵彼此。缩放最后(我的情况1)意味着行内部产品将非常接近零,但列内部产品将不为零。首先缩放(我的情况2)会逆转这种情况。如果缩放是统一的,则无法分辨哪种情况。你需要事先知道。

答案 1 :(得分:0)

只是一个想法 -

  • 将矩阵乘以单位向量(1/sqrt(3),1/sqrt(3),1/sqrt(3))
  • 检查乘法后矢量的长度,
  • 将矩阵按该值的倒数缩放。现在你有了一个正交矩阵
  • 使用您找到的比例创建新的比例矩阵。

答案 2 :(得分:0)

  1. 删除翻译以获得3x3矩阵
  2. 通过SVD执行polar decomposition