matlab 多点求圆心问题现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆心,使这些点都在圆内?
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/29 10:17:41
matlab 多点求圆心问题现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆心,使这些点都在圆内?
matlab 多点求圆心问题
现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆心,使这些点都在圆内?
matlab 多点求圆心问题现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆心,使这些点都在圆内?
得加分
因为我写得详细.
设圆心为x0,y0,半径为r
圆的方程为:
(x-x0)^2+(y-y0)^2=r^2
整理得:
x*x0+y*y0+(r^2-x0^2-y0^2)/2=(x^2+y^2)/2
令z0=(r^2-x0^2-y0^2)/2
则
x*x0+y*y0+z0=(x^2+y^2)/2
则它是关于x0,y0,z0的三元一次方程组(方程的个数为1000个,你的数据)
下面是代码:
我自己设了圆心为(1.1,2,8),半径为3.2,计算出1000个x,y坐标,当然我会加一些随机数进去,看拟合的效果.
theta=2*pi*rand(1000,1);
x=1.1+3.2*cos(theta)+0.2*rand(size(theta));
y=2.8+3.2*sin(theta)+0.1*rand(size(theta));
plot(x,y,'.')
axis equal
hold on
A=[x(:),y(:),ones(size(x(:)))];
b=(x(:).^2+y(:).^2)/2;
x0y0z0=A\b;
x0=x0y0z0(1)
y0=x0y0z0(2)
r=sqrt(x0y0z0(3)*2+x0^2+y0^2)
alpha=linspace(0,2*pi,200);
plot(x0+r*cos(alpha),y0+r*sin(alpha),'r');
我也到同样的问题,想知道圆心和原点偏差多少,楼主解决了没有啊?还望指导