computeScalingRotation和computeRotationScaling的区别是什么?



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

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

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

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

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

这在SVD模块中定义。

它们之间的区别是什么?

区别在于顺序。如果你仔细看,区别是:

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

相关内容

  • 没有找到相关文章

最新更新