Math 将变换矩阵分解为正交矩阵和尺度矩阵

Math 将变换矩阵分解为正交矩阵和尺度矩阵,math,graphics,matrix,Math,Graphics,Matrix,如果我有一个来自缩放、平移和旋转变换的矩阵。我想把这个矩阵分成两个矩阵。一种是旋转+平移矩阵,另一种是尺度矩阵 因为我想计算正确的法向量变换,所以我只需要正交矩阵来计算曲面法向量 有什么想法吗?只是个想法- 将矩阵乘以单位向量(1/sqrt(3)、1/sqrt(3)、1/sqrt(3)) 检查乘法后向量的长度 按该值的倒数缩放矩阵。现在有一个正交矩阵 使用找到的比例创建新的比例矩阵 如果我有一个来自缩放、平移和旋转变换的矩阵。我想把这个矩阵分成两个矩阵。一种是旋转+平移矩阵,另一种是尺度矩阵

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

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

有什么想法吗?

只是个想法-

  • 将矩阵乘以单位向量
    (1/sqrt(3)、1/sqrt(3)、1/sqrt(3))
  • 检查乘法后向量的长度
  • 按该值的倒数缩放矩阵。现在有一个正交矩阵
  • 使用找到的比例创建新的比例矩阵
如果我有一个来自缩放、平移和旋转变换的矩阵。我想把这个矩阵分成两个矩阵。一种是旋转+平移矩阵,另一种是尺度矩阵

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

我将使这两个操作“缩放”和“旋转+平移”。请注意:这些操作不是可交换的。缩放一个3矢量,然后旋转/平移该缩放矢量会产生一个与颠倒操作顺序不同的结果

案例1,操作是“旋转+平移”,然后是“缩放”。
设SR=S*R,其中S是具有正对角元素的3x3对角矩阵(缩放矩阵),R是3x3正交旋转矩阵。矩阵SR的行将相互正交,但列将不正交。比例因子是矩阵SR行的范数的平方根

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

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

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

    A = [  RS(3x3)  x(3x1) ]
        [   0(1x3)    1    ]
    
  • 如上所述,将A划分为3x3矩阵RS和3向量x
  • 构造标度矩阵S。前三个对角元素是矩阵RS列的向量范数;最后一个对角线元素是1
  • 通过将A的每一行除以相应的比例因子,构造4x4旋转+平移矩阵T
  • 如果缩放不均匀(例如,缩放x×2、y×4、z×1/2),可以通过查看上部3x3矩阵的行和列的内积来判断操作顺序。最后缩放(我的案例1)意味着行内积将非常接近于零,但列内积将不为零。首先缩放(我的案例2)可以扭转这种情况。如果缩放是均匀的,就无法判断哪种情况是哪种情况。你需要事先知道

  • 删除平移以获得3x3矩阵
  • 通过SVD执行测试

  • 当你说要计算正确的法向量变换时,我很困惑。如果你的矩阵是缩放、平移和旋转,那么它是正交的。你的意思是正交矩阵吗?如果矩阵是,。向量将被转换为。向量方向不对。我没有时间给出正确的答案,但这种分解是QR分解(在维基百科上查找)。此外,法线应该根据变换矩阵的倒数的转置进行变换(尽管它不再是单位长度)。QR有点过分,如果操作是缩放,则只会产生所需的答案,然后旋转+平移。如果操作是旋转+平移,则需要进行RQ分解,然后进行缩放。我可以这样做:先进行乘法,然后再进行缩放。向量*矩阵*(1/((1/sqrt(3),1/sqrt(3),1/sqrt(3))*矩阵)。剪切呢?如果同时包含剪力,是否也可以拆分剪力?