三维中圆的最小二乘拟合方法?

ljfblog 2009-10-27 07:17:20
工业测量之用,为了得到三维空间中圆空工件的圆心,在圆周打10个点:
(x[0]..x[9],y[0]..y[9],z[0]..z[9])
要据此推算出圆的半径r和圆心坐标(xo,yo,zo)
最小二乘法自然是首选。要问的是:

三维中的圆的方程是什么?
或者有没有别的曲线救国的方法?

希望得到帮助,编程之后一定帖出来大家讨论。

我找到的资料:
球的拟合方法:
http://buaagc.blog.163.com/blog/static/7278839420095115218810
...全文
1182 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
犬小犬 2011-10-17
  • 打赏
  • 举报
回复
本人现在在做这个,楼主最终结果怎么样啊,可以交流下不[Quote=引用楼主 ljfblog 的回复:]
工业测量之用,为了得到三维空间中圆空工件的圆心,在圆周打10个点:
(x[0]..x[9],y[0]..y[9],z[0]..z[9])
要据此推算出圆的半径r和圆心坐标(xo,yo,zo)
最小二乘法自然是首选。要问的是:

三维中的圆的方程是什么?
或者有没有别的曲线救国的方法?

希望得到帮助,编程之后一定帖出来大家讨论。

我找到的资料:
球的拟合方法:
http:……
[/Quote]
zhuoyue08 2011-03-20
  • 打赏
  • 举报
回复
受教了,可以用拟合球心的算法来拟合圆心不呢
colinpowell 2009-12-14
  • 打赏
  • 举报
回复
三位中应该有圆的,但在三坐标中一般Z=???处,圆的坐标公式!这样 就可以转化为二维平面公式了!
我的理解,不一定正确。
hdgsj 2009-10-29
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
donkey301 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
建议楼主这么做:
1。首先把三维圆二维化,在它所在的平面上建立直角坐标系,用那个座标系立圆的方程,然后再求出半径和圆心,然后在把这个二维平面上的原型转化为三维即可。
2。对于二维圆,使用x^2 +2axy + y^2 + cx +dy +e=0作为方程,这样未定参数a,b,c,d,e就是线性参数,可以利用最小二乘法求解。
其实只要你按照这个思路写成程序,其算法不会很复杂,所以你不需要所谓的“投机取巧”

[/Quote]
圆的方程没有xy项吧
donkey301 2009-10-29
  • 打赏
  • 举报
回复
3D坐标变换需要知道两个角度theta,phi,具体就查google吧,对你这个问题只要知道圆所在面的法向与z轴的夹角phi.
也就是先要求出所在面的法向。
设圆所在的三维平面方程为ax+by+cz+d = 0
用你的数据拟合出a,b,c,d
那么平面法向就是(a,b,c)
然后再像三楼说的坐标变换为二维问题
arong1234 2009-10-29
  • 打赏
  • 举报
回复
差不多吧,但是没法再具体了
[Quote=引用 4 楼 ljfblog 的回复:]
2楼:
不是圆面,是圆线。
3楼:
做法是可行的。有人也这么做出来过,你说的是不是坐标旋转?能不能再具体点?
[/Quote]
arong1234 2009-10-29
  • 打赏
  • 举报
回复
理论上可以,但是不知道误差怎样。
[Quote=引用 11 楼 ljfblog 的回复:]
想到一个方法求圆心,不知道可行不可行:
在x-y面上投影,然后拟合出一个椭圆(或线),得到椭圆圆心,x00,y00
在x-z面上投影,然后拟合出一个椭圆(或线),得到椭圆圆心,x01,z01
在y-z面上投影,然后拟合出一个椭圆(或线),得到椭圆回心,y02,z02
最后得到x0,y0,z0
[/Quote]
ljfblog 2009-10-29
  • 打赏
  • 举报
回复
想到一个方法求圆心,不知道可行不可行:
在x-y面上投影,然后拟合出一个椭圆(或线),得到椭圆圆心,x00,y00
在x-z面上投影,然后拟合出一个椭圆(或线),得到椭圆圆心,x01,z01
在y-z面上投影,然后拟合出一个椭圆(或线),得到椭圆回心,y02,z02
最后得到x0,y0,z0
arong1234 2009-10-29
  • 打赏
  • 举报
回复
你说的对,没有[Quote=引用 7 楼 donkey301 的回复:]
引用 3 楼 arong1234 的回复:
建议楼主这么做:
1。首先把三维圆二维化,在它所在的平面上建立直角坐标系,用那个座标系立圆的方程,然后再求出半径和圆心,然后在把这个二维平面上的原型转化为三维即可。
2。对于二维圆,使用x^2 +2axy + y^2 + cx +dy +e=0作为方程,这样未定参数a,b,c,d,e就是线性参数,可以利用最小二乘法求解。
其实只要你按照这个思路写成程序,其算法不会很复杂,所以你不需要所谓的“投机取巧”


圆的方程没有xy项吧
[/Quote]
huangbo0603 2009-10-29
  • 打赏
  • 举报
回复
学习学习!
ljfblog 2009-10-28
  • 打赏
  • 举报
回复
2楼:
不是圆面,是圆线。
3楼:
做法是可行的。有人也这么做出来过,你说的是不是坐标旋转?能不能再具体点?
arong1234 2009-10-27
  • 打赏
  • 举报
回复
建议楼主这么做:
1。首先把三维圆二维化,在它所在的平面上建立直角坐标系,用那个座标系立圆的方程,然后再求出半径和圆心,然后在把这个二维平面上的原型转化为三维即可。
2。对于二维圆,使用x^2 +2axy + y^2 + cx +dy +e=0作为方程,这样未定参数a,b,c,d,e就是线性参数,可以利用最小二乘法求解。
其实只要你按照这个思路写成程序,其算法不会很复杂,所以你不需要所谓的“投机取巧”
arong1234 2009-10-27
  • 打赏
  • 举报
回复
三维中圆的方程不容易有解析解,它应该是楼上给出的球面和一个平面的交集,也就是它是一个方程组。

至于最小二乘,它要求所有不定参数必须是一次的,否则从数学上不可能有最小二乘解!因此对于普通圆面而言,应该没有所谓的最小二乘解
zeroieme 2009-10-27
  • 打赏
  • 举报
回复
圆还是球
球是(x-x0)^2+(y-y0)^2+(r-r0)^2=r^2
圆是球方程与平面方程的解(相交线),用参数方程比较方便。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧