空间离散点和合成

来源:互联网 发布:java餐饮管理系统代码 编辑:程序博客网 时间:2024/05/09 04:15

1 原理

根据空间中的离散点进行直线拟合,其原理很简单,就只最小化众散点到该直线的最小距离。有一个最先要的知识,该直线必过众散点的平均值,那么我们需要做的就是寻找该直线的方向向量。

   根据空间几何知识,我们可以知道,利用协方差矩阵的奇异变换,得到的最大奇异值对应的奇异向量就是该直线的方向。

2 代码设计

<span style="font-size:18px;">% 随机生成一组点,这写点距离直线l比较近,l的过点[1,1,1],方向向量为[1,2,3]lineData=bsxfun(@plus, [1,1,1], (-1:.1:1).'*[1,2,3]);Noise=rand(size(lineData))*.1;lineData=lineData+Noise;scatter3(lineData(:,1), lineData(:,2), lineData(:,3),'filled')hold on;% 拟合的直线必过所有坐标的算数平均值xyz0=mean(lineData,1),% 协方差矩阵奇异变换,与拟合平面不同的是% 所得直线的方向实际上与最大奇异值对应的奇异向量相同centeredLine=bsxfun(@minus,lineData,xyz0);[U,S,V]=svd(centeredLine);direction=V(:,1);% 画图t=-8:0.1:8;xx=xyz0(1)+direction(1)*t;yy=xyz0(2)+direction(2)*t;zz=xyz0(3)+direction(3)*t;plot3(xx,yy,zz)</span>


</pre><pre>
3 实验结果


0 0
原创粉丝点击