在这篇文章中,我们正在寻找关于如何在凸多边形内找到最大面积矩形的算法 / 想法。
在下图中,数字是拟合矩形的面积。如图所示,期望的矩形可以在每个维度上变化并且可以成任何角度。
编辑:
正如我们在这里所问的那样,我们尚无明确的主意如何处理提到的问题。尽管如此,我们猜测最大面积矩形可能是其中一个边缘与多边形边缘对齐(当然不一定是相同长度的边缘)的边缘之一。
在这篇文章中,我们正在寻找关于如何在凸多边形内找到最大面积矩形的算法 / 想法。
在下图中,数字是拟合矩形的面积。如图所示,期望的矩形可以在每个维度上变化并且可以成任何角度。
编辑:
正如我们在这里所问的那样,我们尚无明确的主意如何处理提到的问题。尽管如此,我们猜测最大面积矩形可能是其中一个边缘与多边形边缘对齐(当然不一定是相同长度的边缘)的边缘之一。
Answers:
一些注释太大而无法添加注释(尽管这并不意味着有明显的算法):
划线(已编辑):最大面积矩形的至少两个顶点必须位于多边形的边界上(即,沿着边缘或在顶点处)。并且如果最大面积矩形不是正方形,则多边形的边界上必须至少有三个顶点。
我通过四个步骤向我证明了这一点:
注意#1:最大面积矩形的至少一个顶点将始终位于多边形的边界上。这是很明显的,但是一个证明可能会这样(由于矛盾):假设您有一个“最大”矩形,该多边形的边界上没有顶点。这意味着每个顶点周围至少要有一点空间。因此,您可以稍微扩展矩形,这与矩形的最大值相反。
注意#2:最大面积矩形的至少两个顶点将始终位于多边形的边界上。一个证明可能是这样的(再次是矛盾的):假设您有一个“最大”矩形,边界上只有一个顶点(由注释#1保证)。考虑不与该顶点相邻的两个边。由于它们的端点不在边界上,因此每个端点周围都有一点空间。因此,可以将这些边缘中的任何一个“挤出”一点,以扩大多边形的面积并使其最大值相矛盾。
注意#3:最大面积矩形的两个对角相对的顶点位于多边形的边界上。(我们从注释2中知道,至少有两个,但不一定是彼此对面的。)但又是矛盾的,如果只有两个边界顶点是相邻的,则相反的边(两个顶点都不是)在边界上)可以挤出一点,从而增加矩形的面积并与矩形的最大值相矛盾。
注意#4:(已编辑)如果最大面积矩形不是正方形,则其三个顶点将位于多边形的边界上。
为了证明这一点,假设情况并非如此,即最大面积的矩形不是正方形,但是多边形的边界上只有两个顶点。我将展示如何构造一个与最大值矛盾的更大的矩形。
调用矩形的顶点A
,B
,C
,和D
。在不失一般性的前提下,假定B
和D
是位于多边形边界上的两个。由于A
和C
都在多边形的内部,还有他们周围的一些回旋的余地(绕圆圈表示A
,并C
在下面的图片)。现在周围绘制矩形一个圈,滑点A
,并C
围绕相同的量圆一点(做A'
和C'
,如下图所示),以使新的矩形A'BC'D
比原始矩形更方形。此过程将创建一个新的矩形,该矩形也位于原始多边形内,并具有较大的面积。这是一个矛盾,因此证明已经完成。
要相信这一证明,您必须说服自己,当圆内接的矩形变成“更大的正方形”(即,边长之间的差异变小)时,其面积就会增加。您还需要使多边形凸出,以便所有新线都在其中。可能还有其他一些小细节被掩盖了,但是我很确定它们都能解决。
关于问题中的绿色音符,我已经做了一个非常迅速和令人毛骨悚然的草图。我无法将其发布为评论,因此即使不是一个答案,我也必须写一个答案。
我相信在下面的图片中,我们有一个最大面积的矩形(不是完美的,这只是在Paint上绘制的草图以提供一个想法),而且我认为您找不到更大的矩形,而矩形与黑色胶边的边界...
但是我可能是错的,在这种情况下,您会道歉。
大多数其他算法会找到凸多边形中所刻的最大面积直线矩形,其复杂度为O(log n)
。我认为您不认为最大面积多边形与边之一对齐是正确的,因为您要做的就是旋转多边形n
时间,从而导致的复杂度O(n log n)
,而在我的简要研究中,我无法找到说这很容易的任何东西。
然而,Knauer等人在论文《凸多边形中最大的内接矩形》一书中指出。等人描述了一种近似算法,可以使您接近正确的答案。
据我所知,该算法建立在已知的与轴对齐的最大面积多边形之一的顶部,然后对Polyon空间内的点进行随机采样,从这些随机采样生成多个轴,遍历这些轴并应用该轴对齐算法,然后返回该集合中最大的矩形。