1 给定三个不在同一直线上的三个点的坐标,确定圆的轨迹方程
2
3
4
下面是MATLAB中的函数文件
5 function[a,b,c]=ThreePointFitCircle(x,y,flag)
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 %Author By:Wacs5
8 %Date:20090813
9 %Email:[email protected]
10 %Function:三点确定一个圆
11 %Argument:x,y为三个点的横纵坐标(行向量或列向量)
12 %flag为是否画图表示
13 %返回的是:a,b为圆心。c为半径
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15 if(nargin
16 flag=0;
17 end
18
19 A=[x(1)-x(2),y(1)-y(2);x(3)-x(2),y(3)-y(2)];
20 B=[x(1)^2-x(2)^2+y(1)^2-y(2)^2;x(3)^2-x(2)^2+y(3)^2-y(2)^2];
21
22 ifdet(A)
23 error('三点趋于共线');
24 end
25
26 ab=A\B;
27 a=ab(1)/2;
28 b=ab(2)/2;
29
30 c2=(x(1)-a)^2+(y(1)-b)^2;
31 c=sqrt(c2);
32
33 %%以下是作图验证
34 if(flag)
35 seta=0:0.01:2*pi;
36 xx=a+c*cos(seta);%圆上的点的横坐标
37 yy=b+c*sin(seta);%圆上的点的纵坐标
38 plot(xx,yy,x,y,'*',a,b,'.')
39 title('三点拟合一个圆')
40 xlabel('x')
41 ylabel('y')
42 axisequal
43 end
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 %%m文件到此结束
46
47
48 例:
49 x=[1,3,2];
50 y=[1,5,2];
51 [a,b,c]=ThreePointFitCircle(x,y,1);%1为作图
52 disp(['圆的方程为:(x',sprintf('%+f',a),')^2+(y',sprintf('%+f',b),')^2=',...53 sprintf('%f',c),'^2'])
1 给定三个不在同一直线上的三个点的坐标,确定圆的轨迹方程
2
3
4
下面是MATLAB中的函数文件
5 function[a,b,c]=ThreePointFitCircle(x,y,flag)
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 %Author By:Wacs5
8 %Date:20090813
9 %Email:[email protected]
10 %Function:三点确定一个圆
11 %Argument:x,y为三个点的横纵坐标(行向量或列向量)
12 %flag为是否画图表示
13 %返回的是:a,b为圆心。c为半径
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15 if(nargin
16 flag=0;
17 end
18
19 A=[x(1)-x(2),y(1)-y(2);x(3)-x(2),y(3)-y(2)];
20 B=[x(1)^2-x(2)^2+y(1)^2-y(2)^2;x(3)^2-x(2)^2+y(3)^2-y(2)^2];
21
22 ifdet(A)
23 error('三点趋于共线');
24 end
25
26 ab=A\B;
27 a=ab(1)/2;
28 b=ab(2)/2;
29
30 c2=(x(1)-a)^2+(y(1)-b)^2;
31 c=sqrt(c2);
32
33 %%以下是作图验证
34 if(flag)
35 seta=0:0.01:2*pi;
36 xx=a+c*cos(seta);%圆上的点的横坐标
37 yy=b+c*sin(seta);%圆上的点的纵坐标
38 plot(xx,yy,x,y,'*',a,b,'.')
39 title('三点拟合一个圆')
40 xlabel('x')
41 ylabel('y')
42 axisequal
43 end
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 %%m文件到此结束
46
47
48 例:
49 x=[1,3,2];
50 y=[1,5,2];
51 [a,b,c]=ThreePointFitCircle(x,y,1);%1为作图
52 disp(['圆的方程为:(x',sprintf('%+f',a),')^2+(y',sprintf('%+f',b),')^2=',...53 sprintf('%f',c),'^2'])