SVDMethodEigen.cpp
Go to the documentation of this file.
1 #include "methods.h"
2 
12 {
13  /* Equivalent Matlab code:
14  [U,S,V] = svd(R);
15  */
16  JacobiSVD<Matrix<real,Dynamic,Dynamic>>svd(R,ComputeThinU | ComputeThinV);
17 
18  /* Equivalent Matlab code:
19  if (det(S)<0)
20  */
21  Vector3 s = svd.singularValues();
22  if (s(0)*s(1)*s(2)<0)
23  {
24  /* Equivalent Matlab code:
25  X = U*diag([1,1,-1])*V';
26  */
27  Matrix3 D = Matrix3::Identity(3,3);
28  D(2,2) = -1;
29  X = svd.matrixU()*D*svd.matrixV().transpose();
30  }
31  else
32  /* Equivalent Matlab code:
33  X = U*V';
34  */
35  X = svd.matrixU()*svd.matrixV().transpose();
36 
37 }