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

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  subdivision.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_SUBDIVISION_H
  12. #define LEDA_SUBDIVISION_H
  13. #include <LEDA/point.h>
  14. #include <LEDA/segment.h>
  15. #include <LEDA/planar_map.h>
  16. class SubDivision : public planar_map
  17. {
  18.   face outer_face;
  19.   void* strip_ptr;   //pointer to strip_list
  20.   
  21. public:
  22.   
  23.   SubDivision(const graph&);
  24.  ~SubDivision();
  25.   point  position(node v)    const { return LEDA_ACCESS(point,inf(v)); }
  26.   
  27.   face   locate_point(point) const;
  28.   void   print_stripes() const;
  29.   
  30. };
  31. //------------------------------------------------------------------------------
  32. //
  33. // subdivision: generic subdivisions with face entries of type "I"
  34. //
  35. //------------------------------------------------------------------------------
  36. /*{Manpage {subdivision} {I} {Planar Subdivisions}}*/
  37. template <class I>
  38. class subdivision : public SubDivision {
  39. /*{Mdefinition
  40. An instance $S$ of the parameterized data type name is a
  41. subdivision of the two-dimensional plane, i.e., an embedded planar graph
  42. with straight line edges (see also sections ref{Planar Maps} and
  43. ref{Parameterized Planar Maps}). With each node
  44. $v$ of $S$ is associated a point, called the position of $v$ and with each
  45. face of $S$ is associated an information from data type $I$, called the
  46. information type of $S$.}*/
  47. void copy_face_entry(GenPtr& x)  const { LEDA_COPY(I,x); }
  48. void clear_face_entry(GenPtr& x) const { LEDA_CLEAR(I,x);  }
  49. public:
  50. /*{Mcreation S }*/
  51.    subdivision(GRAPH<point,I>& G) : SubDivision(G)   {}
  52. /*{Mcreate 
  53. creates an instance var of type name and initializes it to
  54. the subdivision represented by the parameterized directed graph $G$.
  55. The node entries of $G$ (of type point)  define the positions of the
  56. corresponding nodes of var. Every face $f$ of var is assigned the
  57. information of one of its bounding edges in $G$.\
  58. precond $G$ represents
  59. a planar subdivision, i.e., a straight line embedded planar map.}*/
  60.   ~subdivision()     { clear(); }
  61. /*{Moperations 2 4.5}*/
  62. point position(node v) const {return SubDivision::position(v);}
  63. /*{Mop       returns the position of node $v$.}*/
  64. I  inf(face f) const {return LEDA_ACCESS(I,SubDivision::inf(f));}
  65. /*{Mop       returns the information of face $f$.}*/
  66. face locate_point(point p) const { return SubDivision::locate_point(p);}
  67. /*{Mop       returns the face containing point $p$.}*/
  68. point  operator[](node v)  const {return LEDA_ACCESS(point,SubDivision::inf(v));}
  69. I  operator[](face f)  const {return LEDA_ACCESS(I,SubDivision::inf(f));}
  70. void print_node(node v) const { cout << "[" << index(v) <<"] (";
  71.                                 Print(position(v),cout);
  72.                                 cout << ") ";}
  73. };
  74. /*{Mimplementation
  75. Planar subdivisions are implemented by parameterized planar maps and an
  76. additional data structure for point location based on persistent search trees
  77. cite{DSST89}. Operations position and inf take constant time, a locate_point 
  78. operation takes time $O(log^2 n)$. Here $n$ is the number of nodes. 
  79. The space requirement and the initialization time is $O(n^2)$.}*/
  80. #endif