matlab平面度误差怎么求,我这样求对不对啊

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:28:51
是这样的一个问题

已知空间8个点

x=[807.885 822.301 843.889 873.601 882.456 866.085 839.726

816.664]

y=[1294.459 1265.64 1258.251 1270.253 1302.33 1326.2

1331.356 1321.231];

z=[-4.878 -4.244 -4.073 -4.267 -4.495 -5.15 -5.514 -5.378]

根据以上的8个点拟合一个平面然后求出这个平面的平面度

我用的是最小二乘法

我写的程序师这样的:

function F=myfun(p)
x=[807.885 822.301 843.889 873.601 882.456 866.085 839.726 816.664];
y=[1294.459 1265.64 1258.251 1270.253 1302.33 1326.2 1331.356 1321.231];
z=[-4.878 -4.244 -4.073 -4.267 -4.495 -5.15 -5.514 -5.378];
for i=1:8
d(:,:,i)=(p(1)*x(i)+p(2)*y(i)+p(3)*z(i)+p(4))/(sqrt(p(1).^2+p(2).^2+p(3).^2));
end
i=1:8;
F=d(:,:,i);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

p1=[807.885 1294.459 -4.878]; %任取3个点
p2=[822.301 1265.64 -4.244];
p3=[843.889 1258.251 -4.073];
p12=p2-p1;
p13=p3-p1;
p=cross(

x=[807.885 822.301 843.889 873.601 882.456 866.085 839.726 816.664];
y=[1294.459 1265.64 1258.251 1270.253 1302.33 1326.2 1331.356 1321.231];
z=[-4.878 -4.244 -4.073 -4.267 -4.495 -5.15 -5.514 -5.378];

%下面拟合的是ax+by+c=z
%你把几个点代入上式,写成关于abc的矩阵形式A*abc=B
%下面给出A,B的表达式
A=[x',y',ones(size(x'))];
B=z';
abc=A\B;
a=abc(1);
b=abc(2);
c=abc(3);
%至此,方程可写为a*x+b*y+c-z=0

%平面度的概念我不是很清楚,我是效仿你的公式
F=(a*x'+b*y'+c-z')/sqrt(a^2+b^2+1^2);
max(F)-min(F)