Пример #1
0
Wtransf
compute_xf(CWpt_list& p)
{
   Wpt    c = p.average();
   double s = p.spread();

   vector<Wvec> v(p.size());
   for (Wpt_list::size_type i=0; i<p.size(); i++) {
      v[i] = (p[i] - c)/s;
   }
   assert(v.size() == p.size());
   return Wtransf::translation(c) * compute_xf(v) * Wtransf::translation(-c);
}
Пример #2
0
inline double
min_dist(CWpt_list& pts, CWpt_list& path)
{
   if (pts.empty())
      return 0;
   double ret = path.dist(pts[0]);
   for (Wpt_list::size_type i=1; i<pts.size(); i++)
      ret = min(ret, path.dist(pts[i]));
   return ret;
}
Пример #3
0
Wpt_list
fold_points(CWpt_list& pts, CWvec& n, bool is_closed)
{
   if (pts.size() < 2)
      return Wpt_list();
   Wpt_list ret(2);

   // Handle first point specially
   if (!is_closed || is_fold(pts.back(), pts[0], pts[1], n) )
      ret.push_back(pts.front());

   // Interior points
   for (Wpt_list::size_type i=1; i<pts.size()-1; i++)
      if (is_fold(pts[i-1], pts[i], pts[i+1], n))
         ret.push_back(pts[i]);

   // Handle last point specially
   if (!is_closed || is_fold(pts[pts.size()-2], pts.back(), pts.front(), n) )
      ret.push_back(pts.back());

   return ret;
}
Пример #4
0
GELptr 
WORLD::show_pts(
   CWpt_list& pts, double width, CCOLOR& col, double alpha, bool depth_test
   )
{
   // XXX - Should have dedicated GEL class for this.
   //       This is done in a hurry to get something that
   //       works but is not efficient.

   for (Wpt_list::size_type i=0; i<pts.size(); i++)
      show(pts[i], width, col, alpha, depth_test);

   return nullptr;
}