Blame | Last modification | View Log | RSS feed
#include <cfloat>
#include "Triangle.h"
#include "verification.h"
using namespace std;
using namespace CGLA;
inline Vec3f rvec() {return Vec3f(rand()/float(RAND_MAX),
rand()/float(RAND_MAX),
rand()/float(RAND_MAX));}
int main()
{
srand(0);
int N = 100000;
double dmax=-FLT_MAX;
double avg=0;
for(int k=0;k<N;++k)
{
Vec3f p(0),p0(0),p1(0),p2(0);
while(sqr_length(p1-p0) < 1e-10 ||
sqr_length(p2-p0) < 1e-10 ||
sqr_length(p1-p2) < 1e-10 )
{
p0 = 100*(rvec()-Vec3f(0.5));
p1 = 100*(rvec()-Vec3f(0.5));
p2 = 100*(rvec()-Vec3f(0.5));
p = 100*(rvec()-Vec3f(0.5));
}
Triangle tri(p0, p1, p2,
Vec3f(0), Vec3f(0), Vec3f(0),
Vec3f(0),
Vec3f(0), Vec3f(0));
float d = FLT_MAX, s;
tri.signed_distance(p, d, s);
float ver = SqrDistance (p,tri);
double err = abs(sqrt(double(d))-sqrt(double(ver)));
dmax = max(dmax, err);
avg += err;
}
avg /= N;
cout << dmax << " " << avg << endl;
}