我正在使用三角测量库来计算一些大边界内的一组矩形的约束Delaunay三角剖分。该算法返回所有边,但也在定义约束的矩形内添加边。我希望能够在O(1)时间内找到边缘是否位于矩形内部。
以下是我想要解决的问题的更一般描述。给定一组非重叠矩形(矩形的边界可以触摸)和带有端点(x1,y1)和(x2,y2)的边e,如果e位于任何矩形内,则在O(1)时间内找到(包括边界)。
另请告诉我可用于加速的任何数据结构!我也在java中实现它,所以我可以轻松访问哈希集,映射和所有那些不错的数据结构。
答案 0 :(得分:0)
由于矩形是完全封闭的,每个矩形的内部将只是矩形本身的CDT - 也就是说,两个三角形,沿矩形的对角线相交。因此,您只需将所有矩形的对角线(请记住,每个矩形两个可能的对角线)插入哈希表,并检查哪些边缘与这些端点完全匹配。
答案 1 :(得分:0)
可以将所有矩形覆盖的区域分解为N×M网格框。通过用矩形标记每个框,它是重叠的矩形或矩形。通过O(N * M)预处理,可以获得O(1)个查询。
但是,为了使其工作,必须基于一种算法创建网格,该算法允许计算点在O(1)中的哪个框。它还要求盒子重叠的矩形数量非常小(理想情况下不超过2或3),否则平均查询时间可能是O(log N)或最差。这意味着盒子的数量会变得非常大。