1#ifndef __FASTJET__VORONOI_H__
2#define __FASTJET__VORONOI_H__
107#include "fastjet/LimitedWarning.hh"
117FASTJET_BEGIN_NAMESPACE
132 VPoint(
double _x,
double _y) : x(_x), y(_y) {}
156 return p.
x*p.
x+p.y*p.y;
162 return p1.
x*p2.y-p1.y*p2.
x;
168 return p1.
x*p2.
x+p1.y*p2.y;
214class FreeNodeArrayList{
217 FreeNodeArrayList* next;
238 Halfedge *ELleft, *ELright;
243 volatile double ystar;
260 bool generateVoronoi(std::vector<VPoint> *_parent_sites,
261 double minX,
double maxX,
double minY,
double maxY,
264 inline void resetIterator(){
265 iteratorEdges = allEdges;
269 if(iteratorEdges == 0)
273 iteratorEdges = iteratorEdges->
next;
277 std::vector<VPoint> *parent_sites;
283 char *getfree(Freelist *fl);
288 Halfedge *HEcreate(), *ELleft(), *ELright(), *ELleftbnd();
289 Halfedge *HEcreate(Edge *e,
int pm);
292 Halfedge *PQextractmin();
293 void freeinit(Freelist *fl,
int size);
294 void makefree(Freenode *curr,Freelist *fl);
302 void endpoint(Edge *e,
int lr,
Site * s);
304 void ELdelete(Halfedge *he);
305 Halfedge *ELleftbnd(
VPoint *p);
306 Halfedge *ELright(Halfedge *he);
307 void makevertex(
Site *v);
309 void PQinsert(Halfedge *he,
Site * v,
double offset);
310 void PQdelete(Halfedge *he);
312 void ELinsert(Halfedge *lb, Halfedge *newHe);
313 Halfedge * ELgethash(
int b);
314 Halfedge *ELleft(Halfedge *he);
315 Site *leftreg(Halfedge *he);
317 int PQbucket(Halfedge *he);
318 void clip_line(Edge *e);
319 char *myalloc(
unsigned n);
320 int right_of(Halfedge *el,
VPoint *p);
322 Site *rightreg(Halfedge *he);
328 Site *intersect(Halfedge *el1, Halfedge *el2 );
332 void pushGraphEdge(
double x1,
double y1,
double x2,
double y2,
348 Halfedge *ELleftend, *ELrightend;
352 double xmin, xmax, ymin, ymax, deltax, deltay;
369 int ntry, totalsearch;
370 double pxmin, pxmax, pymin, pymax, cradius;
373 double borderMinX, borderMaxX, borderMinY, borderMaxY;
375 FreeNodeArrayList* allMemoryList;
376 FreeNodeArrayList* currentMemoryBlock;
381 double minDistanceBetweenSites;
386int scomp(
const void *p1,
const void *p2);
GraphEdge * next
pointer to the next edge
double x1
coordinates of the extreme points
int point1
indices of the parent sites that define the edge
class to provide facilities for giving warnings up to some maximum number of times and to provide glo...
double x
vector coordinates
VPoint(double _x, double _y)
ctor with initialisation
Selector operator*(const Selector &s1, const Selector &s2)
successive application of 2 selectors
double norm(const VPoint p)
norm of a vector
double vector_product(const VPoint &p1, const VPoint &p2)
2D vector product
double scalar_product(const VPoint &p1, const VPoint &p2)
scalar product