mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-15 05:32:21 +00:00
.. from C to a C++ class. Moved the original code to a sundirectory for reference and moved all the global variables and methods into a new class called Voronoi. .. the code still needs more work but wanted to remove the global variables as there were lots and a big risk they interact with other parts of the codebase and libraries.
133 lines
2.7 KiB
C
133 lines
2.7 KiB
C
#ifndef __VDEFS_H
|
|
#define __VDEFS_H
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
#define DELETED -2
|
|
|
|
typedef struct tagFreenode
|
|
{
|
|
struct tagFreenode * nextfree;
|
|
} Freenode ;
|
|
|
|
|
|
typedef struct tagFreelist
|
|
{
|
|
Freenode * head;
|
|
int nodesize;
|
|
} Freelist ;
|
|
|
|
typedef struct tagPoint
|
|
{
|
|
float x ;
|
|
float y ;
|
|
} Point ;
|
|
|
|
/* structure used both for sites and for vertices */
|
|
|
|
typedef struct tagSite
|
|
{
|
|
Point coord ;
|
|
int sitenbr ;
|
|
int refcnt ;
|
|
} Site ;
|
|
|
|
|
|
typedef struct tagEdge
|
|
{
|
|
float a, b, c ;
|
|
Site * ep[2] ;
|
|
Site * reg[2] ;
|
|
int edgenbr ;
|
|
} Edge ;
|
|
|
|
#define le 0
|
|
#define re 1
|
|
|
|
typedef struct tagHalfedge
|
|
{
|
|
struct tagHalfedge * ELleft ;
|
|
struct tagHalfedge * ELright ;
|
|
Edge * ELedge ;
|
|
int ELrefcnt ;
|
|
char ELpm ;
|
|
Site * vertex ;
|
|
float ystar ;
|
|
struct tagHalfedge * PQnext ;
|
|
} Halfedge ;
|
|
|
|
/* edgelist.c */
|
|
void ELinitialize(void) ;
|
|
Halfedge * HEcreate(Edge *, int) ;
|
|
void ELinsert(Halfedge *, Halfedge *) ;
|
|
Halfedge * ELgethash(int) ;
|
|
Halfedge * ELleftbnd(Point *) ;
|
|
void ELdelete(Halfedge *) ;
|
|
Halfedge * ELright(Halfedge *) ;
|
|
Halfedge * ELleft(Halfedge *) ;
|
|
Site * leftreg(Halfedge *) ;
|
|
Site * rightreg(Halfedge *) ;
|
|
extern int ELhashsize ;
|
|
extern Site * bottomsite ;
|
|
extern Freelist hfl ;
|
|
extern Halfedge * ELleftend, * ELrightend, **ELhash ;
|
|
|
|
/* geometry.c */
|
|
void geominit(void) ;
|
|
Edge * bisect(Site *, Site *) ;
|
|
Site * intersect(Halfedge *, Halfedge *) ;
|
|
int right_of(Halfedge *, Point *) ;
|
|
void endpoint(Edge *, int, Site *) ;
|
|
float dist(Site *, Site *) ;
|
|
void makevertex(Site *) ;
|
|
void deref(Site *) ;
|
|
void ref(Site *) ;
|
|
extern float deltax, deltay ;
|
|
extern int nsites, nedges, sqrt_nsites, nvertices ;
|
|
extern Freelist sfl, efl ;
|
|
|
|
/* heap.c */
|
|
void PQinsert(Halfedge *, Site *, float) ;
|
|
void PQdelete(Halfedge *) ;
|
|
int PQbucket(Halfedge *) ;
|
|
int PQempty(void) ;
|
|
Point PQ_min(void) ;
|
|
Halfedge * PQextractmin(void) ;
|
|
void PQinitialize(void) ;
|
|
extern int PQmin, PQcount, PQhashsize ;
|
|
extern Halfedge * PQhash ;
|
|
|
|
/* main.c */
|
|
extern int sorted, triangulate, plot, debug, nsites, siteidx ;
|
|
extern float xmin, xmax, ymin, ymax ;
|
|
extern Site * sites ;
|
|
extern Freelist sfl ;
|
|
|
|
/* memory.c */
|
|
void freeinit(Freelist *, int) ;
|
|
char *getfree(Freelist *) ;
|
|
void makefree(Freenode *, Freelist *) ;
|
|
char *myalloc(unsigned) ;
|
|
|
|
/* output.c */
|
|
void openpl(void) ;
|
|
void line(float, float, float, float) ;
|
|
void circle(float, float, float) ;
|
|
void range(float, float, float, float) ;
|
|
void out_bisector(Edge *) ;
|
|
void out_ep(Edge *) ;
|
|
void out_vertex(Site *) ;
|
|
void out_site(Site *) ;
|
|
void out_triple(Site *, Site *, Site *) ;
|
|
void plotinit(void) ;
|
|
void clip_line(Edge *) ;
|
|
|
|
/* voronoi.c */
|
|
void voronoi(Site *(*)()) ;
|
|
|
|
#endif
|
|
|
|
|