The Cuik KD-Tree Library


cuik-kdtree.h
Go to the documentation of this file.
1 #ifndef CUIKKDTREEH
2 #define CUIKKDTREEH
3 
4 #include "definitions.h"
5 #include "rectangle.h"
6 
27 #ifdef NDEBUG
28  #define PLOTKDT 0
29 #else
30  #define PLOTKDT 1
31 #endif
32 
38 #define KDTPTR(a) ((TKDtree *)(a))
39 
52 typedef struct {
53  boolean isLeaf;
55  /* for all sub-trees */
56  unsigned int nd;
57  unsigned int n;
58  unsigned int m;
59  double r;
61  unsigned int *topology;
62  unsigned int height;
63  double volume;
65  /* for internal nodes */
66  unsigned int splitDim;
67  double splitValue;
68  void *left;
69  void *right;
70  void *leftLeaf;
71  void *rightLeaf;
73  /* for leaves */
74  void *nextLeaf;
75  double **p;
76  unsigned int *id;
80 } TKDtree;
81 
98 TKDtree *InitKDTree(Trectangle *ambient,unsigned int *topology,
99  unsigned int m,double r,unsigned int n,
100  double **points,unsigned int *ids);
101 
111 void AddPoint2KDtree(double *point,unsigned int id,TKDtree **kdt);
112 
123 unsigned int NearestNeighbour(double *point,TKDtree *kdt);
124 
136 void NeighboursInBall(double *point,double r,
137  unsigned int *n,unsigned int **ids,TKDtree *kdt);
138 
150 void SampleInKDtree(double *point,TKDtree *kdt);
151 
161 double KDtreeSamplingExpansion(TKDtree *kdt);
162 
173 void PrintKDtree(FILE *f,unsigned int indent,TKDtree *kdt);
174 
175 #if (PLOTKDT)
176 
189  void PlotKDtree(char *fname,boolean sphere,TKDtree *kdt);
190 #endif
191 
197 void DeleteKDtree(TKDtree *kdt);
198 
199 #endif
void SampleInKDtree(double *point, TKDtree *kdt)
Generates a random sample.
Definition: cuik-kdtree.c:747
Trectangle boundingBox
Definition: cuik-kdtree.h:77
double volume
Definition: cuik-kdtree.h:63
void AddPoint2KDtree(double *point, unsigned int id, TKDtree **kdt)
Adds a point to a kd-tree.
Definition: cuik-kdtree.c:582
double splitValue
Definition: cuik-kdtree.h:67
Trectangle samplingBox
Definition: cuik-kdtree.h:78
unsigned int NearestNeighbour(double *point, TKDtree *kdt)
Determines the nearest-neighbour for a point.
Definition: cuik-kdtree.c:714
void PlotKDtree(char *fname, boolean sphere, TKDtree *kdt)
Plots a kd-tree.
TKDtree * InitKDTree(Trectangle *ambient, unsigned int *topology, unsigned int m, double r, unsigned int n, double **points, unsigned int *ids)
Initializes a kd-tree from a set of points.
Definition: cuik-kdtree.c:544
unsigned int height
Definition: cuik-kdtree.h:62
void * nextLeaf
Definition: cuik-kdtree.h:74
double r
Definition: cuik-kdtree.h:59
unsigned int * id
Definition: cuik-kdtree.h:76
void DeleteKDtree(TKDtree *kdt)
Deletes a KD-tree.
Definition: cuik-kdtree.c:833
void * right
Definition: cuik-kdtree.h:69
Definition of the Trectangle type and the associated functions.
unsigned int m
Definition: cuik-kdtree.h:58
Definition of constants and macros used in several parts of the library.
A rectangle.
Definition: rectangle.h:26
void * rightLeaf
Definition: cuik-kdtree.h:71
double ** p
Definition: cuik-kdtree.h:75
unsigned int * topology
Definition: cuik-kdtree.h:61
boolean isLeaf
Definition: cuik-kdtree.h:53
void * left
Definition: cuik-kdtree.h:68
void PrintKDtree(FILE *f, unsigned int indent, TKDtree *kdt)
Prints a kd-tree.
Definition: cuik-kdtree.c:769
void NeighboursInBall(double *point, double r, unsigned int *n, unsigned int **ids, TKDtree *kdt)
Neighbours in a ball.
Definition: cuik-kdtree.c:730
double KDtreeSamplingExpansion(TKDtree *kdt)
Returns the sampling expansion used in the kd-tree.
Definition: cuik-kdtree.c:764
unsigned int nd
Definition: cuik-kdtree.h:56
void * leftLeaf
Definition: cuik-kdtree.h:70
unsigned int n
Definition: cuik-kdtree.h:57
unsigned int splitDim
Definition: cuik-kdtree.h:66
A KD-tree.
Definition: cuik-kdtree.h:52
Trectangle ambient
Definition: cuik-kdtree.h:60