现在要开始解决问题了。
我们的输入是一组连续的矩形,如下图橘黄色所示:
这些矩形表示的是这个小车的路线上需要连续锁定的区域。这些小框是怎么算出来的暂且不在这里讨论。
如果有一只蚂蚁替我们沿着这组矩形框的边缘走的话,它会走出像这样一个边界线框出来:
这个不规则多边形框正好能把一开始的矩形框包围住,如下所示:
注意右上角看起来并没有包住,露出了一个角出来,不过没关系,我们有很多办法把这个包围圈弄得更精确,只是需要根据项目需求把握好精确度和效率之间的平衡。
下面这几篇文章对于理解这个问题本身以及它的实现难度很有帮助,建议仔细阅读:
多边形点集排序–针对凸多边形,按逆时针方向进行排序[转]:
http://www.cnblogs.com/xiexiaokui/p/3989053.html
几何算法:点集合构造简单多边形 - AndyZeng:
http://www.tuicool.com/articles/YJF3ye2
从二维点集重建平面形状-浅议凹包算法 - Jumanco&Hide:
http://www.tuicool.com/articles/iUvMjm
最后一篇文章的思路很好,我也尝试了他的代码,不过这种方法有一个限制,那就是这些点不能间隔非常不均匀。另外一个我无法采用这种方法的原因,就是因为它还是慢了。
于是乎,我用了下面的做法:
我把这些矩形框占据的区域划分出m*n的小方块,然后通过一系列的计算方法找出这些真正被Cover到的小方块,然后把这些小方块的中心点连接起来就形成了一个比较紧密的包围圈了。如果想要这个包围圈更贴切,那就再多算点,找到它相应边上的顶点。