|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 a J( W/ Z0 R8 q! X+ Y B6 TMATLAB源程序代码分享:MATLAB求解拟合圆的圆心和半径
0 N7 U3 ?- a3 i
8 i. e1 H% k, z! l/ T! i4 W' Z* n8 \%% 读入离散点的坐标
i( j. P2 d; Wclear;clc;close all
0 i+ L; T6 h0 d" [. ddata=xlsread('xy.xlsx'); % 读入 excel 文件中的数据; j* _6 r+ R! Q' N' O
x=data(:,1); % 第一列为 x 坐标
4 C3 p* Z/ e: p1 Gy=data(:,2); % 第二列为 y 坐标8 `+ ~2 l( X5 \0 Q
scatter(x,y) % 绘制离散点的分布图
- L f1 U- A0 O/ y/ M/ Z! kaxis equal % x 轴和 y 轴等比例输出' m4 m: t! c+ O+ e7 V1 V& i8 ]
hold on
) x( w* O6 P+ z1 T7 d
4 Y. F# z+ ~/ _, Q5 F H% ~2 u%% 使用线性拟合的方法, 计算拟合圆的圆心坐标和半径
& p5 D0 q+ M( _7 u7 E( v, FA=[x y ones(length(x),1)]; % 得到矩阵 A9 ^4 E+ K, Q2 D: J* _1 f
B=-(x.^2+y.^2); % 得到矩阵 B p$ [. g Z/ V! l3 V# y0 T) r
abc=A\B; % 得到 a b c
" l w8 k4 f3 w+ ya=abc(1);
1 m$ Y8 r" \3 o! F7 t8 ]b=abc(2);
7 p# W+ R4 n4 {. X1 u7 wc=abc(3);
3 H' L' o6 E) _0 b* X1 e. g
7 d" z% G. a# d/ E) y% 根据a b c 求出圆心坐标和半径
( k, m- n; m7 Yx0=-0.5*a;
3 F& N9 m$ y- I. I6 A! x( a0 U. G3 Cy0=-0.5*b;
( G& ~* Z6 _ w1 @2 T% dr=sqrt(x0^2+y0^2-c);
# `6 g# N# Z1 v; q9 ~6 [: p
, l l/ Y, b' z$ j2 \%% 根据计算得到的圆心坐标和半径, 绘制拟合圆
( S; h9 U6 U1 j+ [8 Rk=1;% Q3 p. R( k2 @) k+ P
for theta=0:pi/180:2*pi %角度从 0 到 2*pi
V* Z. b" ?0 k8 Y- k; I! f X(k)=r*cos(theta)+x0; %圆上的横坐标
0 M) S1 z5 G$ N/ ? Y(k)=r*sin(theta)+y0; %圆上的纵坐标
4 b, u* b- d/ p3 x9 O: g* [. a k=k+1;8 d/ H/ b3 @5 G, t% |) ~" O
end
& j G' h; G4 w8 `) \/ b! Qplot(X,Y,'r') %绘制圆7 f+ t: [6 A0 M) Q/ L
scatter(x0,y0,'r*') %标示圆心 |
|