2016-09-13 7 views
0

В the documentation of Eigen's Transform class, есть две функции-члены с почти одинаковыми сигнатурами:В чем разница между computeScalingRotation и computeRotationScaling

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

Обе функции имеют одинаковую документацию (порядок умножения в обеих функциях rotation * scaling).

разлагает линейную часть преобразования как масштабирование вращения изделия x, причем масштабирование необязательно является положительным.

Если любой указатель равен нулю, соответствующее вычисление пропускается.

Это определено в модуле SVD.

В чем разница между ними?

+1

Это опечатка в документе, онлайн-документ будет автоматически обновляться в ближайшее время. Второй - это, конечно, «масштабирование 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()); 
//          ^        ^
Смежные вопросы