pf_kdtree.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PF_KDTREE_H
00032 #define PF_KDTREE_H
00033
00034 #include <playerconfig.h>
00035
00036 #ifdef INCLUDE_RTKGUI
00037 #include "rtk.h"
00038 #endif
00039
00040
00041
00042 typedef struct pf_kdtree_node
00043 {
00044
00045 int leaf, depth;
00046
00047
00048 int pivot_dim;
00049 double pivot_value;
00050
00051
00052 int key[3];
00053
00054
00055 double value;
00056
00057
00058 int cluster;
00059
00060
00061 struct pf_kdtree_node *children[2];
00062
00063 } pf_kdtree_node_t;
00064
00065
00066
00067 typedef struct
00068 {
00069
00070 double size[3];
00071
00072
00073 pf_kdtree_node_t *root;
00074
00075
00076 int node_count, node_max_count;
00077 pf_kdtree_node_t *nodes;
00078
00079
00080 int leaf_count;
00081
00082 } pf_kdtree_t;
00083
00084
00085
00086 extern pf_kdtree_t *pf_kdtree_alloc(int max_size);
00087
00088
00089 extern void pf_kdtree_free(pf_kdtree_t *self);
00090
00091
00092 extern void pf_kdtree_clear(pf_kdtree_t *self);
00093
00094
00095 extern void pf_kdtree_insert(pf_kdtree_t *self, pf_vector_t pose, double value);
00096
00097
00098 extern void pf_kdtree_cluster(pf_kdtree_t *self);
00099
00100
00101 extern double pf_kdtree_get_prob(pf_kdtree_t *self, pf_vector_t pose);
00102
00103
00104 extern int pf_kdtree_get_cluster(pf_kdtree_t *self, pf_vector_t pose);
00105
00106
00107 #ifdef INCLUDE_RTKGUI
00108
00109
00110 extern void pf_kdtree_draw(pf_kdtree_t *self, rtk_fig_t *fig);
00111
00112 #endif
00113
00114 #endif