【点云处理】第二章 最邻近问题 Nearest Neighbor Prroblem (3)八叉树

Page1

在这里插入图片描述
八叉树为三维数据设计
八叉树不需要回到root节点才停止,可以提前停止搜索。
构建一个以搜索节点为中心,搜索半径的球,球完全落在某立方体里,则搜索范围就在立方体中。外面的东西不用管。

Page2

在这里插入图片描述

Page3

在这里插入图片描述
octant组成:
子节点children有8个;
center,立方体中心点位置;
extent:半个边长,中心点到其中一个面的距离;
立方体中的点的index;
判断是不是leaf

Page4

在这里插入图片描述
构建8叉树:
db:database,所有的点,根据点构建8茶树
如果root节点不存在就建一个,把点都放进去。
判断点的数量够不够leaf_size,或者边长够不够min_extent,如果是的话就可以返回了,不是就进一步切割;
第一步是考虑里面的点进入哪个子节点中,第一个绿框决定每个子节点都有什么点,记下来。第二个框,每个子节点中心点在哪,边长多少,把点放进去,再调用递归函数建下一层octent。

Page5 KNN查找

在这里插入图片描述
query ball在S2内部,所以可以搜索完S12后停止搜索,不必返回S1根节点再搜索S3 S4。

Page6

在这里插入图片描述
首先如果进来根节点是none则什么都不用做了,回去;
如果是leaf节点,把octent中所有节点拿过来计算距离,对比,放到容器中;
如果不是leaf,就再继续寻找最近的子节点,递归调用;
找完之后再找其他子节点,因为找完第一个子节点之后还没能提前终止,if()return true,如果提前终止就不用再去找其他子节点了,也可能找完第一个子节点没找到,还要找其他7个子节点,就到了for循环;
最后,如果query球被一个octent包围了,就可以提前终止了。inside函数是说一个query被一个octent包围了。
在这里插入图片描述
在这里插入图片描述
考虑顺序:
球和某个面有接触;
球和顶点有接触;
球和某个棱有接触。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值