如何找到凸多边形内的最大面积矩形?


21

在这篇文章中,我们正在寻找关于如何凸多边形找到最大面积矩形的算法 / 想法

在下图中,数字是拟合矩形的面积。如图所示,期望的矩形可以在每个维度上变化并且可以成任何角度。

编辑:

正如我们在这里所问的那样,我们尚无明确的主意如何处理提到的问题。尽管如此,我们猜测最大面积矩形可能是其中一个边缘多边形边缘对齐(当然不一定是相同长度的边缘)的边缘之一。

在此处输入图片说明


1
您能指定使用什么软件吗?另外,将您的工作发布到现在为止,或者将您发布出来的通用方法来解决此问题。也许有人可以改善您已经完成的工作。以我的经验,这将比仅仅发布一个“突如其来的问题”带来更多有用的答案。
马丁


@Martin软件:如有需要,Python将在其中进行编程Fortran。我们有一个猜测,根据我们之前在此处也提到的上whuber一篇文章,答案可能是一个矩形,该矩形的边与多边形相同。
开发人员

1
您的问题是一个非常有趣的问题,我想我在这里这里都能找到一种求解算法。
nick13 2013年

1
@nickves感谢您的链接。您能否将这些信息作为答案并给出一些算法解释?被接受可能是一个很好的答案。
2013年

Answers:


4

一些注释太大而无法添加注释(尽管这并不意味着有明显的算法):

划线(已编辑):最大面积矩形的至少两个顶点必须位于多边形的边界上(即,沿着边缘或在顶点处)。并且如果最大面积矩形不是正方形,则多边形的边界上必须至少有三个顶点。

我通过四个步骤向我证明了这一点:

注意#1:最大面积矩形的至少一个顶点将始终位于多边形的边界上。这是很明显的,但是一个证明可能会这样(由于矛盾):假设您有一个“最大”矩形,该多边形的边界上没有顶点。这意味着每个顶点周围至少要有一点空间。因此,您可以稍微扩展矩形,这与矩形的最大值相反。

注意#2:最大面积矩形的至少两个顶点将始终位于多边形的边界上。一个证明可能是这样的(再次是矛盾的):假设您有一个“最大”矩形,边界上只有一个顶点(由注释#1保证)。考虑不与该顶点相邻的两个边。由于它们的端点不在边界上,因此每个端点周围都有一点空间。因此,可以将这些边缘中的任何一个“挤出”一点,以扩大多边形的面积并使其最大值相矛盾。

注意#3:最大面积矩形的两个对角相对的顶点位于多边形的边界上。(我们从注释2中知道,至少有两个,但不一定是彼此对面的。)但又是矛盾的,如果只有两个边界顶点是相邻的,则相反的边(两个顶点都不是)在边界上)可以挤出一点,从而增加矩形的面积并与矩形的最大值相矛盾。

注意#4:(已编辑)如果最大面积矩形不是正方形,则其三个顶点将位于多边形的边界上。

为了证明这一点,假设情况并非如此,即最大面积的矩形不是正方形,但是多边形的边界上只有两个顶点。我将展示如何构造一个与最大值矛盾的更大的矩形。

调用矩形的顶点ABC,和D。在不失一般性的前提下,假定BD是位于多边形边界上的两个。由于AC都在多边形的内部,还有他们周围的一些回旋的余地(绕圆圈表示A,并C在下面的图片)。现在周围绘制矩形一个圈,滑点A,并C围绕相同的量圆一点(做A'C',如下图所示),以使新的矩形A'BC'D比原始矩形更方形。此过程将创建一个新的矩形,该矩形也位于原始多边形内,并具有较大的面积。这是一个矛盾,因此证明已经完成。

构造一个新的矩形

要相信这一证明,您必须说服自己,当圆内接的矩形变成“更大的正方形”(即,边长之间的差异变小)时,其面积就会增加。您还需要使多边形凸出,以便所有新线都在其中。可能还有其他一些小细节被掩盖了,但是我很确定它们都能解决。


注意#4是可疑的,因为“摆动”其他两个顶点将创建非矩形。
Whuber

真正。但是,第4个示例的可视化效果不太理想(如果2个顶点在多边形边界上,则无法进一步拉伸)。我虽然找不到确切的解释方法(试图写评论,但是太混乱了),但是我相信你是对的。
2013年

我相信有一些反例来说明#4。不过,我发现的结果需要一些涉及的计算才能显示出来;最简单的是对不规则六边形(一个带有两个相对角的正方形略去掉)的摄动。
ub

同意注释4可疑。今天晚上我会仔细看一下,然后修复或删除它。
csd

+1这是难度的不错解决方案。感谢您的编辑!
ub

3

关于问题中的绿色音符,我已经做了一个非常迅速和令人毛骨悚然的草图。我无法将其发布为评论,因此即使不是一个答案,我也必须写一个答案。
我相信在下面的图片中,我们有一个最大面积的矩形(不是完美的,这只是在Paint上绘制的草图以提供一个想法),而且我认为您找不到更大的矩形,而矩形与黑色胶边的边界...
但是我可能是错的,在这种情况下,您会道歉。
我在Paint上制作的快速素描


3
好点(+1)。但是,有一个更简单的反例:考虑在正八边形内刻出最大面积矩形的问题。很容易看到(并且很容易通过首先找到八角形外接圆的最大正方形来证明)解的角与八角形的交替顶点重合,并且该解实质上大于任何边缘对齐的内接矩形。
Whuber

实际上(现在我只是有一个很大的疑问),此多边形的外部最小矩形(此帖子中的矩形)没有与侧面之一相同的方向,对吗?(我会看到它的方向与我的红色矩形相同)
Saryk

3
顺便说一下,那个多边形不是凸的。最初的问题确实限于凸多边形。
csd

2
@csd很好,但是如我的反例所示,Saryk仍然正确。Saryk,最小面积的边界矩形没有问题:很容易(严格地)证明它必须包括凸包的一侧。我相信(凸多边形的)最大内切矩形仅需要两个顶点接触边界,而不再需要。
Whuber

2

大多数其他算法会找到凸多边形中所刻的最大面积直线矩形,其复杂度为O(log n)。我认为您不认为最大面积多边形与边之一对齐是正确的,因为您要做的就是旋转多边形n时间,从而导致的复杂度O(n log n),而在我的简要研究中,我无法找到说这很容易的任何东西。

然而,Knauer等人在论文《凸多边形中最大的内接矩形》一书中指出。等人描述了一种近似算法,可以使您接近正确的答案。

据我所知,该算法建立在已知的与轴对齐的最大面积多边形之一的顶部,然后对Polyon空间内的点进行随机采样,从这些随机采样生成多个轴,遍历这些轴并应用该轴对齐算法,然后返回该集合中最大的矩形。


第一句话中可能有错字吗?不可能有O(log(n))算法,因为仅读取坐标就是O(n)操作!
ub

链接已死
危险的

1
@dangerousdave -实测值的备用链路但是长它持续....
lreeder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.