2016-09-13 14 views
0

の違いは何である、ほぼ同一の署名を有する2つのメンバー関数があります<a href="https://eigen.tuxfamily.org/dox/classEigen_1_1Transform.html" rel="nofollow">the documentation of Eigen's Transform class</a>でcomputeScalingRotationとcomputeRotationScaling

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

両方の機能は、同一の文書を(乗算の順序は、両方の機能でrotation * scalingである)を有します。

は、変換の線形部分を積xスケールとして分解します。スケーリングは必ずしも正ではありません。

いずれかのポインタがゼロの場合、対応する計算はスキップされます。

これはSVDモジュールで定義されています。

どういう違いがありますか?

+1

これはドキュメントの入力ミスで、すぐにオンラインドキュメントが自動的に更新されます。 2番目の方法は、もちろん、「x回転をスケーリングする」ことです。 – ggael

答えて

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()); 
//          ^        ^
関連する問題

 関連する問題