EDA365电子论坛网
标题:
MATLAB源程序代码分享:MATLAB求解拟合圆的圆心和半径
[打印本页]
作者:
House
时间:
2020-3-18 09:41
标题:
MATLAB源程序代码分享:MATLAB求解拟合圆的圆心和半径
( Z# ~& a, a$ C
MATLAB源程序代码分享:MATLAB求解拟合圆的圆心和半径
- I7 u8 M1 `3 B4 d( E5 a
* u5 n# W; a( d+ e" r
%% 读入离散点的坐标
- Z& k% W; O$ h( c. u/ Y" g
clear;clc;close all
0 w( `& q+ u0 i- V( K( s- ]
data=xlsread('xy.xlsx'); % 读入 excel 文件中的数据
( Y4 @2 q- v; Q8 d
x=data(:,1); % 第一列为 x 坐标
9 j4 j# _- _6 n: n
y=data(:,2); % 第二列为 y 坐标
- g( Q2 E9 N: d& d4 {8 ]% \4 u
scatter(x,y) % 绘制离散点的分布图
( s6 H8 d1 b2 g- w$ h
axis equal % x 轴和 y 轴等比例输出
7 a$ G+ ^- C2 b4 S; Y2 j
hold on
- E$ y7 R+ A+ N' F* R# I
* d0 m" @8 M8 }7 q4 z9 k9 h
%% 使用线性拟合的方法, 计算拟合圆的圆心坐标和半径
7 w4 Y" n6 E' ?
A=[x y ones(length(x),1)]; % 得到矩阵 A
! Z/ C& T0 d' m/ u: o" k) _$ O
B=-(x.^2+y.^2); % 得到矩阵 B
& p) _3 ^& k! U. \
abc=A\B; % 得到 a b c
: M3 S. @' y9 s: Z) ?( G
a=abc(1);
, |: x# u5 b5 m! J8 a
b=abc(2);
* [8 q3 ~0 j/ v
c=abc(3);
, f1 b! d6 ?7 z2 e5 v& a
! [6 {& i$ i# _% V
% 根据a b c 求出圆心坐标和半径
0 y% p) P0 W) z& ]$ a: R' ^
x0=-0.5*a;
# s+ W& `( g9 ]/ Y
y0=-0.5*b;
: O( ~7 |+ e) N5 W1 w
r=sqrt(x0^2+y0^2-c);
. [+ x4 \" h* v$ }1 I) N* O0 S2 C
5 ~6 ~6 F4 X; y
%% 根据计算得到的圆心坐标和半径, 绘制拟合圆
- F! |) }% p; R& d* Z: a
k=1;
6 B" g( }( _2 J2 H
for theta=0:pi/180:2*pi %角度从 0 到 2*pi
3 a$ S& d. K; m/ y6 b; q
X(k)=r*cos(theta)+x0; %圆上的横坐标
9 k2 j; a9 ]1 i: k1 b3 C
Y(k)=r*sin(theta)+y0; %圆上的纵坐标
& O# b1 n! Y# B" L
k=k+1;
, j' j$ s I/ k6 e% c0 ?
end
8 R& z s h7 y- D( K
plot(X,Y,'r') %绘制圆
8 |. c" d/ e% k3 J9 I. s z
scatter(x0,y0,'r*') %标示圆心
作者:
gaoxings
时间:
2020-3-19 18:21
MATLAB求解拟合圆的圆心和半径。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2