在the documentation of Eigen's Transform class中,有两个成员函数具有几乎相同的签名:
void computeRotationScaling(RotationMatrixType*, ScalingMatrixType*) const
void computeScalingRotation(ScalingMatrixType*, RotationMatrixType*) const
两个函数都有相同的文档(两个函数中的乘法顺序为rotation * scaling
)。
将转换的线性部分分解为产品旋转x缩放,缩放不一定是正的。
如果任一指针为零,则跳过相应的计算。
这在SVD模块中定义。
他们之间有什么区别?
答案 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());
// ^ ^