2016-09-13 114 views
0

之间的差在the documentation of Eigen's Transform class,有两个成员函数几乎相同的签名:是什么computeScalingRotation和computeRotationScaling

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

两个函数具有相同的文档(乘法顺序在两种功能rotation * scaling)。

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

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

这是在SVD模块中定义的。

他们之间有什么区别?

+1

这是文档中的错字,联机文档将很快自动更新。第二个当然是缩放x旋转。 – ggael

回答

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()); 
//          ^        ^