removed old lib svd and substituted with eigen.
Anyway is someone really using this file?
This commit is contained in:
parent
285d78d293
commit
e340e6d1c0
|
@ -19,13 +19,6 @@
|
||||||
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
|
||||||
* for more details. *
|
* for more details. *
|
||||||
* *
|
* *
|
||||||
****************************************************************************/
|
|
||||||
/****************************************************************************
|
|
||||||
History
|
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef POLAR_DECOMPOSITION_VCG
|
#ifndef POLAR_DECOMPOSITION_VCG
|
||||||
#define POLAR_DECOMPOSITION_VCG
|
#define POLAR_DECOMPOSITION_VCG
|
||||||
|
@ -33,7 +26,8 @@ $Log: not supported by cvs2svn $
|
||||||
|
|
||||||
#include <vcg/math/matrix33.h>
|
#include <vcg/math/matrix33.h>
|
||||||
#include <vcg/math/matrix44.h>
|
#include <vcg/math/matrix44.h>
|
||||||
#include <vcg/math/lin_algebra.h>
|
#include <eigenlib/Eigen/Dense>
|
||||||
|
#include <eigenlib/Eigen/SVD>
|
||||||
|
|
||||||
namespace vcg{
|
namespace vcg{
|
||||||
|
|
||||||
|
@ -44,38 +38,32 @@ namespace vcg{
|
||||||
template <class S>
|
template <class S>
|
||||||
void RotationalPartByPolarDecomposition( const vcg::Matrix33<S> & m, vcg::Matrix33<S> &r ){
|
void RotationalPartByPolarDecomposition( const vcg::Matrix33<S> & m, vcg::Matrix33<S> &r ){
|
||||||
|
|
||||||
vcg::Matrix33<S> tmp,s;
|
Eigen::Matrix<S,3,3> tmp,s;
|
||||||
|
|
||||||
r.SetZero();
|
r.setZero();
|
||||||
s.SetZero();
|
s.setZero();
|
||||||
|
|
||||||
tmp = m*m.transpose();
|
tmp = m*m.transpose();
|
||||||
|
|
||||||
Matrix33<S> res;
|
Eigen::Matrix<S,3,3> res;
|
||||||
Point3<S> e;
|
Eigen::Matrix<S,3,3> e;
|
||||||
|
|
||||||
bool ss = SingularValueDecomposition<vcg::Matrix33<S> >(tmp,&e[0],res);
|
bool ss = SingularValueDecomposition<vcg::Matrix33<S> >(tmp,&e[0],res);
|
||||||
|
|
||||||
|
Eigen::JacobiSVD<Eigen::MatrixXd> svd(A);
|
||||||
|
sol=svd.solve(b);
|
||||||
|
|
||||||
e[0]=math::Sqrt(e[0]);
|
e[0]=math::Sqrt(e[0]);
|
||||||
e[1]=math::Sqrt(e[1]);
|
e[1]=math::Sqrt(e[1]);
|
||||||
e[2]=math::Sqrt(e[2]);
|
e[2]=math::Sqrt(e[2]);
|
||||||
#ifdef VCG_USE_EIGEN
|
|
||||||
tmp = tmp*e.asDiagonal()*res.transpose();
|
tmp = tmp*e.asDiagonal()*res.transpose();
|
||||||
#else
|
|
||||||
tmp = tmp*Matrix33Diag<S>(e)*res.transpose();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool s1 = SingularValueDecomposition<vcg::Matrix33<S> >(tmp,&e[0],res.transpose());
|
bool s1 = SingularValueDecomposition<vcg::Matrix33<S> >(tmp,&e[0],res.transpose());
|
||||||
e[0]=1/e[0];
|
e[0]=1/e[0];
|
||||||
e[1]=1/e[1];
|
e[1]=1/e[1];
|
||||||
e[2]=1/e[2];
|
e[2]=1/e[2];
|
||||||
|
|
||||||
#ifdef VCG_USE_EIGEN
|
|
||||||
tmp = res*e.asDiagonal()*tmp.transpose();
|
tmp = res*e.asDiagonal()*tmp.transpose();
|
||||||
#else
|
|
||||||
tmp = res*Matrix33Diag<S>(e)*tmp.transpose();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
r = m*tmp;
|
r = m*tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue