Subversion Repositories gelsvn

Rev

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;

}