[matlab] 10.最小覆蓋圓
阿新 • • 發佈:2018-09-03
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.最小覆蓋圓