[Lemon-commits] [lemon_svn] alpar: r2044 - hugo/trunk/lemon

Lemon SVN svn at lemon.cs.elte.hu
Mon Nov 6 20:49:44 CET 2006


Author: alpar
Date: Tue Jul 12 18:17:16 2005
New Revision: 2044

Modified:
   hugo/trunk/lemon/bezier.h

Log:
Bezier classes are made more consistent

Modified: hugo/trunk/lemon/bezier.h
==============================================================================
--- hugo/trunk/lemon/bezier.h	(original)
+++ hugo/trunk/lemon/bezier.h	Tue Jul 12 18:17:16 2005
@@ -58,11 +58,13 @@
   {
     return Bezier1(conv(p1,p2,t),p2);
   }
-  Bezier1 revert() { return Bezier1(p2,p1);}
-  Bezier1 operator()(double a,double b) { return before(b).after(a/b); }
-  xy grad() { return p2-p1; }
-  xy grad(double) { return grad(); }
 
+  Bezier1 revert() const { return Bezier1(p2,p1);}
+  Bezier1 operator()(double a,double b) const { return before(b).after(a/b); }
+  xy grad() const { return p2-p1; }
+  xy norm() const { return rot90(p2-p1); }
+  xy grad(double) const { return grad(); }
+  xy norm(double t) const { return rot90(grad(t)); }
 };
 
 class Bezier2 : public BezierBase
@@ -91,10 +93,12 @@
     xy r(conv(p2,p3,t));
     return Bezier2(conv(q,r,t),r,p3);
   }
-  Bezier2 revert() { return Bezier2(p3,p2,p1);}
-  Bezier2 operator()(double a,double b) { return before(b).after(a/b); }
-  Bezier1 grad() { return Bezier1(2.0*(p2-p1),2.0*(p3-p2)); }
-  xy grad(double t) { return grad()(t); }  
+  Bezier2 revert() const { return Bezier2(p3,p2,p1);}
+  Bezier2 operator()(double a,double b) const { return before(b).after(a/b); }
+  Bezier1 grad() const { return Bezier1(2.0*(p2-p1),2.0*(p3-p2)); }
+  Bezier1 norm() const { return Bezier1(2.0*rot90(p2-p1),2.0*rot90(p3-p2)); }
+  xy grad(double t) const { return grad()(t); }
+  xy norm(double t) const { return rot90(grad(t)); }
 };
 
 class Bezier3 : public BezierBase
@@ -136,10 +140,29 @@
       xy c(conv(a,b,t));
       return Bezier3(c,b,r,p4);
     }
-  Bezier3 revert() { return Bezier3(p4,p3,p2,p1);}
-  Bezier3 operator()(double a,double b) { return before(b).after(a/b); }
-  Bezier2 grad() { return Bezier2(3.0*(p2-p1),3.0*(p3-p2),3.0*(p4-p3)); }
-  xy grad(double t) { return grad()(t); }
+  Bezier3 revert() const { return Bezier3(p4,p3,p2,p1);}
+  Bezier3 operator()(double a,double b) const { return before(b).after(a/b); }
+  Bezier2 grad() const { return Bezier2(3.0*(p2-p1),3.0*(p3-p2),3.0*(p4-p3)); }
+  Bezier2 norm() const { return Bezier2(3.0*rot90(p2-p1),
+				  3.0*rot90(p3-p2),
+				  3.0*rot90(p4-p3)); }
+  xy grad(double t) const { return grad()(t); }
+  xy norm(double t) const { return rot90(grad(t)); }
+
+  template<class R,class F,class S,class D>
+  R recSplit(F &_f,const S &_s,D _d) const 
+  {
+    const xy a=(p1+p2)/2;
+    const xy b=(p2+p3)/2;
+    const xy c=(p3+p4)/2;
+    const xy d=(a+b)/2;
+    const xy e=(b+c)/2;
+    const xy f=(d+e)/2;
+    R f1=_f(Bezier3(p1,a,d,e),_d);
+    R f2=_f(Bezier3(e,d,c,p4),_d);
+    return _s(f1,f2);
+  }
+  
 };
 
 } //END OF NAMESPACE LEMON



More information about the Lemon-commits mailing list