我有一组点云(一组已确定在自己的区域内的点)。
目标是结合这些单独的集群
一世。相交
ii. 在彼此之间的某个最小距离内
Check ii 使这变得更加困难。为了快速处理这些点云,我正在创建 AABB(沿 X 轴对齐的轴对齐边界框)。
我目前的方法是使用分离轴定理的一些属性:
- 为每个点云创建 AABB
- 对于每个 AABB,检查它们是否重叠,方法是将它们投影到随机轴上,然后按照它们落在这条线上的位置 o(nlog(n)) 对这些线性投影进行排序。然后,我浏览此列表以使用 SAT 检查交叉点 O(N)。大多数 AABB 的线性投影不会重叠,因此不会相交,而那些我可以手动检查的投影(因为 1D 中没有重叠保证没有相交,但反之则不然)。
最后一部分是我卡住的地方。完成上述一维投影是为了避免 O(n^2) 成对检查交叉点。但是为了组合在某个阈值内但不相交的凸多边形,我看不到 O(N^2) 成对检查的方法。
有没有办法构建一些树或图形来组合彼此在一定距离内的所有凸多边形而不检查每个成对组合?
如果使用我的步骤 1 和 2,您可以假设剩余的点云/AABB 不相交。
编辑
一个潜在的解决方案是将其添加threshold/2
到AABB
宽度和高度,并检查交叉点。如果它们相交,那么我可以检查两个实际的交叉点(这对 AABB 来说很快),以及两者之间的最小距离。