三维点云处理:8 Kd-tree:
二叉树适合简单的一维查找,涉及到二维的查找就需要用到Kd-tree。k即为k-dim,k维的意思。
KD-tree和二叉树的原理是一样的。在二维平面中对平面不断切分。如图:
算法过程:
1、如果剩下了不多的点,就将其作一个点来看。
2、否则就使用一个超平面(我理解的超平面在这里是直线)来一分为二
3、迭代重复12两步
要么点在线上,要么不在线上。
kd-tree的构建:
代码段:
复杂度:O(n log n log n)-O(nlogn)
kdtree查找:
核心部分:
红色为查询点,蓝线为最坏距离,黑色虚线为划分轴,
判断红点到黑线距离是否小于最坏距离+红点是否在这个区间内。
复杂度:
平衡二叉树:O(logn)
最坏:O(n)