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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  plane_alg.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_PLANE_ALG_H
  12. #define LEDA_PLANE_ALG_H
  13. #include <LEDA/point.h>
  14. #include <LEDA/segment.h>
  15. #include <LEDA/rat_point.h>
  16. #include <LEDA/rat_segment.h>
  17. #include <LEDA/plane_graph.h>
  18. /*{Manpage {plane_alg} {} {Plane Algorithms} }*/
  19. /*{Mtext
  20. bigskip
  21. $bullet$ {bf Triangulations}
  22. }*/
  23. void TRIANGULATE_POINTS(list<point> L, GRAPH<point,edge>& G);
  24. void TRIANGULATE_POINTS(list<rat_point> L, GRAPH<rat_point,edge>& G);
  25. void DELAUNAY_TRIANG(const list<point>& L, GRAPH<point,edge>& T);
  26. void DELAUNAY_TRIANG(const list<rat_point>& L, GRAPH<rat_point,edge>& T);
  27. void DELAUNAY_TRIANG(const list<point>& L, graph& T, node_array<point>& pos,
  28.                                                      edge_array<edge>&  rev);
  29. void DELAUNAY_TRIANG(const list<point>& L, planar_map& T, 
  30.                                                   node_array<point>& pos);
  31. /*{Mtext
  32. bigskip
  33. $bullet$ {bf Line segment intersection}
  34. }*/
  35. void SWEEP_SEGMENTS(const list<segment>&, list<point>&);
  36. void SWEEP_SEGMENTS(const list<segment>&, GRAPH<point,segment>&);
  37. void SWEEP_SEGMENTS(const list<rat_segment>&, list<rat_point>&);
  38. void SWEEP_SEGMENTS(const list<rat_segment>&, GRAPH<rat_point,rat_segment>&);
  39. /*{Mtext
  40. bigskip
  41. $void$quad SWEEP_SEGMENTS($list<segment> L, GRAPH<point,segment>& G$);
  42. bigskip
  43. SWEEP_SEGMENTS takes a list of segments $L$ as input and computes 
  44. the planar graph $G$ induced by the set of straight line segments
  45. in $L$. The nodes of $G$ are all endpoints and all proper intersection
  46. points of segments in $L$. The edges of $G$ are the maximal relatively open
  47. subsegments of segments in $L$ that contain no node of $G$. All edges are
  48. directed from left to right or upwards. The algorithm (cite{BO79}) runs in 
  49. time $O((n+s)log n)$ where $n$ is the number of segments and $s$ is the 
  50. number of vertices of the graph $G$.  }*/
  51. inline void SEGMENT_INTERSECTION(const list<segment>& L, list<point>& P)
  52. { SWEEP_SEGMENTS(L,P); }
  53. /*{Mtext
  54. bigskip
  55. $void$quad SEGMENT_INTERSECTION($list<segment> L, list<point>& P$);
  56. bigskip
  57. SEGMENT_INTERSECTION takes a list of segments $L$ as input and computes 
  58. the list of intersection points between all segments in $L$.
  59. The algorithm (cite{BO79}) has running time $O((n+k)log n)$, 
  60. where $n$ is the number of segments and $k$ is the number of intersections.
  61. }*/
  62. /*{Mtext
  63. bigskip
  64. $bullet$ {bf Convex Hulls}
  65. }*/
  66. list<point>     CONVEX_HULL(const list<point>&);
  67. /*{Mtext
  68. bigskip
  69. $list<point>$quad CONVEX_HULL($list<point> L$);
  70. bigskip
  71. CONVEX_HULL takes as argument a list of points and returns the polygon
  72. representing the convex hull of $L$. It is based on a randomized incremental 
  73. algorithm. 
  74. Running time: $O(nlog n)$ (with high probability), where $n$ is the number 
  75. of points.
  76. }*/
  77. list<rat_point> CONVEX_HULL(const list<rat_point>&);
  78. /*{Mtext
  79. bigskip
  80. $list<point>$quad CONVEX_HULL($list<point> L$);
  81. $list<rat_point>$ CONVEX_HULL($list<rat_point> L$);
  82. bigskip
  83. CONVEX_HULL takes as argument a list of (rational) points and returns the 
  84. polygon representing the convex hull of $L$.
  85. Running time: $O(nlog n)$ (with high probability), where $n$ is the number 
  86. of points.
  87. }*/
  88. /*{Mtext
  89. bigskip
  90. $bullet$ {bf Voronoi Diagrams}
  91. }*/
  92. void VORONOI(list<point>& sites, double R, GRAPH<point,point>& VD);
  93. /*{Mtext
  94. bigskip
  95. $void$quad VORONOI$(list<point>& sites, double R, GRAPH<point,point>&
  96.  G)$
  97. bigskip
  98. VORONOI takes as input a list of points $sites$ and a real number 
  99. $R$. It computes a directed graph $G$ representing the planar subdivision
  100. defined by the Voronoi-diagram of $sites$ where all ``infinite" edges have
  101. length $R$. For each node $v$ $G$.inf($v$) is the corresponding Voronoi 
  102. vertex ($point$) and for each edge $e$  $G$.inf($e$) is the site ($point$) 
  103. whose Voronoi region is bounded by $e$. 
  104. The algorithm (cite{De92}) has running time $O(nlog n)$ (with high probability
  105. ), 
  106. where $n$ is the number of sites.
  107. }*/
  108. #endif