Subversion Repositories gelsvn

Rev

Rev 230 | Rev 595 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
39 bj 1
#include <iostream>
2
 
3
#include "QEM.h"
4
#include "LinAlg/LapackFunc.h"
5
 
6
using namespace LinAlg;
7
using namespace CGLA;
8
using namespace std;
9
 
10
namespace Geometry
11
{
214 jab 12
	Vec3d QEM::opt_pos(double sv_thresh) const
39 bj 13
	{
315 jab 14
			CMatrix U,S,V;
15
			SVD(A,U,S,V);
16
			CMatrix Sp(3,3,0.0);
17
 
18
			double s00 = S.get(0,0);
19
			double limit = sv_thresh * s00;
20
 
21
			Sp.set(0,0,1.0/s00);
22
			for(int i=1;i<3;++i)
23
			{
24
					double sii = S.get(i,i);
25
					if(sii < limit)
26
							Sp.set(i,i,0.0);
27
					else
28
							Sp.set(i,i,1.0/sii);
29
			}
30
 
31
			CMatrix Ap = V * Sp * U.Transposed();
32
 
220 jab 33
			CVector x(3);
315 jab 34
			x = Ap * (b*0.5);
35
 
220 jab 36
			Vec3d p(-x[0], -x[1], -x[2]);
37
			return p;
38
	}
39 bj 39
 
40
}