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

MultiPlatform

  1. #include <LEDA/plane.h>
  2. #include <LEDA/interval_set.h>
  3. #include <LEDA/window.h>
  4. main()
  5.   interval_set<segment>  I;
  6.   window W;
  7.   W.init(-1000,1000,-1000);
  8.   W.set_line_width(1);
  9.   panel P("interval_set");
  10.   P.text_item("Use the left mouse button to insert a set of segments, ");
  11.   P.text_item("terminate the input by clicking the right button. Now, ");
  12.   P.text_item("you can define query slabs by giving two vertical lines");
  13.   P.text_item("with the left mouse button. For each slab, the program ");
  14.   P.text_item("computes and shows all segments intersecting it. Leave ");
  15.   P.text_item("the program by clicking the right mouse button.        ");
  16.   P.button("continue");
  17.   P.open();
  18.   segment s;
  19.   while (W >> s)
  20.   { W << s;
  21.     if (s.xcoord1() <= s.xcoord2())
  22.       I.insert(s.xcoord1(),s.xcoord2(),s);
  23.     else
  24.       I.insert(s.xcoord2(),s.xcoord1(),s);
  25.    }
  26.   W.set_mode(xor_mode);
  27.   list<is_item> L;
  28.   is_item it;
  29.   double    x0 = W.xmin();
  30.   double    x1 = W.xmin();
  31.   point   p;
  32.   while (W >> p)
  33.   { 
  34.     W.draw_vline(x0);
  35.     W.draw_vline(x1);
  36.     W.set_line_width(4);
  37.     forall(it,L) W << I.inf(it);
  38.     W.set_line_width(1);
  39.     forall(it,L) W << I.inf(it);
  40.     x0 = p.xcoord();
  41.     W.draw_vline(x0);
  42.     W >> p;
  43.     x1 = p.xcoord();
  44.     W.draw_vline(x1);
  45.     L = I.intersection(x0,x1);
  46.     forall(it,L) W << I.inf(it);
  47.     W.set_line_width(4);
  48.     forall(it,L) W << I.inf(it);
  49.     W.set_line_width(1);
  50.     forall(it,L) cout << I.inf(it) << "n";
  51.     newline;
  52.   }
  53.   return 0;
  54. }