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

MultiPlatform

  1. #include <LEDA/plane_alg.h>
  2. #include <LEDA/window.h>
  3. main()
  4.   window W(700,800);
  5.  
  6.   int input;
  7.   int grid_width = 0;
  8.   int line_width = 1;
  9.   int node_width = 3;
  10.   int N = 100;
  11.   panel P("SEGMENT_INTERSECTION");
  12.   P.int_item("SEGMENTS", N);
  13.   P.choice_item("INPUT", input,"mouse","random");
  14.   P.int_item("GRID",grid_width,0,40,10);
  15.   P.int_item("line width",line_width,1,5);
  16.   P.int_item("node width",node_width,1,5);
  17. for(;;)
  18. {
  19.   P.open(0,0);
  20.   W.init(-1200,1200,-1200, grid_width);
  21.   W.set_node_width(node_width);
  22.   W.set_line_width(line_width);
  23.   list<segment> seglist;
  24.   if (input) 
  25.    { 
  26.      double ymax = W.ymax()-4*20/W.scale()-100;
  27.      int xmin = int(W.xmin())+100;
  28.      int xmax = int(W.xmax())-100;
  29.      for(int i = 0; i < N; i++)
  30.      { double x1 = rand_int(xmin,-100);
  31.        double y1 = rand_int(-1000,int(ymax));
  32.        double x2 = rand_int(100,xmax);
  33.        double y2 = rand_int(-1000,int(ymax));
  34.        segment s(x1,y1,x2,y2);
  35.        W << s;
  36.        seglist.append(s);
  37.       }
  38.     }
  39.   else // mouse input
  40.     { segment s;
  41.       while (W >> s)
  42.       { W << s;
  43.         seglist.append(s);
  44.        }
  45.      }
  46.   GRAPH<point,segment> SUB;
  47.   node v;
  48.   W.message("Computing Arrangement");
  49.   float T = used_time();
  50.   SWEEP_SEGMENTS(seglist,SUB);
  51.   W.message(string("# = %d   T = %6.2f sec",
  52.                    SUB.number_of_nodes(),
  53.                    used_time(T))
  54.             );
  55.   forall_nodes(v,SUB) W.draw_filled_node(SUB[v]);
  56. } // for(;;)
  57.   return 0;
  58. }