本文要解决如下问题:给定一些三维空间点,要求用直线拟合这些点,求出直线方程。

一、直线方程的三种表示方法:

参考:空间直线的点向式方程 - 百度文库 (baidu.com)

空间直线方程 - 百度文库 (baidu.com)

1.一般式:

它实际上表示,直线是两个平面的交线,因此可以由两个平面方程得到,即:

2.点向式(标准方程):

(m, n, p) 为直线方程的方向向量;(x0, y0, z0) 为直线上的一个点。需要注意的是(x-x0, y-y0, z-z0)的方向和方向向量是平行的,也因此推导出了上面的方程。

3.参数方程:

由此就可以得到:

二、利用最小二乘,由三维空间数据点拟合直线方程:

参考文献:《三维空间点中基于最小二乘法的分段直线拟合方法》 薛丽红,2015年7月,齐齐哈尔学报,第31卷第4期

相应链接:https://www.doc88.com/p-8189740853644.html

联立上面的方程,就可以得到:

公式中,划红线的2,是该篇文章的笔误,应该是n, n表示数据点的个数。

由此我们就可以得到k1, b1, k2, b2。如果想要把它转换成空间直线标准方程,可以先任意取一个z0值,根据k1,b1,k2,b2 就可以求出x0, y0, 然后任意取一个p值,根据k1, k2, 就可以求出m, n值,代入到标准方程即可(所以,标准方程不是唯一的,需要从标准方程的定义去理解为什么不是唯一的)。

三、python 代码实现:

##  由空间3维点拟合出一条直线
def linear_fitting_3D_points(points):'''用直线拟合三维空间数据点。参考https://www.doc88.com/p-8189740853644.html  《三维空间点中基于最小二乘法的分段直线拟合方法》 薛丽红,2015年7月,齐齐哈尔学报,第31卷第4期注意; 文中的公式推导有误,k1,b1,k2,b2中的系数2, 应该为n,n表示数据点的个数。直线方程可以转化成如下形式(具体见上面的文献):x = k1 * z + b1y = k2 * z + b2Input:points    ---   List, 三维空间数据点,例如:[[2,3,48],[4,5,50],[5,7,51]]返回值是公式系数 k1, b1, k2, b2'''#表示矩阵中的值Sum_X=0.0Sum_Y=0.0Sum_Z=0.0Sum_XZ=0.0Sum_YZ=0.0Sum_Z2=0.0for i in range(0,len(points)):xi=points[i][0]yi=points[i][1]zi=points[i][2]Sum_X = Sum_X + xiSum_Y = Sum_Y + yiSum_Z = Sum_Z + ziSum_XZ = Sum_XZ + xi*ziSum_YZ = Sum_YZ + yi*ziSum_Z2 = Sum_Z2 + zi**2n = len(points) # 点数den = n*Sum_Z2 - Sum_Z * Sum_Z # 公式分母k1 = (n*Sum_XZ - Sum_X * Sum_Z)/ denb1 = (Sum_X - k1 * Sum_Z)/nk2 = (n*Sum_YZ - Sum_Y * Sum_Z)/ denb2 = (Sum_Y - k2 * Sum_Z)/nreturn k1, b1, k2, b2

如有错误,请指正。谢谢!

三维空间点的直线方程拟合(最小二乘法)相关推荐

  1. 趋势检验方法(一)直线方程拟合

    直线方程拟合 a基本原理: 设一条直线为y=kx+b,使用最小二乘法(least square method)来拟合出最优的k(斜率). 设定一个阈值k0(k0>0),若|k|>k0则认为 ...

  2. labview最小二乘法拟合曲线报表生成,波形拟合最小二乘法

    labview最小二乘法拟合曲线报表生成,波形拟合最小二乘法 ID:18158593057297571

  3. 趋势预测方法(一) 多项式拟合(最小二乘法)_函数拟合

    多项式拟合(最小二乘法) a基本原理: b拟合函数原理: c方法优缺点: 优点: 思想简单,实现容易.建模迅速,对于小数据量.简单的关系很有效. 解决回归问题,拥有很好的解释性. 是很多非线性模型的基 ...

  4. 三维空间点云拟合问题

    前言 此代码为三维空间内点云数据拟合圆的计算过程,主要求解拟合后的圆心.半径及圆法向量,点云数据来源于激光跟踪仪的采集.可应用于工业机器人单关节运行速度测试.结构杆长测试等. 代码 clear;clc ...

  5. 三维空间点进行空间平面拟合原理及MATLAB和C++代码实现

    平面拟合原理参考网页:https://blog.csdn.net/duiwangxiaomi/article/details/89246715 MATLAB实现参考网页:https://blog.cs ...

  6. python 最小二乘法三维坐标拟合平面_matlab三维曲面进行平面拟合,利用最小二乘法...

    展开全部 可以直接2113使用matlab的曲面拟5261合工具箱,但是平面4102拟合的效果一1653般 1.在命令窗口内输入待拟合容的数据>> x=[11.4,11.4,11.4,11 ...

  7. Halcon小技巧:二维平面根据两个点确定方向向量+三维空间点确定姿态

    一.二维平面确定法向向量 生成两个点,这个算子在Halcon三维中常用. 讲点连接成线 dev_set_line_width(2)*画点dev_set_color('red')gen_cross_co ...

  8. [数值分析]离散数据拟合-最小二乘法

    最小二乘法算法 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为 ...

  9. 三维空间点,面,线的关系总结

    目录 1. 空间直线方程 1.1 两点式(两个空间点确定一条直线) 1.2 一般式(两个平面确定一条直线) 1.3 点斜式 2. 空间平面方程 2.1 一般式 2.2 点法式 2.3 截距式 3. 距 ...

最新文章

  1. 浅谈tidb事务与MySQL事务之间的区别
  2. JS callee 的例子
  3. Hadoop YARN
  4. 反思找开瓶器的过程:预判选择方法的执行结果 充分主动积极的沟通
  5. [github] - git使用小结(分支拉取、版本回退)
  6. Java Servlet API中的forward()方法和redirect()方法的区别
  7. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
  8. iphone 2x 3x_iPhone X的未来:从现实到荒诞
  9. sql union 和 union all
  10. 如何实现SpingAOP?及其实现过程分析
  11. Rational Rose 2007安装使用教程
  12. 动态代理实例——增强Waiter接口
  13. DIV+CSS样式---网易盖楼
  14. 应该怎么提升4G工业路由器的无线信号?
  15. 无线网络突然连不上了
  16. 夜战II-程序猿的骚文
  17. metis 多线程图划分论文笔记
  18. 树莓派用transmission搭建bt下载机
  19. git-lfs使用笔记
  20. Oracle表空间及数据文件操作

热门文章

  1. 沃尔玛申请了个物联网专利 能做到“补货”自动下单
  2. Python的星号(*)和双星号(**)用法
  3. 2020年最新世界地图_一点都不能错!快收藏,2020年新版地图来了!
  4. 小程序实现数据双向绑定
  5. 独孤思维:赚钱目标,以始为终
  6. mysql id问题_MySQL分表自增ID问题的解决方法
  7. 关于Spring的简介
  8. Xcode5.1如何关闭ARC
  9. 2015年恢复性运动
  10. AIGC - Stable Diffusion 学习踩坑实录总结