我正在研究小项目,要求我快速找到一组三角形中的哪些三角形部分或完全包含在给定的矩形区域内。我对优化快速搜索感兴趣 - 我不受内存限制。
这不是我太熟悉的领域,所以我迄今为止所做的就是在谷歌上寻找处理这个问题的标准算法。到目前为止,我最接近的是使用两个间隔树。这有点笨拙,因为我必须对每个三角形的边缘和矩形区域的边缘在x和y方向上的间隔重叠进行测试。
有人可以指向任何“正确”的资源吗?处理这个问题的方法是什么?
谢谢!
编辑:我忘了提到我目前使用的矩形区域与坐标轴x和y平行。目前,我对任何利用此约束的解决方案感到满意。但是,一般来说,完全任意矩形的解决方案很容易理解。
答案 0 :(得分:3)
您可以使用AABBTree(AABB代表Axis Aligned Bounding Box树),. 想法是将每个三角形包含在其轴对齐的边界框中,然后构建一个树,其初始三角形为叶子,并且上部节点具有边界框,该边界框是其子节点的边界框的并集。然后,当搜索哪些三角形与"某些"有一个非空的交集时,你会检查"是什么"与节点的边界框有一个交集,然后沿着树向下测试它的子节点(递归函数)。
您可以在以下位置找到AABBTrees的有效实施:
答案 1 :(得分:1)
假设矩形是轴对齐的,我就这样做:
将三角形的边界框与区域进行比较。如果它在里面,则三角形在里面。如果根本没有重叠,那就没有了。如果需要检查具有不同区域的同一组三角形,请为此步骤的每个维度使用间隔树。
我们在第一步检查了两个简单的情况,因此我们知道区域和边界框重叠。检查三角形的任何点是否在矩形内。如果是这样,三角形就在里面。
检查矩形的四边,三角形的三边是线段交点
答案 2 :(得分:1)