已知一多边形,怎样求得与其重合度最高的矩形

我的算法是这样的:你上面的图是凸多边形,我就拿一个极端的凹多边形来试试:已知一多边形,怎样求得与其重合度最高的矩形

这个多边形够极端吧(带个把)题主所说的找到此图形的质心。这个方向是对的。假设此图的质心是O点。如下图:已知一多边形,怎样求得与其重合度最高的矩形

如上图所指,我们找到了质心,然后我们要确定最适合的矩形的朝向(向哪个方向倾斜)这样我们遍历A图形的所有顶点,找到离O点最远的那个点定为F点。应该是下图这个点:已知一多边形,怎样求得与其重合度最高的矩形

然后以O到F建立X轴:已知一多边形,怎样求得与其重合度最高的矩形

然后垂直于x-axis建立y轴。已知一多边形,怎样求得与其重合度最高的矩形

以下是一个动态调节的过程(想象一下摄像机焦距的对焦过程)以O点为出发向+X方向移动一条平行于y轴的平行线,直到与图形A不相交即到达F点。如下图已知一多边形,怎样求得与其重合度最高的矩形

同样的过程向-x方向发射一条平行线,到达图形的最远端,如下图:已知一多边形,怎样求得与其重合度最高的矩形

还剩剩余y轴两个方向,同样这样处理,最后如图:已知一多边形,怎样求得与其重合度最高的矩形

其实就是一个包裹A图形的最小矩形ABCD.下面是动态调节的过程,保持AB:BD的比例(保持此矩形的长宽比),缩小此矩形,直到此矩形的面积 = A图形的面积。如下图:已知一多边形,怎样求得与其重合度最高的矩形

然后黑色矩形就是题主所要求的重合度最高的矩形。如果有什么问题,也请帮忙指正一下。--------------------------------------------------------------------------------------- @孙鹏飞针对有人说一下图形不适合,我也简单做了下示意图,我没有电脑验证过,我基本认为也是可以解决的。P为到质心的最远点,以确定X轴的方向。已知一多边形,怎样求得与其重合度最高的矩形
【已知一多边形,怎样求得与其重合度最高的矩形】

■网友
OpenCV里有boundingRect函数,不谢!
■网友
如果能确定矩形的方位,二分两边长应该可以搞定。
■网友
多边形拟合,先逐步减少拟合所需要的点数,最后简化为一个四边形,再去求最接近这个四边形的矩形,循序渐进,肯定有部分特例,但是这种方法比较稳定而且实用
■网友
一个想法,不一定对。轴向的确定是不是可以通过找到一维投影最大的连续峰所在的方向,取投影方向作为矩形的一轴?另一个想法,也不一定对。利用主成分提取?
■网友
实在不行遗传算法吧.....
■网友
@叶蔚 你的方法这奇葩形状不适用已知一多边形,怎样求得与其重合度最高的矩形


推荐阅读