注意:本文是matlab代码
%% 拟合空间直线
%% 输入数据
lineData=[2222.015, 477.055, -423.390
1488.935, 470.907, -500.077
1479.015, 470.803, -501.172
1608.675, 471.967,-487.638
1747.542, 473.029, -473.021
1754.288, 473.099, -472.336
1895.950, 474.346, -457.462
1906.257, 474.470, -456.470
1674.206, 472.473, -480.760
1366.207, 469.845, -512.952
1261.768, 468.974, -523.886
];  %数据点坐标
%% 画散点图
x=lineData(:,1);
y=lineData(:,2);
z=lineData(:,3);
scatter3(x, y, z,'filled')  %散点图函数,'filled'表示画实心点
hold on;    %画了一幅图,再画另一幅图时,原来的图还在,与新图共存
%% 计算平均值(拟合的直线必过所有坐标的算数平均值)
xyz0(1)=mean(x);
xyz0(2)=mean(y);
xyz0(3)=mean(z);%拟合点坐标
%% 奇异值分解计算方向向量(第一种方法)
% 协方差矩阵奇异变换
% 所得直线的方向实际上与最大奇异值对应的奇异向量相同
% centeredLine=bsxfun(@minus,lineData,xyz0);
% [U,S,V]=svd(centeredLine);
% direction=V(:,1);%方向向量%% 最小二乘计算方向向量(第二种方法)
A=0;
B=0;
C=0;
D=0;
E=0;
F=0;
for i=1:11
A=A+x(i)*z(i);
B=B+x(i);
C=C+y(i)*z(i);
D=D+y(i);
E=E+z(i)*z(i);
F=F+z(i);
end
Tt=[A,B;C,D]*[E,F;F,11]^-1;
R=sqrt(Tt(1)^2+Tt(2)^2+1);
direction(1)=Tt(1)/R;
direction(2)=Tt(2)/R;
direction(3)=1/R;
direction=direction';%方向向量
%% 画图
t=-100:0.1:100;
xx=xyz0(1)+direction(1)*t;
yy=xyz0(2)+direction(2)*t;
zz=xyz0(3)+direction(3)*t;
plot3(xx,yy,zz)%% 计算点到直线的距离
for i=1:11
T(i)=(-direction(1)*xyz0(1)+direction(1)*lineData(i,1)-direction(2)*xyz0(2)+direction(2)*lineData(i,2)-direction(3)*xyz0(3)+direction(3)*lineData(i,3))/(direction(1)^2+direction(2)^2+direction(3)^2);
xx1=xyz0(1)+direction(1)*T(i);
yy1=xyz0(2)+direction(2)*T(i);
zz1=xyz0(3)+direction(3)*T(i);
D(i)=sqrt((xx1-lineData(i,1))^2+(yy1-lineData(i,2))^2+(zz1-lineData(i,3))^2);
end

空间三维直线拟合matlab代码相关推荐

  1. matlab数值分析拟合实例,数值分析函数拟合matlab代码.doc

    数值分析函数拟合matlab代码.doc 第一题MATLAB代码用SPLINE作图XI0204060810YI098092081064038X10012Y1NEWTON3XI,YI,X源代码见M文件Y ...

  2. ransac 直线拟合 matlab,ransac拟合直线和平面(matlab版本)

    参考资料: 主要思想: 迭代100次,找出内点内点最多的参数模型. 修改的问题: 原作者ransac拟合直线的参数以及ransac拟合平面的参数我认为有误,在这个基础上进行了修正. 1 ransac拟 ...

  3. Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法(附Matlab代码)

    Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法 Caputo 分数阶一维问题基于 L1 逼近的快速差分方法(附Matlab程序) 文章目录 Caputo 分数阶一维问题基于 L1 逼近的空 ...

  4. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc

    几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...

  5. 空间计量实践操作-MATLAB代码①

    1.MATLAB绘制Moran散点图 2. MATLAB空间数据平滑 包含五种平滑方法 简单比率平滑法 过渡风险平滑法 经验贝叶斯平滑法 空间比率平滑法 空间经验贝叶斯平滑法 3. 计算Local M ...

  6. 【图像检测】基于LSD算法直线检测matlab代码

    1 简介 提出了一种中国象棋棋盘角点检测的算法.首先采用LSD算法检测出棋盘灰度图像中的大部分直线,然后通过使用基于灰度值区域的投影直方图和基于LSD算法的直线交点检测两种方法,精确地检测出象棋棋盘的 ...

  7. matlab中三维非线性拟合,matlab非线性拟合与绘制三维曲面

    建议用1stOpt,使用简单,不用猜初值,拟合效果非常强.下面是由1stOpt得出的结果,应该是唯一最优解.如果用其它软件,估计花费时间不少还不一定能得到最优解. 均方差(RMSE): 2.88773 ...

  8. 利用Astar算法实现飞行轨迹的三维规划附Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  9. 二维直线拟合--opencv实现

    二维/三维直线拟合–opencv实现 ​ Hough变换可以提取图像中的直线,但是提取线的精度不高,然而我们的很多场合下需要精确估计直线的参数,这时就需要进行直线拟合. ​ 直线拟合的方法有很多,比如 ...

  10. 【C++】【Ctrl+CV即可食用】三维点拟合空间直线

    前景概述 网上三维点拟合空间直线的代码很多 大多数都是python或者matlab 这里贴一个C++的代码 原目的是拟合出直线之后任取两个点手动计算一下斜率 数学原理 最小二乘拟合直线方程: x−x0 ...

最新文章

  1. 伯克利人工智能研究院最新研究:协作型工业机器人如何更智能?
  2. 编写微指令 计算机组成,计算机组成原理微指令实验报告
  3. java二叉树的运用
  4. Qt学习(十一):QT设置静态数据库
  5. aop实现原理_SpringAOP原理分析
  6. 测试人员容易遗漏一些隐藏的缺陷
  7. 【2017年第2期】感悟大数据——从数据管理和分析说起
  8. yml的基本语法,以及java读取yml文件
  9. 下标索引必须为正整数类型或逻辑类型_python量化基础 | 变量和简单的数据类型,零基础都可以看懂...
  10. Xcode7 无账号真机测试!!
  11. 机器学习基础-线性代数学习
  12. iOS----UIScrollView
  13. bp神经网络数据预测实例,bp网络神经预测模型
  14. Abaqus学习笔记(基础)
  15. html古诗竖行排列,古诗词竖版图片
  16. [重庆思庄每日技术分享]-数据库创建组件时报错ORA-30554: XDB.XDB$ACL_XIDX is disabled
  17. 微信公众号通知和服务通知
  18. 网络规划师学习-二层交换机工作原理和二层交换机为啥不能跨网段通信
  19. linux KVM的网络设置方法(bridge和nat)
  20. 华为发展鸿蒙再出奇招,学习宝马推出官方认证二手手机

热门文章

  1. Java中字符(串)和数值类型的转换
  2. 微信小程序-Image 图片实现宽度100%,高度自适应
  3. ios 开发常用技巧
  4. C#获取字符串中某个字符出现的次数
  5. C#模拟GetPOST提交表单(一)--HttpWebRequest以及HttpWebResponse --WebClient,restsharp
  6. Layui 数据表格动态cols(字段)动态变化
  7. Navicat Premium查看建表语句(DDL)
  8. 清理了两位同事的机器,走人时要自行清理
  9. 不要安排看代码的工作
  10. 辛辛苦苦做了几天白忙活,错在哪里?