[matlab] 10.最小覆盖圆

Posted clemente

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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
最小覆盖圆

技术分享图片

 

以上是关于[matlab] 10.最小覆盖圆的主要内容,如果未能解决你的问题,请参考以下文章

Java案例:最小覆盖圆问题

Java案例:最小覆盖圆问题

模板最小圆覆盖

P1742 最小圆覆盖

最小圆覆盖(随机增量法)

最小圆覆盖(随机增量法)