In the documentation of Eigen's Transform class, there are two member functions with almost identical signatures:
void computeRotationScaling(RotationMatrixType*, ScalingMatrixType*) const
void computeScalingRotation(ScalingMatrixType*, RotationMatrixType*) const
Both functions have the identical documentation (The multiplication order is rotation * scaling
in both functions).
decomposes the linear part of the transformation as a product rotation x scaling, the scaling being not necessarily positive.
If either pointer is zero, the corresponding computation is skipped.
This is defined in the SVD module.
What is the difference between them?