Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Data structures 查找包含点的区域的良好数据结构是什么?_Data Structures_Binary Tree_Point_Region_Quadtree - Fatal编程技术网

Data structures 查找包含点的区域的良好数据结构是什么?

Data structures 查找包含点的区域的良好数据结构是什么?,data-structures,binary-tree,point,region,quadtree,Data Structures,Binary Tree,Point,Region,Quadtree,我正在寻找一个数据结构,它支持查找n个区域中哪一个包含p点。我在看四叉树和R-树,但我不认为它们完全符合我要找的 本质上,我希望能够向这棵树添加一些三维矩形区域,然后能够根据这棵树测试一个三维点,并返回对该点约束最严格的区域。任何地区都不会有重叠的边界 我目前使用的朴素算法是针对每个矩形区域的每个维度简单地测试点p for(region in regionList): if(p.x > region.x1 && p.x < region.x2 &&am

我正在寻找一个数据结构,它支持查找n个区域中哪一个包含p点。我在看四叉树和R-树,但我不认为它们完全符合我要找的

本质上,我希望能够向这棵树添加一些三维矩形区域,然后能够根据这棵树测试一个三维点,并返回对该点约束最严格的区域。任何地区都不会有重叠的边界

我目前使用的朴素算法是针对每个矩形区域的每个维度简单地测试点p

for(region in regionList):
    if(p.x > region.x1 && p.x < region.x2 && p.y > region.y1 && py < region.y2 && p.z > region.z1 && p.z < region.z2)
        return region
end

这在时间上运行,其中n是区域数。我希望搜索将Olog n作为点四叉树来查找2d点。

检查并。

我建议使用存储区域的四叉树,如MX-CIF树。它本质上是一个基于二维x,y的四叉树。找到包含x、y方向的点的适当节点后,可以检查该节点是否包含所有三个x、y、z方向的点

我做完了


您也可以查看八叉树,它是一种三维四叉树。

只是为了确保我正确理解您的意思。您是否建议我使用四叉树检查点是否在xy区域内,然后单独检查点是否也在该区域的z边界内?如果我有两个区域,一个在另一个之上,会发生什么?四叉树会返回什么?一个点不能存在于多个区域中,对吗?这不是问题陈述的一部分吗?是的,但是因为MX-CIF树测试一个点是否在2d区域内。如果我有3d区域,那么一个点可能在两个3d区域的投影内,而不在这两个区域内。除非你的意思是我将MX-CIF树调整为3维,在这种情况下应该可以。如果两个非重叠边界矩形占用不同的Z空间,则一个点只能位于两个非重叠边界矩形的同一XY空间中。上面的另一个表示不同的Y空间,而不是Z空间。我想你的意思是在另一个后面-在这种情况下,它们将具有相同的XY空间,但不同的Z空间,因此Justin的建议可以很好地工作。在任何情况下,只有一个矩形(如果有)可以包含该点,因此建议的构造无法回答哪个矩形约束该点最紧密的问题。也许你需要对你的问题定义进行更仔细的审查。这看起来很有希望。由于区域最多不能重叠,因此只有一个区域可以包含该点。这就产生了…返回哪个区域最严格地约束该点的问题。逻辑上的不可能。1,并且只有1可以约束这一点。该应用程序可能会很好地利用新的SIMD扩展,为3D图形应用程序提供16个128位寄存器。