我正试图找出如何仅使用平移、旋转和非均匀缩放来获得任意仿射3D矩阵的等价物。
处理剪切是一个棘手的部分。单个剪切变换可以表示为旋转、非均匀尺度和旋转的组合,如下所述:剪切矩阵作为基本变换的组合?
然而,对于3D,可以同时在多个平面上进行剪切;例如XY、XZ和YZ。虽然我可以用旋转、缩放、旋转来表达每一个,但总共需要6次旋转和3次缩放操作。我有一种直觉,所有的剪切都可以同时处理,只需一次旋转、非均匀缩放和旋转,但所涉及的数学问题超出了我的想象。
当观察任意仿射矩阵时,我不确定什么构成剪切与旋转(我认为如何分割有无限的解?),所以我想解决"沿多个平面的任意共享"问题与一般仅求解仿射矩阵(无平移)是一样的。无论哪种方式,任何能帮助我的东西都会被感激。
一个(完整的)SVD可以让您接近。对于3x3矩阵,这给出了
A = U*S*V'
其中所有矩阵都是3x3,S是对角的,U和V是正交的。不幸的是,U和V可能不是旋转,也就是说,它们可能有行列式-1。
一种方法是计算U的行列式,如果是-1,则用代替
U~ = U * diag(-1,1,1) (ie negate the first col of U)
并用取代S
S~ = S*diag( -1, 1, 1) (ie negate the top left elt of S)
然后类似地,对于V(尽管现在,因为转置,你想否定V的第一行)