码迷,mamicode.com
首页 > 其他好文 > 详细

[matlab] 10.最小覆盖圆

时间:2018-09-03 17:12:51      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:equal   分享   play   splay   spl   bubuko   pre   技术分享   gif   

技术分享图片
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
最小覆盖圆

技术分享图片

 

[matlab] 10.最小覆盖圆

标签:equal   分享   play   splay   spl   bubuko   pre   技术分享   gif   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!