ikdtree本质上也是一种kdtree,基本的构造方法和kdtree是一样的,本文主要记录两者不一样的地方,以港大MaRS实验室最新开源的增量式 kd-tree(https://github.com/hku-mars/ikd-Tree)里面的一些代码作为示范。
以下是ikdtree结构体包括的基本变量,在港大开源的代码中结构变量是远远多于这里的,主要是为了利用其他方面(例如多线程)对树进一步优化加速。
{
// 寻常kdtree也有的:
uint8_t division_axis; //以哪一个轴(x,y,z)作为的切分平面法线KD_TREE_NODE *left_son_ptr = nullptr; //左孩子节点
KD_TREE_NODE *right_son_ptr = nullptr;//右孩子节点float node_range_x[2], node_range_y[2], node_range_z[2]; //AABB包围盒
// 以下主要是用于增删的变量:
PointType point; //点坐标
int TreeSize = 1; //包括它本身和它左右孩子的总数量
int invalid_point_num = 0; //包括自己在内已经被标记删除点的数量
bool point_deleted = false; //该节点是否被标记删除
KD_TR