[matlab] 10.最小覆盖圆

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

最小覆盖圆

原文地址:https://www.cnblogs.com/clemente/p/9579337.html

时间: 2024-10-09 06:45:23

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

Maple trees(最小覆盖圆)

Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 222 Accepted Submission(s): 79   Problem Description There are a lot of trees in HDU. Kiki want to surround all the trees with the minim

zoj 1450 Minimal Circle 最小覆盖圆

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=450 You are to write a program to find a circle which covers a set of points and has the minimal area. There will be no more than 100 points in one problem. 题意描述:找到一个最小圆能够包含到所有的二维坐标点. 算法

最小覆盖圆算法

最小圆覆盖,很经典的问题.题目大概是,平面上n个点,求一个半径最小的圆,能够覆盖所有的点. 算法有点难懂,于是讲讲我的理解. 如果要求一个最小覆盖圆,这个圆至少要由三个点确定.有一种算法就是任意取三个点作圆,然后判断距离圆心最远的点是否在圆内,若在,则完成:若不在则用最远点更新这个圆. 这里介绍的算法是,先任意选取两个点,以这两个点的连线为直径作圆.再以此判断剩余的点,看它们是否都在圆内(或圆上),如果都在,说明这个圆已经找到.如果没有都在:假设我们用的最开始的两个点为p[1],p[2],并且找

hdu2215(最小覆盖圆)

Maple trees Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1578    Accepted Submission(s): 488 Problem Description There are a lot of trees in HDU. Kiki want to surround all the trees with the

(hdu step 7.1.5)Maple trees(求凸包的最小覆盖圆的半径)

题目: Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 177 Accepted Submission(s): 63   Problem Description There are a lot of trees in HDU. Kiki want to surround all the trees with the m

最小覆盖圆

给出一堆点,求一个面积(半径)最小的圆,使得所有点都在它的内部或边界上. 随机增量法是这样的.... 先随机打乱点的顺序...... 然后,我们假设已经得到了点 $1,2,...,i$ 的最小覆盖圆,我们要求出点 $1,2,...,i,i+1$ 的最小覆盖圆. 怎么做? 考虑点 $i+1$ ,分两种情况: 1.如果点 $i+1$ 在点 $1,2,...,i$ 的最小覆盖圆里面或边界上,那么点 $1,2,...,i,i+1$ 的最小覆盖圆就是点 $1,2,...,i$ 的最小覆盖圆. 证明: 假设

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

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M

实力开发技巧:点跟圆的测试

点跟圆的测试 /* 设计一个类Point2D,用来表示二维平台中的某个点 1)         属性 a)      double _x b)     double _y 2)         方法 a)      属性相应的set和get方法 b)     设计一个对象方法同时设置x和y c)      设计一个对象方法计算跟其他点的距离 d)     设计一个类方法计算两个点之间的距离 3)         提示 a)      C语言的masth.h中有个函数:double pow(dou

平面点集的最小包围圆 hdu 3932

最小覆盖圆算法地址:http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066 平面点集的最小包围圆 1.           问题背景 考察固定在工作平台上的一直机械手,要捡起散落在不同位置的多个零件,并送到别的地方.那么,这只机械手的底座应该选在哪里呢?根据直觉,应该选在机械手需够着的那些位置的"中心".准确地讲,也就是包围这些点的那个最小圆的圆心----该位置的好处是,可使机械手的底座到它需要够着的那些点的最大距离最小化.于是可得如下问题:给