在其他多边形中找到最大空矩形的算法

Posted

技术标签:

【中文标题】在其他多边形中找到最大空矩形的算法【英文标题】:Algorithm to find the largest empty rectangle amid other polygons 【发布时间】:2015-02-08 14:34:46 【问题描述】:

场景:有一个矩形空间,里面有任意放置的任意方向的多边形。目的是找到最大的空矩形,该矩形可以安装在矩形空间的空白区域内。下面的这些图片说明了场景,其中蓝色多边形和虚线表示可以在每个场景中拟合的最大空矩形。

问题:显然,找到最大的空矩形是计算几何中的well known problem,但我在这个领域找到的算法处理的是在点之间找到空矩形(CGAL 已经实现了这个)和线段。有没有办法让这些现有技术适应我的场景?或者有更简单的方法吗?

【问题讨论】:

链接的 google 结果中的第 5 个链接可能对您有用。因为他们还处理可能有洞的多边形。这些洞就是你的多边形。所以试试:sciencedirect.com/science/article/pii/0925772195000410 @Trilarion 谢谢,看起来很有希望! 【参考方案1】:

不幸的是,我熟悉的大多数计算几何文献似乎都生成了对算法的漂亮描述和正确性的证明,而没有实际提供实现。也许这是因为实现通常相当复杂。

你没有提到你可以容忍多大程度的不准确。如果你有一些宽容,这个答案是给你的。

我的建议是你把这个难题变成一个更简单的问题

    Find the bounding box 您的多边形集合。 将边界框划分为一个网格。网格越细,准确度就越高,但找到解决方案所需的时间就越长。 Find 每个网格单元(投射为矩形多边形)与多边形集相交的面积。 如果重叠足够(大于您指定的某个最小值),则用零标记网格单元;否则,用一个标记它。 您现在有一个由 0 和 1 组成的矩形数组。这构成了更简单问题的基础:这个网格中最大的矩形子集是完全由 1 组成的?

这个更简单的问题在互联网上有许多可访问的解决方案(例如1、2、3、4、5、6)。

【讨论】:

以上是关于在其他多边形中找到最大空矩形的算法的主要内容,如果未能解决你的问题,请参考以下文章

最小外接矩形的简介

切割多边形算法

Java:找到凸多边形的最外层顶点

从最小和最大纬度/经度创建多边形(矩形)

凸包多边形最小外切矩形算法

找到形成凸多边形的最大点子集