用matlab实现打开一个叫“lkzb.txt"的txt文件,读入里面的数据,并且以数据画拟合圆,并求出圆心和半径。

如题所述

% lkzb.txt 里至少应有两行或列数据,表示x和y的坐标。
% 设有两列:
data = load('lkzb.txt');
x = data(:,1);
y = data(:,2);
[center_x center_y Radius] = CircleFit(x,y);

% 下面的子函数可以进行圆拟合
function CirclePara = CircleFit(x,y)
N = length(x); % length(y)
x1 = 0; x2 = 0; x3 = 0;
y1 = 0; y2 = 0; y3 = 0;
x1y1 = 0;
x1y2 = 0;
x2y1 = 0;
for i = 1:N
x1 = x1 + x(i);
x2 = x2 + x(i)^2;
x3 = x3 + x(i)^3;
y1 = y1 + y(i);
y2 = y2 + y(i)^2;
y3 = y3 + y(i)^3;
x1y1 = x1y1 + x(i)*y(i);
x1y2 = x1y2 + x(i)*y(i)^2;
x2y1 = x2y1 + x(i)^2*y(i);
end
C = N*x2 - x1^2;
D = N*x1y1 - x1*y1;
E = N*x3 + N*x1y2 - (x2+y2)*x1;
G = N*y2 - y1^2;
H = N*x2y1 + N*y3 - (x2+y2)*y1;
a = (H*D-E*G)/(C*G-D*D);
b = (H*C-E*D)/(D*D-G*C);
c = -(a*x1 + b*y1 + x2 + y2)/N;
A = a/(-2);
B = b/(-2);
R = sqrt(a*a+b*b-4*c)/2;
theta = linspace(0,2*pi,1000);
X = R*cos(theta);
Y = R*sin(theta);
CirclePara = [A B R];
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜