資源簡介
已知三點(diǎn),求過三點(diǎn)的圓的半徑,和圓心坐標(biāo)若三點(diǎn)在同一直線上或有兩點(diǎn)重疊則返回覆蓋三點(diǎn)的最小圓半徑 開發(fā)環(huán)境 Matlab使用方法 circle([3 4],[7 8],[1 1])

代碼片段和文件信息
%已知三點(diǎn),求過三點(diǎn)的圓的半徑,和圓心坐標(biāo)
%若三點(diǎn)在同一直線上或有兩點(diǎn)重疊則返回覆蓋三點(diǎn)的最小圓半徑?
%開發(fā)環(huán)境?Matlab
%使用方法?circle([3?4][7?8][1?1])
%@author?孤星趕月
%QQ:450219927
%email:pfa2008@126.com
function?R=circle(ABC)??%傳入A、B、C三點(diǎn)
X=[A(1)?B(1)?C(1)];
Y=[A(2)?B(2)?C(2)];
if((Y(1)==Y(2))?&?(Y(2)==Y(3)))??%縱坐標(biāo)都相同時(shí)
???R=(max(X)-min(X))/2;
elseif((X(1)==X(2))?&?(X(2)==X(3)))??%橫坐標(biāo)都相同時(shí)
????R=(max(Y)-min(Y))/2;
elseif(sum(A==B)==2)????%當(dāng)A與B坐標(biāo)相同時(shí)
????R=sqrt((A(1)-C(1))^2+(A(2)-C(2))^2)/2;
elseif(sum(A==C)==2)????%當(dāng)A與C坐標(biāo)相同時(shí)
????R=sqrt((A(1)-B(1))^2+(A(2)-B(2))^2)/2;?
elseif(sum(B==C)==2)????%當(dāng)B與C坐標(biāo)相同時(shí)
????R=sqrt((A(1)-B(1))^2+(A(2)-B(2))^2)/2;
elseif((Y(1)~=Y(2))?&?(Y(2)~=Y(3)))
????k1=(X(2)-X(1))/(Y(2)-Y(1));
????k2=(X(3)-X(2))/(Y(3)-Y(2));
????k3=(X(1)-X(3))/(Y(1)-Y(3));
????if((k1==k2)?|?(k2==k3)?|?(k1==k3))????%斜率相等時(shí)求距離最遠(yuǎn)兩點(diǎn)的一半
???????R=max([sqrt((X(1)-X(2))^2+(Y(1)-Y(2))^2)sqrt((X(2)-X(3))^2+(Y(2)-Y(3))^2)sqrt((X(1)-X(3))^2+(Y(1)-Y(3))^2)])/2;
???else
????????R=NewCircle(XY);
???end
else????????????????%?(x-a)^2+(y-b)^2=r^2?
?????R=NewCircle(XY);
end
function?R=NewCircle(XY)
?????a=(((X(1)^2-X(2)^2+Y(1)^2-Y(2)^2)*(Y(2)-Y(3)))-((X(2)^2-X(3)^2+Y(2)^2-Y(3)^2)*(Y(1)-Y(2))))/(2*(X(1)-X(2))*(Y(2)-Y(3))-2*(X(2)-X(3))*(Y(1)-Y(2)))
?????b=(((X(1)^2-X(2)^2+Y(1)^2-Y(2)^2)*(X(2)-X(3)))-((X(2)^2-X(3)^2+Y(2)^2-Y(3)^2)*(X(1)-X(2))))/(2*(Y(1)-Y(2))*(X(2)-X(3))-2*(Y(2)-Y(3))*(X(1)-X(2)))????
?????R=sqrt((X(1)-a)^2+(Y(1)-b)^2);
end
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????1545??2008-05-28?21:45??circle.m
-----------?---------??----------?-----??----
?????????????????1545????????????????????1
評論
共有 條評論