computeScalingRotation和computeRotationScaling有什么区别

时间:2016-09-13 01:24:18

标签: eigen matrix-decomposition

the documentation of Eigen's Transform class中,有两个成员函数具有几乎相同的签名:

void computeRotationScaling(RotationMatrixType*, ScalingMatrixType*) const
void computeScalingRotation(ScalingMatrixType*, RotationMatrixType*) const

两个函数都有相同的文档(两个函数中的乘法顺序为rotation * scaling)。

  

将转换的线性部分分解为产品旋转x缩放,缩放不一定是正的。

     

如果任一指​​针为零,则跳过相应的计算。

     

这在SVD模块中定义。

他们之间有什么区别?

1 个答案:

答案 0 :(得分:0)

顺序不同。如果仔细观察,区别在于:

// computeRotationScaling
if(scaling) scaling->lazyAssign(svd.matrixV() * sv.asDiagonal() * svd.matrixV().adjoint());
// computeScalingRotation
if(scaling) scaling->lazyAssign(svd.matrixU() * sv.asDiagonal() * svd.matrixU().adjoint());
//                                        ^                                 ^