1. 程式人生 > >[matlab] 10.最小覆蓋圓

[matlab] 10.最小覆蓋圓

closed one The 賦值 event 技術分享 inf alt mat

技術分享圖片
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.最小覆蓋圓