Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在边界框内处理移动点接触和包容的数据结构?_Algorithm_Data Structures_Kdtree - Fatal编程技术网

Algorithm 在边界框内处理移动点接触和包容的数据结构?

Algorithm 在边界框内处理移动点接触和包容的数据结构?,algorithm,data-structures,kdtree,Algorithm,Data Structures,Kdtree,随着时间的推移,我在空间中有很多点在移动。它们在充满AABB边界框的空间中移动(包括嵌套的边界框,BB比点少)。我想知道是否有一种数据结构可以帮助组织进入边界框的点 目前,我想到了一种基于盒子中心的kd树来执行点移动的ANN,盒子相交/嵌套层次(谁在谁的内部/旁边)用于盒子检测 但这在很多方面都很慢,所以我想知道是否有专门的算法/数据结构用于这种情况?一种同时查询多个点的方法?我建议使用某种if四叉树。 基本四叉树在快速删除/插入方面已经相当不错了,但有一些特殊的变体更好: 使用重叠区域,这允

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

目前,我想到了一种基于盒子中心的kd树来执行点移动的ANN,盒子相交/嵌套层次(谁在谁的内部/旁边)用于盒子检测


但这在很多方面都很慢,所以我想知道是否有专门的算法/数据结构用于这种情况?一种同时查询多个点的方法?

我建议使用某种if四叉树。 基本四叉树在快速删除/插入方面已经相当不错了,但有一些特殊的变体更好:

  • 使用重叠区域,这允许移动对象在需要重新插入不同节点之前在同一节点中停留更长时间
  • 从技术上讲,该方法是一种“位级trie”。它基本上看起来像四叉树,但深度有限(64位值为64位),从未进行过重新插入/重新平衡,并且保证每次插入或删除最多修改两个节点。同时,节点大小受维度限制,因此在存储点和矩形(框)时,3D点的每个节点最多8个点或64个条目。对于您的情况很重要:非常好的更新性能(优于R树或KD树)和非常好的窗口查询性能。当您查找与AABB重叠的点时,窗口查询将代表您的AABB。此外,您还可以将AABBs存储在树中,然后任何窗口查询都将返回所有点以及与之重叠的其他AABBs(如果这对您有用)

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

我建议使用某种if四叉树。 基本四叉树在快速删除/插入方面已经相当不错了,但有一些特殊的变体更好:

  • 使用重叠区域,这允许移动对象在需要重新插入不同节点之前在同一节点中停留更长时间
  • 从技术上讲,该方法是一种“位级trie”。它基本上看起来像四叉树,但深度有限(64位值为64位),从未进行过重新插入/重新平衡,并且保证每次插入或删除最多修改两个节点。同时,节点大小受维度限制,因此在存储点和矩形(框)时,3D点的每个节点最多8个点或64个条目。对于您的情况很重要:非常好的更新性能(优于R树或KD树)和非常好的窗口查询性能。当您查找与AABB重叠的点时,窗口查询将代表您的AABB。此外,您还可以将AABBs存储在树中,然后任何窗口查询都将返回所有点以及与之重叠的其他AABBs(如果这对您有用)

不幸的是,我不知道Samet的四叉树有任何免费的实现。对于pH-Trar,可以在上面给出的链接和C++版本中找到java版本。您还可以查看各种多维索引的my for Java实现。

K-D树很难动态生成-一次更改很容易就需要重建整个树;考虑使用四叉树代替,允许局部变化。2D或3D,边界框移动吗?@ Matt:3D BoxESK-D树很难生成动态-一个改变可以很容易地要求整棵树被重建;考虑使用四叉树代替,允许局部变化。2D或3D,边界框移动吗?@ Matt:3D框