Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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
Java 查找边是否位于一组不相交的矩形内_Java_Algorithm_Data Structures_Computational Geometry - Fatal编程技术网

Java 查找边是否位于一组不相交的矩形内

Java 查找边是否位于一组不相交的矩形内,java,algorithm,data-structures,computational-geometry,Java,Algorithm,Data Structures,Computational Geometry,我正在使用一个三角剖分库来计算某个大边界内一组矩形的约束Delaunay三角剖分。该算法返回所有边,但也在定义约束的矩形内添加边。我希望能够在O(1)时间内找到一条边是否位于矩形内 下面是我想解决的问题的更一般的描述。给定一组不重叠的矩形(矩形的边界可能接触)和一条带有端点(x1,y1)和(x2,y2)的边e,在O(1)时间内查找e是否位于任何矩形(包括边界)内 同时让我知道我可以用来加速的任何数据结构!我还用java实现了这一点,因此我可以轻松访问散列集、映射和所有这些漂亮的数据结构。由于矩形

我正在使用一个三角剖分库来计算某个大边界内一组矩形的约束Delaunay三角剖分。该算法返回所有边,但也在定义约束的矩形内添加边。我希望能够在O(1)时间内找到一条边是否位于矩形内

下面是我想解决的问题的更一般的描述。给定一组不重叠的矩形(矩形的边界可能接触)和一条带有端点(x1,y1)和(x2,y2)的边e,在O(1)时间内查找e是否位于任何矩形(包括边界)内


同时让我知道我可以用来加速的任何数据结构!我还用java实现了这一点,因此我可以轻松访问散列集、映射和所有这些漂亮的数据结构。

由于矩形是完全封闭的,每个矩形的内部将只是矩形本身的CDT——也就是说,两个三角形,沿矩形的对角线相交。因此,您可以将所有矩形的对角线(记住,每个矩形有两条可能的对角线)插入哈希表中,并检查哪些边与这些端点完全匹配。

可以将所有矩形覆盖的区域分解为N×M的方框网格。通过将每个框标记为其所在的矩形或其重叠的矩形。通过O(N*M)预处理,可以获得O(1)个查询


然而,为了使其工作,网格必须基于一种算法来创建,该算法允许计算点位于O(1)中的哪个框中。它还要求长方体重叠的矩形数量非常小(理想情况下不超过2或3),否则平均查询时间可能是O(logn)或最差。这意味着盒子的数量可能会非常大。

我认为没有O(1)算法。一个好的数据结构是一个很好的例子,但事实并非如此。如果有任何矩形与边界接触,则可以插入不属于多边形CDT一部分的额外边。查看另一篇文章,我在其中提供了一个可视示例: