问题:在尺度不确定的场景下,复杂度还是 o(n2),后续算法也有这个问题。
这篇文章核心思想是使用八叉树和球与长方体相交算法,
解决在已知查询第二个点云 q 长度为 d 时复杂度为 o(n2) 问题。
4pcs
与 s4pcs
实现了不同的 ExtractPairs
,4pcs
与多尺度的 s4pcs
都是使用的 o(n2) 复杂度逐点搜索长度。
- 核心算法在类
IntersectionFunctor
的 process
方法中。
- 首先将点云按照最长边缩放到单位长度。
- 然后遍历每一个点 (
primitive
),将与球体相交的方块进行多次分裂
- 分为提前停止分裂的和最后一次分裂两部分的 长方体 (
node
) 存储进结果。
- split 算法
- 首先将 xyz 投影到同一维度上,用 中值 的左右两侧表示第几块
- 首先按 x 分成 2 段
- 然后按 y 再将 x 的2段分为 4 段
- 同样 z 会得到 8 段