MATLAB新手,最近要写一个程序,参考了多个百度的结果以及https://blog.csdn.net/libing403/article/details/78234640?utm_source=blogxgwz6这篇文章提供的方法,自己想了一个办法,目前测试过的点都成功了,所以想给大家分享一下。欢迎大家指出错误和不足(๑╹◡╹)ノ"""。
%判断是圆还是圆弧
if get(handles.rad_round_1,'value')
round_flag=1;
elseif get(handles.rad_round_2,'value')
round_flag=2;
else
warndlg('请选择圆或圆弧^-^','提示','modal')
end
%输入三个点的坐标
%%获取三点所在圆圆心及半径
x0=[x1 x2 x3]';
y0=[y1 y2 y3]';
TR=triangulation([1,2,3],x0,y0); %表示成三角网格
[D,r]=circumcenter(TR); %利用内置函数求外接圆心和半径
a=D(1);b=D(2); %圆心(a,b) 半径 r
%开始生成
switch(round_flag)
case 1 %根据圆心半径生成圆
deg=0:0.01:360;
rx=a+r*cos(deg);
ry=b+r*sin(deg);
plot(a,b,'*r');hold on;
plot(x0,y0,'ro');hold on;
plot(rx,ry,'g');hold on;
case 2 %根据圆心半径生成圆弧
A=[x1 y1 0];B=[x2 y2 0];C=[x3 y3 0];
AB=B-A;BC=C-B;
dis=cross(AB,BC);
if dis(3)==0
warndlg('三点共线,请重新输入坐标^-^','提示','modal')
else
e=c_theta(x1,y1,a,b);
f=c_theta(x2,y2,a,b);
g=c_theta(x3,y3,a,b);
if max(max(e,f),g)==e
if f>g
deg=e:-0.1:g;
else
deg=e:0.1:(360+g);
end
elseif max(max(e,f),g)==f
if e>g
deg=e:0.1:(g+360);
else
deg=e:-0.1:(g-360);
end
elseif max(max(e,f),g)==g
if e>f
deg=e:-0.1:(g-360);
else
deg=e:0.1:g;
end
end
rx=a+r*cosd(deg);
ry=b+r*sind(deg);
plot(a,b,'*r');hold on;
plot(x0,y0,'ro');hold on;
plot(rx,ry,'g');hold on;
end
end
set(gca,'XAxisLocation','origin');
set(gca,'YAxisLocation','origin');
axis equal
hold on;grid on;
%判断输入点的角度
function theta=c_theta(x,y,a,b)
theta=atand((y-b)/(x-a));
if x >= a
if y >= b
theta=theta; %第一象限
elseif y= b
theta=theta+180; %第二象限
elseif y