Subversion Repositories gelsvn

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
290 jrf 1
#include <cfloat>
2
#include "Triangle.h"
3
#include "verification.h"
4
 
5
using namespace std;
6
using namespace CGLA;
7
 
8
 
9
 
10
inline Vec3f rvec()  {return Vec3f(rand()/float(RAND_MAX),
11
																				rand()/float(RAND_MAX),
12
																				rand()/float(RAND_MAX));}
13
 
14
int main()
15
{
16
	srand(0);
17
 
18
	int N = 100000;
19
	double dmax=-FLT_MAX;
20
	double avg=0;
21
	for(int k=0;k<N;++k)
22
		{
23
			Vec3f p(0),p0(0),p1(0),p2(0);
24
 
25
			while(sqr_length(p1-p0) < 1e-10 ||
26
						sqr_length(p2-p0) < 1e-10 ||
27
						sqr_length(p1-p2) < 1e-10 )
28
				{
29
					p0 = 100*(rvec()-Vec3f(0.5));
30
					p1 = 100*(rvec()-Vec3f(0.5));
31
					p2 = 100*(rvec()-Vec3f(0.5));
32
					p  = 100*(rvec()-Vec3f(0.5));
33
				}
34
			Triangle tri(p0, p1, p2, 
35
									 Vec3f(0), Vec3f(0), Vec3f(0), 
36
									 Vec3f(0), 
37
									 Vec3f(0), Vec3f(0));
38
 
39
			float d = FLT_MAX, s;
40
			tri.signed_distance(p, d, s);
41
			float ver = SqrDistance (p,tri);
42
			double err = abs(sqrt(double(d))-sqrt(double(ver)));
43
			dmax = max(dmax, err);
44
			avg += err;
45
		}
46
	avg /= N;
47
	cout << dmax << " " << avg << endl;
48
 
49
}