2016-09-13 2 views
0

En the documentation of Eigen's Transform class, il y a deux fonctions membres avec des signatures presque identiques:Quelle est la différence entre computeScalingRotation et computeRotationScaling

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

Les deux fonctions ont la documentation identique (L'ordre de multiplication est rotation * scaling dans les deux fonctions).

décompose la partie linéaire de la transformation en une rotation de produit x mise à l'échelle, la mise à l'échelle n'étant pas nécessairement positive.

Si l'un des pointeurs est zéro, le calcul correspondant est ignoré.

Ceci est défini dans le module SVD.

Quelle est la différence entre eux?

+1

Ceci est une faute de frappe dans le document, le doc en ligne se mettra à jour automatiquement bientôt. La seconde est bien sûr 'scaling x rotation'. – ggael

Répondre

0

La différence est dans l'ordre. Si vous regardez de près, la différence est:

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