0

Eigen 的 Transform 类的文档中,有两个签名几乎相同的成员函数:

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

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

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

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

这是在 SVD 模块中定义的。

它们之间有什么区别?

4

1 回答 1

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());
//                                        ^                                 ^
于 2016-09-13T06:30:32.590 回答