最小外接矩形问题是在给出一个多边形(或一群点),求出面积最小且外接多边形的矩形的问题。这个问题看起来并不难,但是具体实现并不简单。除了调用现有的公开库之外,这里给出一种简单且易理解的方法。
算法的主要思想是:
(1)先实现多边形的简单外接矩形的算法。简单外接矩形是指边平行于x轴或y轴的外接矩形。简单外接矩形很有可能不是最小外接矩形,却是非常容易求得的外接矩形,这为后面做铺垫。
(2)实现平面上某一点绕固定点旋转某一角度的算法。数学基础是,设平面上点(x1,y1)绕另一点(x0,y0)逆时针旋转A角度后的点为(x2,y2),则有
x2 =(x1-x0)*cosA-(y1-y0)*sinA+x0
y2 =(x1-x0)*sinA+(y1-y0)*cosA+y0
顺时针时,A改写成-A即可。
(3)旋转原始多边形(循环,0-90°,间距设为1°),求旋转每个度数后的多边形的简单外接矩形,记录简单外接矩形的面积、顶点坐标以及此时旋转的度数。
(4)比较在旋转过程中多边形求得的所有简单外接矩形,得到面积最小的简单外接矩形,获取该简单外接矩形的顶点坐标和旋转的角度。
(5)旋转外接矩形。将上一步获得面积最小的简单外接矩形反方向(与第3步方向相反)旋转相同的角度,即得最小外接矩