2016-09-13 107 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()); 
//          ^        ^