• 大小: 796B
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: Matlab
  • 标签: Matlab  三点  半径    

资源简介

已知三点,求过三点的圆的半径,和圆心坐标若三点在同一直线上或有两点重叠则返回覆盖三点的最小圆半径 开发环境 Matlab使用方法 circle([3 4],[7 8],[1 1])

资源截图

代码片段和文件信息

%已知三点,求过三点的圆的半径,和圆心坐标
%若三点在同一直线上或有两点重叠则返回覆盖三点的最小圆半径 
%开发环境 Matlab
%使用方法 circle([3 4][7 8][1 1])
%@author 孤星赶月
%QQ:450219927
%email:pfa2008@126.com
function R=circle(ABC)  %传入A、B、C三点
X=[A(1) B(1) C(1)];
Y=[A(2) B(2) C(2)];
if((Y(1)==Y(2)) & (Y(2)==Y(3)))  %纵坐标都相同时
   R=(max(X)-min(X))/2;
elseif((X(1)==X(2)) & (X(2)==X(3)))  %横坐标都相同时
    R=(max(Y)-min(Y))/2;
elseif(sum(A==B)==2)    %当A与B坐标相同时
    R=sqrt((A(1)-C(1))^2+(A(2)-C(2))^2)/2;
elseif(sum(A==C)==2)    %当A与C坐标相同时
    R=sqrt((A(1)-B(1))^2+(A(2)-B(2))^2)/2; 
elseif(sum(B==C)==2)    %当B与C坐标相同时
    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))    %斜率相等时求距离最远两点的一半
       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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1545  2008-05-28 21:45  circle.m

----------- ---------  ---------- -----  ----

                 1545                    1


评论

共有 条评论