寻找凸多边形的最小面积矩形

Finding a minimum area rectangle of a convex polygon

我正在寻找一种找到凸多边形的最小面积矩形的有效方法。

运行 时间应该是 O(n),其中 n 是顶点数。

找到一般多边形的边界框有一个复杂的算法,但对于凸多边形应该有一个更简单的算法。

一个凸多边形如何轻松完成?

谢谢。

旋转卡尺是您最好的朋友。

最紧密的边界矩形是它的一条边与多边形的一条边重合。所以,

  • 从任意边开始,旋转多边形,使该边水平,在底部;

  • 分别求出使Y、-X、X最大化的三个顶点(图中4、6、3)。这样,您将获得一个边界框;

  • 然后顺时针移动到下边,调整旋转;

  • 通过更新maxima找到接下来的三个顶点(按照轮廓在Y减小之前停止;同-X和X;图中4->5,6->6和3->3);

  • 对于每个位置,计算面积并保留最好的。转一圈后停下来。

重要的是要认识到您不会将旋转应用到所有顶点,而是仅在需要时应用。要获得初始边界框,您需要处理 O(N) 个顶点,但 N-1 次更新仅需要 O(N) 次额外工作(摊销),并且您不必计算两个坐标。