home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / diverses / leda / src / plane / _seg_set.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-15  |  1.7 KB  |  63 lines

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