/*! ========================================================================
** Extended Template and Library Test Suite
** Hermite Curve Test
-** $Id: hermite.cpp,v 1.1.1.1 2005/01/04 01:31:48 darco Exp $
+** $Id$
**
** Copyright (c) 2002 Robert B. Quattlebaum Jr.
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include <ETL/angle>
#include <ETL/clock>
#include <ETL/calculus>
+#include <ETL/fixed>
#include <stdio.h>
/* === M A C R O S ========================================================= */
{
int ret=0;
float f;
-
+
hermite<float> Hermie;
etl::clock timer;
double t;
-
+
Hermie.p1()=0;
Hermie.t1()=1;
Hermie.p2()=0;
Hermie.t2()=1;
-
+
Hermie.sync();
-
+
integral<hermite<float> > inte(Hermie);
-
+
fprintf(stderr,"integral of curve() on [0,1] = %f\n",inte(0,1.0));
fprintf(stderr,"integral of curve() on [-1,3] = %f\n",inte(-1.0,3.0));
Hermie.set_rs(-1.0,7.0);
fprintf(stderr,"integral of curve()[%f,%f] on [-1,7] = %f\n",Hermie.get_r(),Hermie.get_s(),inte(-1.0,7.0));
fprintf(stderr,"integral of curve()[%f,%f] on [0,1] = %f\n",Hermie.get_r(),Hermie.get_s(),inte(0,1.0));
Hermie.set_rs(0.0,1.0);
-
-
+
+
for(f=0.0f,timer.reset();f<1.001f;f+=0.000005f)
{
t+=Hermie(f)+Hermie(f+0.1f);
t+=Hermie(f)+Hermie(f+0.1f);
}
t=timer();
-
+
fprintf(stderr,"time=%f milliseconds\n",t*1000);
return ret;
}
{
int ret=0;
float f;
-
+
hermite<angle> Hermie;
etl::clock timer;
angle tmp;
double t;
-
+
Hermie.p1()=angle::degrees(0);
Hermie.t1()=angle::degrees(45);
Hermie.p2()=angle::degrees(-45);
Hermie.t2()=angle::degrees(180);
- Hermie.sync();
-
-
+ Hermie.sync();
+
+
for(f=0.0f,timer.reset();f<1.001f;f+=0.000005f)
{
tmp+=Hermie(f)+Hermie(f+0.1f);
tmp+=Hermie(f)+Hermie(f+0.1f);
}
t=timer();
-
+
fprintf(stderr,"angle time=%f milliseconds\n",t*1000);
return ret;
{
int ret=0;
float f;
-
+
hermite<float,fixed> Hermie;
etl::clock timer;
double t;
-
+
Hermie.p1()=0;
Hermie.t1()=1;
Hermie.p2()=0;
Hermie.t2()=1;
-
+
Hermie.sync();
-
-
-
+
+
+
for(f=0.0f,timer.reset();f<1.001f;f+=0.005f)
{
t+=Hermie(f)+Hermie(f+0.1f);
t+=Hermie(f)+Hermie(f+0.1f);
}
t=timer();
-
+
fprintf(stderr,"time=%f milliseconds\n",t*1000);
return ret;
}
{
int ret=0;
float f;
-
+
hermite<angle,fixed> Hermie;
etl::clock timer;
angle tmp;
double t;
-
+
Hermie.p1()=angle::degrees(0);
Hermie.t1()=angle::degrees(45);
Hermie.p2()=angle::degrees(-45);
Hermie.t2()=angle::degrees(180);
- Hermie.sync();
-
-
+ Hermie.sync();
+
+
for(f=0.0f,timer.reset();f<1.001f;f+=0.0005f)
{
tmp+=Hermie(f)+Hermie(f+0.1f);
tmp+=Hermie(f)+Hermie(f+0.1f);
}
t=timer();
-
+
fprintf(stderr,"angle fixed time=%f milliseconds\n",t*1000);
return ret;
t2=curve2.intersect(curve1);
d=curve1(t1)-curve2(t2);
-
+
fprintf(stderr,"float:Intersection difference: %f (t1=%f, t2=%f)\n",d,t1,t2);
if(d>0.01)
int main()
{
int error=0;
-
+
error+=basic_test();
error+=angle_test();
error+=fixed_test();