前言

上个学期,在做项目的时候遇到了许多需要拟合的情况。但是在网上寻找资料的时候大多是建立在二维空间的,在三维坐标系下的拟合较乱。因此在下面列举一些我所用到的直线拟合和圆拟合。

空间圆拟合

在二维空间中对圆的拟合较为简单,由初中的几何知识我们可以知道,确定一个三角形至少需要三个不共线的点,因此确定一个三角形的外接圆至少可用三个点。我们不妨假设三个点坐标为P1(x1,y1,z1),P2(x2,y2,z2),P3(x3,y3,z3)。
圆方程的标准形式为:
(xi-x)2+(yi-y)2=R2 (1)
在三维空间坐标系中球的方程为:
(xi-x)2+(yi-y)2+(zi-z)2=R2 (2)
一个空间圆的产生可以看作过该圆心的一个球体,被一个经过该点的平面所截而得到。因此在求取空间圆的时候还应添加平面约束方程,以上述P1、P2、P3三个不共线的点可以确定一个平面,平面方程为:
AX+BY+CZ+D=0 (3)
求解方程(3)时注意技巧,常用两种方式,向量法或者待定系数法。若使用待定系数法则需平面方程的另一种形式,点法式为:
A(x-x0)+B(y-y0)+C(z-z0)=0 (4)
但是笔者建议使用向量的方式,更为简单方便,三点在同一个平面上,以P1为基点,寻找两条向量P12、P13;该平面方程的法向量为n=P12×P13(注:向量的叉乘)。在得到平面的法向量之后,带入其中一个点到方程(4)中即可得到平面约束方程。我们不妨将该约束方程系数设为A1、B1、C1、D1
在得到约束平面方程之后还须求解空间中圆的方程,在求解圆的方程时也有诸多方式,一种方式为将已知点带入到方程(2)中,利用待定系数法求解,我们仍参以P1为方程的基点,分别将P2,P3带入可以得到如下方程:
(x1-x)2+(y1-y)2+(z1-z)2=R2
(x2-x)2+(y2-y)2+(z2-z)2=R2
(x3-x)2+(y3-y)2+(z3-z)2=R2
整理后可以得到
A2=2(x2-x1) ,B2=2(y2-y1) ,C2=2(z2-z1),D2=x12+y12+z12-x22-y22-z22 (5)
A3=2(x3-x1) ,B3=2(y3-y1) ,C3=2(z3-z1),D3=x12+y12+z12-x32-y32-z32 (6)
建立系数矩阵:



求解上述方程即可得到空间圆心坐标(x,y,z)另一种方式求解可以利用三角形外接圆的性质求解,该方式较为简单,我们知道三角形外接圆的圆心可以由三角形两边的垂直平分线交点确定,因此,可以通过该方式求解空间圆,由上述已知P1、P2、P3三点所在的平面方程,我们通过向量P12、P13能够求得该平面的法向量n,将法向量n分别与P12、P13叉乘,即可求得垂直于P12、P13的向量,不妨设为n12,n13,通过P1、P2求得P1P2边中点M(mx,my,mz),同理求得P1P3边中点N(nx,ny,nz)。
由于我们所求的是空间直线的交点,因此我们还应知道空间直线方程,在上述计算中,已经得到了两条垂直平分线的方向向量:n12,n13,不妨设n12(l,m,n)、n13(p,q,r)。
则两条空间直线方程可以写为

t=x−mxl=y−mym=z−mznt = \frac{x-m_x}{l}=\frac{y-m_y}{m}=\frac{z-m_z}{n}t=lx−mx​​=my−my​​=nz−mz​​
s=x−nxp=y−nyq=z−nzrs = \frac{x-n_x}{p}=\frac{y-n_y}{q}=\frac{z-n_z}{r}s=px−nx​​=qy−ny​​=rz−nz​​
联立方程消去xyz,可得到下列方程(不唯一)
l∗t+mx=p∗s+nxl*t+m_x=p*s+n_xl∗t+mx​=p∗s+nx​
m∗t+my=q∗s+nym*t+m_y=q*s+n_ym∗t+my​=q∗s+ny​
改写为矩阵形式

求解上述矩阵即可得到t,s,由直线的点向式和参数式子之间的转化可以得到
{x=x0+l∗t,y=y0+m∗t,z=z0+n∗t\begin{cases}x=x_0+l*t , \\y=y_0+m*t , \\z=z_0+n*t \end{cases}⎩⎪⎨⎪⎧​x=x0​+l∗t,y=y0​+m∗t,z=z0​+n∗t​
将上述得到的t或者s和点带入即可得到垂直平分线交点坐标(x,y,z),即为空间三角形的外接圆圆心。

空间直线拟合(二乘法)

实现在二维平面的直线拟合较为简单,可以利用离散点(实际点)与拟合直线上的点(理想点)残差的平方和作为目标函数,求偏导计算最小值即可。另一种方式可以解多个点的矛盾方程,构建直线拟合经验公式:
y=a∗x+by=a*x+by=a∗x+b
在二维空间中,假设我们有一组二维点数据,其中每一个X均有一个Y与之对应,我们不妨构建矩阵

构建,矛盾方程求解即可。
在三维空间之中,我们也可以使用解矛盾方程的方式求解,空间直线的标准方程为
x−m0m=y−m0n=z−m0p\frac{x-m_0}{m}=\frac{y-m_0}{n}=\frac{z-m_0}{p}mx−m0​​=ny−m0​​=pz−m0​​
等价转化之后
x=mp(z−z0)+x0=k1z+b1x=\frac{m}{p}(z-z_0)+x_0=k_1z+b_1x=pm​(z−z0​)+x0​=k1​z+b1​
y=np(z−z0)+y0=k2z+b2y=\frac{n}{p}(z-z_0)+y_0=k_2z+b_2y=pn​(z−z0​)+y0​=k2​z+b2​
其中k1=mp,b1=x0−mpz0,k2=np,b2=y0−npz0k_1=\frac{m}{p},b_1=x_0-\frac{m}{p}z_0,k_2=\frac{n}{p},b_2=y_0-\frac{n}{p}z_0k1​=pm​,b1​=x0​−pm​z0​,k2​=pn​,b2​=y0​−pn​z0​
可以带入相应的点构件矛盾方程求解,或者利用残差的平方和求最小(笔者所用),构件目标函数如下:

将x,y带入上面的方程,并对b,k分别求偏导可得到如下方程组

在计算上述方程式,要注意将求和符号的分解,求解计算得出k1,b1,k2,b2,将值返回方程
{x=k1∗z+b1,y=k2∗z+b2\begin{cases} x=k_1*z+b1 , \\y=k_2*z+b2 \end{cases}{x=k1​∗z+b1,y=k2​∗z+b2​
该方程即为拟合的空间直线方程。

实现上述过程在opencv或者Matlab中均十分简单,在此就不贴上自己拙劣的代码了。。。。。。
如有错误,欢迎指正。

在空间三维坐标系下的圆、直线和平面拟合相关推荐

  1. MATLAB 绘制三维坐标系下的矩形框

    非常简单的绘制三维矩形框 首先 定义 1 点的位置坐标 obs = [220,200,150,200,140,100]; 其中[220,200,150]为1 点的坐标 其中[200,140,100] ...

  2. 三维扫描的精度验证方法之一——平面拟合(平面度)

    需要借助halcon软件 1.三维扫描仪扫描一个特别平的平面,如标定板.量块--等 2.将生成的三维点云数据对齐三维的轴线(三维点云的基本操作,不做详解,网上很多资料) 3.对齐后,查看点云在另一个方 ...

  3. 空间坐标系以及空间两三维坐标系转换矩阵解释

    空间坐标系以及空间两三维坐标系转换矩阵解释 因为工作的原因,需要进行不同坐标系的一个转换,在查阅了众多的网页之后,发现有用的没几个,而且众多都是抄的同一篇文章,而且都是罗列以下旋转的方式,几乎没有解释 ...

  4. 平行坐标系下采用CHT方法检测自然图像中的消失点(VanishingPoint)

    --------------------20210826更新-------------------- code和paper链接:https://pan.baidu.com/s/13RyRu0rg7Fh ...

  5. xyz三维坐标系怎么画?

    坐标系统是描述物质存在的空间位置(坐标)的参照系,通过定义特定基准及其参数形式来实现.通过课本上的介绍,我们知道坐标系分为平面坐标系和三维坐标系,平面坐标系是很好画的,一般都是直角坐标系,那么三维坐标 ...

  6. 三维立体坐标系 html5,几何画板绘制三维坐标系的操作方法

    最近很多网友表示自己不清楚几何画板如何绘制三维坐标系的操作,而本篇文章就来给大家讲解几何画板绘制三维坐标系的操作流程,大家都来一起学习吧. 几何画板绘制三维坐标系的操作方法 添加自定义工具.在广大版友 ...

  7. matlab中散点图的线性拟合_Matlab直线拟合和平面拟合

    利用 Matlab 实现直线和平面的拟合 2011-04-14 10:45:43| 分类: 算法思想 | 举报 | 字号 订阅 直线和平面拟合是很常用的两个算法,原理非常简单.但如果 matlab 不 ...

  8. python实现WGS-84坐标系下大地坐标和空间直角坐标系互转xyz2blh、blh2xyz,xyz2neu

    WGS-84坐标系下大地坐标blh和空间直角坐标系xyz互转,以及转站心坐标系neu # -*- coding: utf-8 -*- """ Created on Tue ...

  9. 不同坐标系下角速度_最伟大的数学发明,坐标系的诞生,是人类史上的方向盘...

    [想要了解更多精彩文章.视频,欢迎关注创鹏科学堂] 人生最大的意义,莫过于过得更方便:数学最大的意义,莫过于帮助人类过得更方便.几千年来,自从数学出现之后,它就一直以人类生活为导向,以宇宙探索为真理, ...

  10. 三维坐标系介绍与转换

    转载自:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/OnlineHelp/Flash3D/G_ProjectDocumentatio ...

最新文章

  1. android 事件传递机制
  2. sqlserver 指数_大盘指数大涨,牛市是否提前来了?
  3. 【面试经验分享】Java 面试中的那些潜规则
  4. python百度网盘_百度网盘突然大调整,网友炸了..
  5. Fast R-CNN: 我变快了,也变强了!
  6. Hive Cilent数据操作
  7. TeaPot 用webgl画茶壶(3) 环境纹理和skybox
  8. maven pc配置要求_《使命召唤:黑色行动5》公开测试PC配置要求:推荐GTX970+i7
  9. java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)
  10. 2017提高组D1T1 洛谷P3951 小凯的疑惑
  11. 记一次cpu指标异常的跟踪排查
  12. html语言中标记h1代表什么,HTML5中的标题标记(H1内部的P)中是否有段落元素是否有效?...
  13. [转]PhotoShop小技巧
  14. 【广东大学生网络攻防大赛-WriteUp(非官方)】Pwn | jmp_rsp
  15. 新生开始学c语言----c语言的概述
  16. MacOS 苹果 快捷键
  17. 第十七章 再论没有银弹
  18. 千瓜小红书直播达人、笔记排行榜
  19. 为高效学习神器 Anki 部署一个专属同步服务器
  20. java入门123 pdf下载_Java入门123:一个老鸟的Java学习心得 pdf_IT教程网

热门文章

  1. 实测分析免费建站软件有哪些?哪个最好?
  2. JConsole可视化工具介绍
  3. 五种对称加密算法总结
  4. Lower power design UPF 学习
  5. 十六进制转二进制c语言程序,c语言中十六进制转为二进制
  6. python+selenium+autoit实现自动百度识图
  7. html文本框显示当前时间,javascript  在文本框中显示系统当前日期(年-月-日 时:分:秒)...
  8. it论坛 计算机科学概论,(毕业论文) 计算机科学与技术专业 IT技术论坛.doc
  9. 【科普贴】MDIO接口详解
  10. 深度学习之美——M-P神经元模型