空间三维直线拟合matlab代码
注意:本文是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代码相关推荐
- matlab数值分析拟合实例,数值分析函数拟合matlab代码.doc
数值分析函数拟合matlab代码.doc 第一题MATLAB代码用SPLINE作图XI0204060810YI098092081064038X10012Y1NEWTON3XI,YI,X源代码见M文件Y ...
- ransac 直线拟合 matlab,ransac拟合直线和平面(matlab版本)
参考资料: 主要思想: 迭代100次,找出内点内点最多的参数模型. 修改的问题: 原作者ransac拟合直线的参数以及ransac拟合平面的参数我认为有误,在这个基础上进行了修正. 1 ransac拟 ...
- Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法(附Matlab代码)
Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法 Caputo 分数阶一维问题基于 L1 逼近的快速差分方法(附Matlab程序) 文章目录 Caputo 分数阶一维问题基于 L1 逼近的空 ...
- Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc
几种GPS高程拟合方法分析与比较 几种GPS高程拟合方法分析与比较 摘 要:文章论述了几种常用的GPS高程拟合的方法,并在MATLAB中编制了相应的程序,建立了相应的GPS高程拟合模型,并通过实例数据 ...
- 空间计量实践操作-MATLAB代码①
1.MATLAB绘制Moran散点图 2. MATLAB空间数据平滑 包含五种平滑方法 简单比率平滑法 过渡风险平滑法 经验贝叶斯平滑法 空间比率平滑法 空间经验贝叶斯平滑法 3. 计算Local M ...
- 【图像检测】基于LSD算法直线检测matlab代码
1 简介 提出了一种中国象棋棋盘角点检测的算法.首先采用LSD算法检测出棋盘灰度图像中的大部分直线,然后通过使用基于灰度值区域的投影直方图和基于LSD算法的直线交点检测两种方法,精确地检测出象棋棋盘的 ...
- matlab中三维非线性拟合,matlab非线性拟合与绘制三维曲面
建议用1stOpt,使用简单,不用猜初值,拟合效果非常强.下面是由1stOpt得出的结果,应该是唯一最优解.如果用其它软件,估计花费时间不少还不一定能得到最优解. 均方差(RMSE): 2.88773 ...
- 利用Astar算法实现飞行轨迹的三维规划附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 二维直线拟合--opencv实现
二维/三维直线拟合–opencv实现 Hough变换可以提取图像中的直线,但是提取线的精度不高,然而我们的很多场合下需要精确估计直线的参数,这时就需要进行直线拟合. 直线拟合的方法有很多,比如 ...
- 【C++】【Ctrl+CV即可食用】三维点拟合空间直线
前景概述 网上三维点拟合空间直线的代码很多 大多数都是python或者matlab 这里贴一个C++的代码 原目的是拟合出直线之后任取两个点手动计算一下斜率 数学原理 最小二乘拟合直线方程: x−x0 ...
最新文章
- 伯克利人工智能研究院最新研究:协作型工业机器人如何更智能?
- 编写微指令 计算机组成,计算机组成原理微指令实验报告
- java二叉树的运用
- Qt学习(十一):QT设置静态数据库
- aop实现原理_SpringAOP原理分析
- 测试人员容易遗漏一些隐藏的缺陷
- 【2017年第2期】感悟大数据——从数据管理和分析说起
- yml的基本语法,以及java读取yml文件
- 下标索引必须为正整数类型或逻辑类型_python量化基础 | 变量和简单的数据类型,零基础都可以看懂...
- Xcode7 无账号真机测试!!
- 机器学习基础-线性代数学习
- iOS----UIScrollView
- bp神经网络数据预测实例,bp网络神经预测模型
- Abaqus学习笔记(基础)
- html古诗竖行排列,古诗词竖版图片
- [重庆思庄每日技术分享]-数据库创建组件时报错ORA-30554: XDB.XDB$ACL_XIDX is disabled
- 微信公众号通知和服务通知
- 网络规划师学习-二层交换机工作原理和二层交换机为啥不能跨网段通信
- linux KVM的网络设置方法(bridge和nat)
- 华为发展鸿蒙再出奇招,学习宝马推出官方认证二手手机