处理边界框内移动点接触和遏制的数据结构?

时间:2017-08-31 14:12:53

标签: algorithm data-structures kdtree

随着时间的推移,我在太空中有很多点。它们在空间中移动,充满了AABB边界框(包括嵌套框,BB的数量少于点)我想知道是否有一个数据结构可以帮助组织点进入边界框检测。

目前我想到了一个基于盒子中心的kd树来对点移动进行人工神经网络,盒子交叉/嵌套层次结构(谁在其中/旁边)用于盒子检测。

然而,对于这么多点来说这是缓慢的,所以我想知道这种情况下是否有一些专门的算法/数据结构?一种同时对多个点进行查询的方法吗?

1 个答案:

答案 0 :(得分:0)

我建议使用一些如果四叉树。 基本四叉树已经非常好用于快速删除/插入,但有一些特殊的变体,更好:

  • Quadtree proposed by Samet et al使用重叠区域,允许移动对象在同一节点中停留更长时间,然后才需要在其他节点中重新插入。
  • PH-Tree技术上是一个'位级别的特里'。它基本上看起来像四叉树,但深度有限(64位值为64),没有重新插入/重新平衡永远并且保证每次插入或删除时最多修改两个节点。同时,节点大小受到维度的限制,因此在存储点和矩形(框)时,3D点或每个节点最多8个点。对您的情况很重要:非常好的更新性能(优于R树或KD树)和非常好的窗口查询性能。当您查找与AABB重叠的点时,窗口查询将代表您的AABB。此外,您还可以在树中存储AABB,然后任何窗口查询都将返回所有点和它重叠的其他AABB(如果这对您有用)。

不幸的是,我不知道Samet的四叉树的任何免费实现。对于PH-Tree,您可以在上面给出的链接和C ++版本here上找到Java版本。您还可以查看我的index collection以获取各种多维索引的Java实现。