我用MATLAB写的七参数计算模型,但是实际运用的过程中,误差居然达到了分米,最大是6分米,实在是做不出来了,不知道哪里错了
代码如下:
function dX=burse(A,B)
global dX
%计算七参数
Xa=A(:,1);Ya=A(:,2);Za=A(:,3);
Xb=B(:,1);Yb=B(:,2);Zb=B(:,3);
L=[Xb-Xa;Yb-Ya;Zb-Za]; %列出常数项
m=length(A); %重合点个数
if(m<3)
return;
end
C= [ones(m,1),zeros(m,1),zeros(m,1),zeros(m,1),-Za,Ya,Xa; %列出系数矩阵B
zeros(m,1),ones(m,1),zeros(m,1),Za,zeros(m,1),-Xa,Ya;
zeros(m,1),zeros(m,1),ones(m,1),-Ya,Xa,zeros(m,1),Za];
N=C'*C;
W=C'*L;
dX=N\W; %利用最小二乘法求参数
需要看下A和B矩阵,看看程序的运行结果。
这是我的转换代码,通过将54转化到80下的空间直角坐标系
function C = qcszh(dx,dy,dz,ex,ey,ez,k,XYZ)
format long g
global XYZN X
Xa=XYZ(:,1); %获取源坐标的X分量
Ya=XYZ(:,2); %获取源坐标的Y分量
Za=XYZ(:,3); %获取源坐标的Z分量
% ex=ex*206265;
% ey=ey*206265;
% ez=ez*206265;
% k=k*1000000;
X=[dx dy dz ex ey ez k]';
C=[1,0,0,0,-Za,Ya,Xa;
0,1,0,Za,0,-Xa,Ya;
0,0,1,-Ya,Xa,0,Za];
T=C*X;
B=[Xa,Ya,Za]';
XYZN=B+T;