又是计算几何,我感觉最近对计算几何上瘾了。
当然,工作上也会用一些,不过工作上一般直接调用boost的geometry库。
上次写过最小包围圆,这次是最小包围矩形,要比最小包围圆复杂些。
最小包围矩形可不一定是个直立的矩形,也可能像下图一样是倾斜的。
求法如下:
1.求多边形凸包,这里凸包直接调用系统函数了,细节可以参考这里,虽然当时写的不怎么样。
2.将凸包两个相邻的点连线作为矩形一条边。
3.寻找凸包上距离已得到的边最远的点,过该点做平行线,得到矩形第二条边。
4.将凸包上点向已求得的边投影,求得投影点相距最远的两个点,过该两点做直线,作为矩形另外两条边。
5.遍历凸包所有相邻两点从新运行2~4,将面积最小的矩形作为求得结果。
通常情况下,矩形会过随机点中的5个点。
结果如下:
matlab代码如下:
clear all;close all;clc;
n=30;
p=rand(n,2);
ind=convhull(p(:,1),p(:,