matlab 多点求圆心问题现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆

matlab 多点求圆心问题
现在我有一系列的x,y坐标值,比如1000组,plot出的点是一个圆形,我怎么求出这个圆的圆心,使这些点都在圆内?
杯子与水 1年前 已收到2个回答 举报

孤独的角斗士 幼苗

共回答了19个问题采纳率:89.5% 举报

得加分
因为我写得详细.
设圆心为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=Ab;
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');

1年前 追问

9

杯子与水 举报

这位朋友,你理解错我的意思了,数据是我已经测出来的,我需要求出能把这些数都包含进去的圆的圆心

举报 孤独的角斗士

那你半径取个无穷大, 圆心随意都可以.

杯子与水 举报

我的数据出的图,是一个近似圆,我需要求出圆心与原点之间的偏差是多少,圆心随意了我还不如直接眼睛目测了...

举报 孤独的角斗士

如果你想求包含1000个点的最小圆,估计得用最优化理论了.而且是非线性优化 求 sum(abs(r0-sqrt((x-x0)^2+(y-y0)^2))) 估计很麻烦的一个优化. 祝你好运. 只能帮到这了.

杯子与水 举报

好的,不管怎么样谢谢!

christhxj 幼苗

共回答了1个问题 举报

我也到同样的问题,想知道圆心和原点偏差多少,楼主解决了没有啊?还望指导

1年前

0
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.041 s. - webmaster@yulucn.com