天天看點

三維空間點拟合平面01

轉載一篇三維空間點拟合平面的程式,說實話,沒看懂。

% 随機生成一組(x,y,z),這些點的坐标離一個空間平面比較近
x0=1;
L1=2;
y0=1;
L2=2;
x=x0+rand(20,1)*L1;
y=y0+rand(20,1)*L2;
z=1+2*x+3*y;
scatter3(x,y,z,'filled')
hold on;
 
planeData=[x,y,z];
 
% 協方差矩陣的SVD變換中,最小奇異值對應的奇異向量就是平面的方向
xyz0=mean(planeData,1);
centeredPlane=bsxfun(@minus,planeData,xyz0);
A=centeredPlane'*planeData;
[U,S,V]=svd(A);
%[U,S,V]=svd(centeredPlane);
 
a=V(1,3);
b=V(2,3);
c=V(3,3);
d=-dot([a b c],xyz0);
 
% 圖形繪制
xfit = min(x):0.1:max(x);
yfit = min(y):0.1:max(y);
[XFIT,YFIT]= meshgrid (xfit,yfit);
ZFIT = -(d + a * XFIT + b * YFIT)/c;
mesh(XFIT,YFIT,ZFIT);
           

拟合結果如下: 

三維空間點拟合平面01

繼續閱讀