Пример #1
0
inline ARRAY<Wline>
bundle_lines(CWpt_list& a, CWpt_list& b)
{
   assert(a.num() == b.num());
   ARRAY<Wline> ret(a.num());
   for (int i=0; i<a.num(); i++)
      ret += Wline(a[i], b[i]);
   return ret;
}
Пример #2
0
Wtransf
compute_xf(CWpt_list& p)
{
   Wpt    c = p.average();
   double s = p.spread();

   ARRAY<Wvec> v(p.num());
   for (int i=0; i<p.num(); i++) {
      v += (p[i] - c)/s;
   }
   assert(v.num() == p.num());
   return Wtransf::translation(c) * compute_xf(v) * Wtransf::translation(-c);
}
Пример #3
0
Wpt_list
fold_points(CWpt_list& pts, CWvec& n, bool is_closed)
{
   if (pts.num() < 2)
      return Wpt_list();
   Wpt_list ret(2);

   // Handle first point specially
   if (!is_closed || is_fold(pts.last(), pts[0], pts[1], n) )
      ret += pts.first();

   // Interior points
   for (int i=1; i<pts.num()-1; i++)
      if (is_fold(pts[i-1], pts[i], pts[i+1], n))
         ret += pts[i];

   // Handle last point specially
   if (!is_closed || is_fold(pts[pts.num()-2], pts.last(), pts.first(), n) )
      ret += pts.last();

   return ret;
}