0

Eigenの Transform クラスのドキュメントには、ほぼ同じシグネチャを持つ 2 つのメンバー関数があります。

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 に答える