_seg_set.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  _seg_set.c
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #include <LEDA/segment_set.h>
  12. segment  SegmentSet::key(seg_item it)
  13. { segment s(x0(it),y(it),x1(it),y(it)); 
  14.   return s.rotate(point(0,0),alpha);
  15.  }
  16. seg_item SegmentSet::insert(segment s, GenPtr p)
  17. { segment t = s.rotate(point(0,0),-alpha);
  18.   double x0 = t.xcoord1();
  19.   double x1 = t.xcoord2();
  20.   double  y = t.ycoord1();
  21.   return segment_tree<double,double,GenPtr>::insert(x0,x1,y,p);
  22. }
  23. seg_item SegmentSet::lookup(segment s)
  24. { segment t = s.rotate(point(0,0),-alpha);
  25.   double x0 = t.xcoord1();
  26.   double x1 = t.xcoord2();
  27.   double  y = t.ycoord1();
  28.   return segment_tree<double,double,GenPtr>::lookup(x0,x1,y);
  29. }
  30. void     SegmentSet::del(segment s)
  31. { segment t = s.rotate(point(0,0),-alpha);
  32.   double x0 = t.xcoord1();
  33.   double x1 = t.xcoord2();
  34.   double  y = t.ycoord1();
  35.   (void)segment_tree<double,double,GenPtr>::del(x0,x1,y); 
  36. }
  37. list<seg_item>  SegmentSet::intersection(segment q)
  38. { list<seg_tree_item> L;
  39.   segment t = q.rotate(point(0,0),-alpha);
  40.   double  x = t.xcoord1();
  41.   double y0 = t.ycoord1();
  42.   double y1 = t.ycoord2();
  43.   L = segment_tree<double,double,GenPtr>::query(x,y0,y1); 
  44.   return *((list<seg_item>*)&L);
  45. }
  46. list<seg_item>  SegmentSet::intersection(line q)
  47. { list<seg_tree_item> L;
  48.   line t = q.rotate(-alpha);
  49.   double  x = t.x_proj(0);
  50.   L = segment_tree<double,double,GenPtr>::y_infinity_query(x); 
  51.   return *((list<seg_item>*)&L);
  52. }