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. jdk的配置(适用于win7、win8、win10)

    一.前言 win7和win8的jdk配置基本一样,所以本文以win7和win10来说明配置. 二.win7jdk环境配置(win8和这个一样) 首先安装好jdk,这里已安装好jdk7,本文采取的是jd ...

  2. 【LInux】查看Linux系统版本信息

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@S-CentOS home]# cat /proc/versionLinux version 2.6. ...

  3. Java 中变量初始化、子类和父类构造器调用的顺序

    先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int inde ...

  4. 2.对于所有对象都通用的方法_EJ

    第8条: 覆盖equals时请遵守通用约定 我们在覆盖equals方法时,必须遵守它的通用约定: 1.自反性.对于任何非null的引用值x,x.equals(x)必须返回true: 2.对称性.对于任 ...

  5. JavaScript字符串转换为数字

    今天在工作中碰到了一个问题,要将字符串转换为数字,否则函数不能正常工作, 特地研究了下,写了2个函数,供大家参考,代码如下: /** * 将字符串转换为数字 * @param {Object} str ...

  6. 《从零开始学习jQuery》:用jQuery操作元素的属性与样式

    元素属性和Dom属性简介 对于下面这样一个标签元素: <img id='img' src="1.jpg" alt='1' class="imgs"> ...

  7. tomcat闪退解决

    异常原因:拷贝了一个tomcat到新机器上,运行startup闪退 解决方法: 1.检查发现当前系统没有安装配置jdk,安装配置后运行仍然闪退 2.在tomcat的启动脚本和关闭脚本中指定JDK和to ...

  8. 生产环境下JVM调优参数的设置实例

    JVM基础:生产环境参数实例及分析 原始配置: -Xms128m -Xmx128m -XX:NewSize=64m -XX:PermSize=64m -XX:+UseConcMarkSweepGC - ...

  9. Android为TV端助力 史上最简单易懂的跨进程通讯(Messenger)!

    不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...

  10. WebStorm File Watchers配置将.less文件编译后的.css输出至指定目录

    Arguments:其实是命令行输入“lessc file.less file.css”后者指定路径 Output Paths to refresh:刷新changed后.css文件