clear all;
close all;
clc; n=100;
p=rand(n,2); p1=p(1,:); %取第一行的值 P1点
p2=p(2,:); %取第二行的值 P2点
r=sqrt((p1(1)-p2(1))^2+(p1(2)-p2(2))^2)/2; %求两点半径
cenp=(p1+p2)/2; %求两点中点 for i=3:n
newp=p(i,:); %从第三行开始 储存新的点
d=sqrt((cenp(1)-newp(1))^2+(cenp(2)-newp(2))^2); %圆心到新的点的距离为d
if d>r %当距离大于现有半径的时候,赋值更大的半径
r=(r+d)/2;
cenp=cenp+(d-r)/d*(newp-cenp); %按比例位移中心
end
end hold on;
plot(p(:,1),p(:,2),'rs');
x0=cenp(1); %圆心横坐标
y0=cenp(2);
theta=0:0.01:2*pi;
x=x0+r*cos(theta);
y=y0+r*sin(theta);
plot(x,y,'k-',x0,y0,'k.');
axis equal

最小覆盖圆

最小覆盖矩形可能是倾斜的。

求法如下:

1.求多边形凸包,这里凸包直接调用系统函数了。

2.将凸包两个相邻的点连线作为矩形一条边。

3.寻找凸包上距离已得到的边最远的点,过该点做平行线,得到矩形第二条边。

4.将凸包上点向已求得的边投影,求得投影点相距最远的两个点,过该两点做直线,作为矩形另外两条边。

5.遍历凸包所有相邻两点从新运行2~4,将面积最小的矩形作为求得结果。

通常情况下,矩形会过随机点中的5个点。

clear all;close all;clc;

n=30;
p=rand(n,2); ind=convhull(p(:,1),p(:,2));
l=length(ind); hull=p(ind,:); %随机点凸包 area=inf;
for i=2:l
p1=hull(i-1,:); %凸包上两个点
p2=hull(i,:); k1=(p1(2)-p2(2))/(p1(1)-p2(1)); %连接两点的直线,作为矩形的一条边
b1=p1(2)-k1*p1(1); d=abs(hull(:,1)*k1-hull(:,2)+b1)/sqrt(k1^2+1); %所有凸包上的点到k1,b1直线的距离 [h ind]=max(d); %得到距离最大的点距离,即为高,同时得到该点坐标
b2=hull(ind,2)-k1*hull(ind,1); %相对k1,b1直线相对的另一条平行边k1,b2; k2=-1/k1; %以求得的直线的垂线斜率 b=hull(:,2)-k2*hull(:,1); %过凸包所有点构成的k2,b直线系
x1=-(b1-b)/(k1-k2); %凸包上所有点在已求得的第一条边的投影
y1=-(-b*k1+b1*k2)/(k1-k2); x2=-(b2-b)/(k1-k2); %凸包上所有点在已求得的第二条边的投影
y2=-(-b*k1+b2*k2)/(k1-k2); [junk indmax1]=max(x1); %投影在第一条边上x方向最大与最小值
[junk indmin1]=min(x1); [junk indmax2]=max(x2); %投影在第二条边上x方向最大与最小值
[junk indmin2]=min(x2); w=sqrt((x1(indmax1)-x1(indmin1))^2+(y1(indmax1)-y1(indmin1))^2); %矩形的宽 if area>=h*w %使面积最小
area=h*w;
pbar=[x1(indmax1) y1(indmax1); %矩形四个角点
x2(indmax2) y2(indmax2);
x2(indmin2) y2(indmin2);
x1(indmin1) y1(indmin1)];
end
end
pbar(5,:)=pbar(1,:); hold on;
plot(p(:,1),p(:,2),'.');
plot(pbar(:,1),pbar(:,2),'r')
axis equal;

最小覆盖矩形

[matlab] 10.最小覆盖的更多相关文章

  1. Matlab命令——目录操作(windows&Linux)

    Matlab命令——目录操作(windows&Linux) 1. filesep用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/).有时此命令结合ispc命令使 ...

  2. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  3. jet flow in a combustion chamber

    Table of Contents 1. contacts 2. Paper digest 2.1. LES vs. RANS 2.2. Dynamics of Transient Fuel Inje ...

  4. 《DSP using MATLAB》Problem 7.10

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  5. 《DSP using MATLAB》Problem 6.10

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  6. 《DSP using MATLAB》Problem 5.10

    代码: 第1小题: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Out ...

  7. 《DSP using MATLAB》Problem 4.10

    今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...

  8. 《DSP using MATLAB》Problem 3.10

    用到了三角窗脉冲序列,各小题的DTFT就不写公式了,直接画图(这里只贴长度M=10的情况). 1. 代码: %% ------------------------------------------- ...

  9. 《DSP using MATLAB》Problem 2.10

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

随机推荐

  1. Android Studio 学习(三) 广播

    动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...

  2. Dev、GridControl的模糊查询

    /// <summary> /// 设置girid为每一列都模糊搜索 /// </summary> /// <param name="gdv"> ...

  3. 浅谈pc和移动端的响应式

    身为一个前端攻城狮,是不是经常遇到各种各样的响应式问题?下面我们来说一下: 1.响应式跟自适应有什么区别? 有些人可能还不知道响应式跟自适应的区别,甚至认为他们是同一个东西,其实不是的. 自适应是最早 ...

  4. Android为TV端助力 转载:内存泄露与内存溢出的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...

  5. 使用混淆ProGuard压缩代码和资源/减少方法数量

    ProGuard介绍 ProGuard是一个Java类文件压缩器,优化器,混淆器和预先文件验证器. 压缩步骤检测和删除未使用的类,字段,方法和属性. 优化步骤分析和优化方法的字节码. 混淆步骤使用短无 ...

  6. day15(PYTHON)推导式{生成器,字典,列表,集合}

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...

  7. python base64 decode incorrect padding错误解决方法

    个人觉得原因应该是不同的语言/base64库编码规则不太统一的问题. python中base64串的长度需为4的整数倍,故对长度不为4整数倍的base64串需要用"='补足 如下代码: da ...

  8. tkinter进阶版——ttk

    很长的一段时间里,我都是用tkinter进行GUI设计的,还写过一篇<tkinter模块常用参数>. 但后来慢慢地觉得,这个tkinter真的是有点丑啊. 于是,找到了现在的ttk. tt ...

  9. Unity端游无法下载资源问题

    问题:用Unity编辑器Build的游戏(MyGame.exe)无法下载服务器上资源文件: starting www download: http://10.123.102.142/resources ...

  10. 网站流量统计PV&UV

    统计网站pv和uv PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量. 对于广告主,PV值可预期它可以带来多少广告收入.一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访 ...