COIN-OR::LEMON - Graph Library

Changeset 2207:75a29ac69c19 in lemon-0.x for lemon/bits


Ignore:
Timestamp:
09/07/06 15:27:16 (18 years ago)
Author:
Alpar Juttner
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@2933
Message:

xy -> dim2::Point

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/bits/bezier.h

    r2178 r2207  
    2828///\author Alpar Juttner
    2929
    30 #include<lemon/xy.h>
     30#include<lemon/dim2.h>
    3131
    3232namespace lemon {
     33  namespace dim2 {
    3334
    3435class BezierBase {
    3536public:
    36   typedef xy<double> xy;
     37  typedef Point<double> Point;
    3738protected:
    38   static xy conv(xy x,xy y,double t) {return (1-t)*x+t*y;}
     39  static Point conv(Point x,Point y,double t) {return (1-t)*x+t*y;}
    3940};
    4041
     
    4243{
    4344public:
    44   xy p1,p2;
     45  Point p1,p2;
    4546
    4647  Bezier1() {}
    47   Bezier1(xy _p1, xy _p2) :p1(_p1), p2(_p2) {}
     48  Bezier1(Point _p1, Point _p2) :p1(_p1), p2(_p2) {}
    4849 
    49   xy operator()(double t) const
     50  Point operator()(double t) const
    5051  {
    5152    //    return conv(conv(p1,p2,t),conv(p2,p3,t),t);
     
    6465  Bezier1 revert() const { return Bezier1(p2,p1);}
    6566  Bezier1 operator()(double a,double b) const { return before(b).after(a/b); }
    66   xy grad() const { return p2-p1; }
    67   xy norm() const { return rot90(p2-p1); }
    68   xy grad(double) const { return grad(); }
    69   xy norm(double t) const { return rot90(grad(t)); }
     67  Point grad() const { return p2-p1; }
     68  Point norm() const { return rot90(p2-p1); }
     69  Point grad(double) const { return grad(); }
     70  Point norm(double t) const { return rot90(grad(t)); }
    7071};
    7172
     
    7374{
    7475public:
    75   xy p1,p2,p3;
     76  Point p1,p2,p3;
    7677
    7778  Bezier2() {}
    78   Bezier2(xy _p1, xy _p2, xy _p3) :p1(_p1), p2(_p2), p3(_p3) {}
     79  Bezier2(Point _p1, Point _p2, Point _p3) :p1(_p1), p2(_p2), p3(_p3) {}
    7980  Bezier2(const Bezier1 &b) : p1(b.p1), p2(conv(b.p1,b.p2,.5)), p3(b.p2) {}
    80   xy operator()(double t) const
     81  Point operator()(double t) const
    8182  {
    8283    //    return conv(conv(p1,p2,t),conv(p2,p3,t),t);
     
    8586  Bezier2 before(double t) const
    8687  {
    87     xy q(conv(p1,p2,t));
    88     xy r(conv(p2,p3,t));
     88    Point q(conv(p1,p2,t));
     89    Point r(conv(p2,p3,t));
    8990    return Bezier2(p1,q,conv(q,r,t));
    9091  }
     
    9293  Bezier2 after(double t) const
    9394  {
    94     xy q(conv(p1,p2,t));
    95     xy r(conv(p2,p3,t));
     95    Point q(conv(p1,p2,t));
     96    Point r(conv(p2,p3,t));
    9697    return Bezier2(conv(q,r,t),r,p3);
    9798  }
     
    100101  Bezier1 grad() const { return Bezier1(2.0*(p2-p1),2.0*(p3-p2)); }
    101102  Bezier1 norm() const { return Bezier1(2.0*rot90(p2-p1),2.0*rot90(p3-p2)); }
    102   xy grad(double t) const { return grad()(t); }
    103   xy norm(double t) const { return rot90(grad(t)); }
     103  Point grad(double t) const { return grad()(t); }
     104  Point norm(double t) const { return rot90(grad(t)); }
    104105};
    105106
     
    107108{
    108109public:
    109   xy p1,p2,p3,p4;
     110  Point p1,p2,p3,p4;
    110111
    111112  Bezier3() {}
    112   Bezier3(xy _p1, xy _p2, xy _p3, xy _p4) :p1(_p1), p2(_p2), p3(_p3), p4(_p4) {}
     113  Bezier3(Point _p1, Point _p2, Point _p3, Point _p4)
     114    : p1(_p1), p2(_p2), p3(_p3), p4(_p4) {}
    113115  Bezier3(const Bezier1 &b) : p1(b.p1), p2(conv(b.p1,b.p2,1.0/3.0)),
    114116                              p3(conv(b.p1,b.p2,2.0/3.0)), p4(b.p2) {}
     
    116118                              p3(conv(b.p2,b.p3,1.0/3.0)), p4(b.p3) {}
    117119 
    118   xy operator()(double t) const
     120  Point operator()(double t) const
    119121    {
    120122      //    return Bezier2(conv(p1,p2,t),conv(p2,p3,t),conv(p3,p4,t))(t);
     
    124126  Bezier3 before(double t) const
    125127    {
    126       xy p(conv(p1,p2,t));
    127       xy q(conv(p2,p3,t));
    128       xy r(conv(p3,p4,t));
    129       xy a(conv(p,q,t));
    130       xy b(conv(q,r,t));
    131       xy c(conv(a,b,t));
     128      Point p(conv(p1,p2,t));
     129      Point q(conv(p2,p3,t));
     130      Point r(conv(p3,p4,t));
     131      Point a(conv(p,q,t));
     132      Point b(conv(q,r,t));
     133      Point c(conv(a,b,t));
    132134      return Bezier3(p1,p,a,c);
    133135    }
     
    135137  Bezier3 after(double t) const
    136138    {
    137       xy p(conv(p1,p2,t));
    138       xy q(conv(p2,p3,t));
    139       xy r(conv(p3,p4,t));
    140       xy a(conv(p,q,t));
    141       xy b(conv(q,r,t));
    142       xy c(conv(a,b,t));
     139      Point p(conv(p1,p2,t));
     140      Point q(conv(p2,p3,t));
     141      Point r(conv(p3,p4,t));
     142      Point a(conv(p,q,t));
     143      Point b(conv(q,r,t));
     144      Point c(conv(a,b,t));
    143145      return Bezier3(c,b,r,p4);
    144146    }
     
    149151                                  3.0*rot90(p3-p2),
    150152                                  3.0*rot90(p4-p3)); }
    151   xy grad(double t) const { return grad()(t); }
    152   xy norm(double t) const { return rot90(grad(t)); }
     153  Point grad(double t) const { return grad()(t); }
     154  Point norm(double t) const { return rot90(grad(t)); }
    153155
    154156  template<class R,class F,class S,class D>
    155157  R recSplit(F &_f,const S &_s,D _d) const
    156158  {
    157     const xy a=(p1+p2)/2;
    158     const xy b=(p2+p3)/2;
    159     const xy c=(p3+p4)/2;
    160     const xy d=(a+b)/2;
    161     const xy e=(b+c)/2;
    162     const xy f=(d+e)/2;
     159    const Point a=(p1+p2)/2;
     160    const Point b=(p2+p3)/2;
     161    const Point c=(p3+p4)/2;
     162    const Point d=(a+b)/2;
     163    const Point e=(b+c)/2;
     164    const Point f=(d+e)/2;
    163165    R f1=_f(Bezier3(p1,a,d,e),_d);
    164166    R f2=_f(Bezier3(e,d,c,p4),_d);
     
    168170};
    169171
    170 } //END OF NAMESPACE LEMON
     172
     173} //END OF NAMESPACE dim2
     174} //END OF NAMESPACE lemon
    171175
    172176#endif // LEMON_BEZIER_H
Note: See TracChangeset for help on using the changeset viewer.