关于八叉树和kd树,八叉树的更加适合点云。直观上看,八叉树更加贴合空间。
八叉树有一个优势,就是它可以提前终止搜索,而kd树做不到,它要返回根节点去一节一节找。
八叉树的构建思路:
1.判断是否有根节点,如果没有创建一个根节点 将所有的点都放进去
2.判断数据的大小,以及数据的边长(如果满足要求,就是叶子节点)
3.将数据压入八叉数中
4.递归调用以上的步骤
八叉树的查找思路:
- 如果是叶子节点并且空间内节点的数目是大于0的,那么遍历空间内的所有点,并放入到一个容器内部
- 如果不是那么就判断在八叉树的哪个空间内,在进行递归搜索
- 在搜索的过程中,要判断一点(是否要查找其他子空间)
怎么判断呢?如果以最远距离的球,完全处在这个空间内部,那么就不用找了,否则要判断这个球和那些空间有交集再去查找;
pcl octree源码写的很好,有各种操作(删除不用的内存 等等。。。)