home *** CD-ROM | disk | FTP | other *** search
- /*
- * vor.h
- *
- * Practical Algorithms for Image Analysis
- *
- * Copyright (c) 1997, 1998, 1999 MLMSoftwareGroup, LLC
- */
-
- /*
- * VOR(onoi).H
- *
- */
-
- #include "ip.h"
-
- #ifndef NULL
- #define NULL 0
- #endif
-
- #define DELETED -2
-
- #define le 0
- #define re 1
-
-
- /* structure defs */
- struct Freenode {
- struct Freenode *nextfree;
- };
-
- struct Freelist {
- struct Freenode *head;
- int nodesize;
- };
-
- struct Point {
- float x;
- float y;
- };
-
- /* structure used both for sites and for vertices */
- struct Site {
- struct Point coord;
- int sitenbr;
- int refcnt;
- };
-
- struct Edge {
- float a, b, c;
- struct Site *ep[2];
- struct Site *reg[2];
- int edgenbr;
- };
-
- struct Halfedge {
- struct Site *vertex;
- float ystar;
- struct Halfedge *PQnext;
- struct Halfedge *ELleft, *ELright;
- struct Edge *ELedge;
- int ELrefcnt;
- char ELpm;
-
- };
-
-
- /* global variables */
-
- float xmin, xmax, ymin, ymax;
- float deltax, deltay;
-
- struct Site *sites;
- int nsites;
- int siteidx;
- int sqrt_nsites;
- int nvertices;
- struct Freelist sfl;
- struct Site *bottomsite;
-
- int nedges;
- struct Freelist efl;
-
- struct Freelist hfl;
- struct Halfedge *ELleftend, *ELrightend;
- int ELhashsize;
- struct Halfedge **ELhash;
-
- int PQhashsize;
- struct Halfedge *PQhash;
-
- int PQcount;
- int PQmin;
-
-
- /* function prototypes */
- /* vor.c */
- extern void voronoi (struct Site *(*nextsite) (), Image * imgIO, int value);
- /* geometry.c */
- extern void geominit (void);
- extern struct Edge *bisect (struct Site *s1, struct Site *s2, Image * imgIO, int value);
- extern struct Site *intersect (struct Halfedge *el1, struct Halfedge *el2);
- extern int right_of (struct Halfedge *el, struct Point *p);
- extern void endpoint (struct Edge *e, int lr, struct Site *s, Image * imgIO, int value);
- extern float dist (struct Site *s, struct Site *t);
- extern void makevertex (struct Site *v);
- extern void deref (struct Site *v);
- extern void ref (struct Site *v);
- /* edgelist.c */
- extern void ELinitialize (void);
- extern struct Halfedge *HEcreate (struct Edge *e, int pm);
- extern void ELinsert (struct Halfedge *lb, struct Halfedge *new);
- extern struct Halfedge *ELgethash (int b);
- extern struct Halfedge *ELleftbnd (struct Point *p);
- extern void ELdelete (struct Halfedge *he);
- extern struct Halfedge *ELright (struct Halfedge *he);
- extern struct Halfedge *ELleft (struct Halfedge *he);
- extern struct Site *leftreg (struct Halfedge *he);
- extern struct Site *rightreg (struct Halfedge *he);
- /* heap.c */
- extern void PQinsert (struct Halfedge *he, struct Site *v, double offset);
- extern void PQdelete (struct Halfedge *he);
- extern int PQbucket (struct Halfedge *he);
- extern int PQempty (void);
- extern struct Point PQ_min (void);
- extern struct Halfedge *PQextractmin (void);
- extern void PQinitialize (void);
- /* memory.c */
- extern void freeinit (struct Freelist *fl, int size);
- extern char *getfree (struct Freelist *fl);
- extern void makefree (struct Freenode *curr, struct Freelist *fl);
- extern char *myalloc (unsigned int n);
- /* output.c */
- extern void plotinit (Image * imgIO);
- extern void gprintf (FILE * fpOut, char *fmt,...);
- extern int clip_line (struct Edge *e, Image * imgIO, int value);
- extern void out_bisector (struct Edge *e, Image * imgIO, int value);
- extern void out_ep (struct Edge *e, Image * imgIO, int value);
- extern void out_vertex (struct Site *v);
- extern void out_site (struct Site *s, Image * imgIO, int value);
- extern void out_triple (struct Site *s1, struct Site *s2, struct Site *s3);
-