home *** CD-ROM | disk | FTP | other *** search
/ Practical Algorithms for Image Analysis / Practical Algorithms for Image Analysis.iso / TARFILE.GZ / tarfile / ch_6.1 / xvor / vor.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-11  |  3.3 KB  |  141 lines

  1. /* 
  2.  * vor.h
  3.  * 
  4.  * Practical Algorithms for Image Analysis
  5.  * 
  6.  * Copyright (c) 1997, 1998, 1999 MLMSoftwareGroup, LLC
  7.  */
  8.  
  9. /*
  10.  * VOR(onoi).H
  11.  *
  12.  */
  13.  
  14. #include "ip.h"
  15.  
  16. #ifndef NULL
  17. #define NULL 0
  18. #endif
  19.  
  20. #define DELETED -2
  21.  
  22. #define le 0
  23. #define re 1
  24.  
  25.  
  26. /* structure defs */
  27. struct Freenode {
  28.   struct Freenode *nextfree;
  29. };
  30.  
  31. struct Freelist {
  32.   struct Freenode *head;
  33.   int nodesize;
  34. };
  35.  
  36. struct Point {
  37.   float x;
  38.   float y;
  39. };
  40.  
  41. /* structure used both for sites and for vertices */
  42. struct Site {
  43.   struct Point coord;
  44.   int sitenbr;
  45.   int refcnt;
  46. };
  47.  
  48. struct Edge {
  49.   float a, b, c;
  50.   struct Site *ep[2];
  51.   struct Site *reg[2];
  52.   int edgenbr;
  53. };
  54.  
  55. struct Halfedge {
  56.   struct Site *vertex;
  57.   float ystar;
  58.   struct Halfedge *PQnext;
  59.   struct Halfedge *ELleft, *ELright;
  60.   struct Edge *ELedge;
  61.   int ELrefcnt;
  62.   char ELpm;
  63.  
  64. };
  65.  
  66.  
  67. /* global variables */
  68.  
  69. float xmin, xmax, ymin, ymax;
  70. float deltax, deltay;
  71.  
  72. struct Site *sites;
  73. int nsites;
  74. int siteidx;
  75. int sqrt_nsites;
  76. int nvertices;
  77. struct Freelist sfl;
  78. struct Site *bottomsite;
  79.  
  80. int nedges;
  81. struct Freelist efl;
  82.  
  83. struct Freelist hfl;
  84. struct Halfedge *ELleftend, *ELrightend;
  85. int ELhashsize;
  86. struct Halfedge **ELhash;
  87.  
  88. int PQhashsize;
  89. struct Halfedge *PQhash;
  90.  
  91. int PQcount;
  92. int PQmin;
  93.  
  94.  
  95. /* function prototypes */
  96. /* vor.c */
  97. extern void voronoi (struct Site *(*nextsite) (), Image * imgIO, int value);
  98. /* geometry.c */
  99. extern void geominit (void);
  100. extern struct Edge *bisect (struct Site *s1, struct Site *s2, Image * imgIO, int value);
  101. extern struct Site *intersect (struct Halfedge *el1, struct Halfedge *el2);
  102. extern int right_of (struct Halfedge *el, struct Point *p);
  103. extern void endpoint (struct Edge *e, int lr, struct Site *s, Image * imgIO, int value);
  104. extern float dist (struct Site *s, struct Site *t);
  105. extern void makevertex (struct Site *v);
  106. extern void deref (struct Site *v);
  107. extern void ref (struct Site *v);
  108. /* edgelist.c */
  109. extern void ELinitialize (void);
  110. extern struct Halfedge *HEcreate (struct Edge *e, int pm);
  111. extern void ELinsert (struct Halfedge *lb, struct Halfedge *new);
  112. extern struct Halfedge *ELgethash (int b);
  113. extern struct Halfedge *ELleftbnd (struct Point *p);
  114. extern void ELdelete (struct Halfedge *he);
  115. extern struct Halfedge *ELright (struct Halfedge *he);
  116. extern struct Halfedge *ELleft (struct Halfedge *he);
  117. extern struct Site *leftreg (struct Halfedge *he);
  118. extern struct Site *rightreg (struct Halfedge *he);
  119. /* heap.c */
  120. extern void PQinsert (struct Halfedge *he, struct Site *v, double offset);
  121. extern void PQdelete (struct Halfedge *he);
  122. extern int PQbucket (struct Halfedge *he);
  123. extern int PQempty (void);
  124. extern struct Point PQ_min (void);
  125. extern struct Halfedge *PQextractmin (void);
  126. extern void PQinitialize (void);
  127. /* memory.c */
  128. extern void freeinit (struct Freelist *fl, int size);
  129. extern char *getfree (struct Freelist *fl);
  130. extern void makefree (struct Freenode *curr, struct Freelist *fl);
  131. extern char *myalloc (unsigned int n);
  132. /* output.c */
  133. extern void plotinit (Image * imgIO);
  134. extern void gprintf (FILE * fpOut, char *fmt,...);
  135. extern int clip_line (struct Edge *e, Image * imgIO, int value);
  136. extern void out_bisector (struct Edge *e, Image * imgIO, int value);
  137. extern void out_ep (struct Edge *e, Image * imgIO, int value);
  138. extern void out_vertex (struct Site *v);
  139. extern void out_site (struct Site *s, Image * imgIO, int value);
  140. extern void out_triple (struct Site *s1, struct Site *s2, struct Site *s3);
  141.