matlab中三点定圆,MATLAB三点确定一个圆

时间: 2023-10-04 admin IT培训

matlab中三点定圆,MATLAB三点确定一个圆

matlab中三点定圆,MATLAB三点确定一个圆

1 给定三个不在同一直线上的三个点的坐标,确定圆的轨迹方程

2

3

4 下面是MATLAB中的函数文件

5 function[a,b,c]=ThreePointFitCircle(x,y,flag)

6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

7 %Author By:Wacs5

8 %Date:20090813

9 %Email:wacs5@.html

10 %Function:三点确定一个圆

11 %Argument:x,y为三个点的横纵坐标(行向量或列向量)

12 %flag为是否画图表示

13 %返回的是:a,b为圆心。c为半径

14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

15 if(nargin<3)%如果有第三个参数,就画图

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 if det(A)<1e-6

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 axis equal

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'])