A[j][i]=B[j][m+i];
return1;
}
voidmain()
{
//定义两张相片共个控制点和加密点的像素坐标(J1,I1,J2,I2)和像平面直角坐标(x1,y1,x2,y2),及地面坐标(X,Y,Z)
doubleJ1[N]={0.0},I1[N]={0.0},J2[N]={0.0},I2[N]={0.0};
doublex1[N]={0.0},x2[N]={0.0},z1[N]={0.0},z2[N]={0.0};
doubleX[N]={0.0},Y[N]={0.0},Z[N]={0.0};
//导入控制点坐标数据
ifstreaminfile;
infile.open("控制点坐标数据.txt");
if(infile.is_open())
{
while(!
infile.eof())
{
for(inti=0;i<44;i++)
{
infile>>J1[i];infile.ignore
(1);
infile>>I1[i];infile.ignore
(1);
infile>>X[i];infile.ignore
(1);
infile>>Y[i];infile.ignore
(1);
infile>>Z[i];infile.ignore
(1);
}
}infile.close();
}
cout<//像素坐标转化为直角坐标
for(intj=0;j<44;j++)
{
x1[j]=(J1[j]-5616/2)*6.410256/1000;
z1[j]=(3744/2-I1[j])*6.410256/1000;
}
cout<
//左右相片外方位元素初始值及摄影机主距
doubleXs1,Ys1,Zs1,Q1,W1,K1,f1,x01,z01,k11,k21;
doubleXs2,Ys2,Zs2,Q2,W2,K2,f2,x02,z02,k12,k22;
Xs1=497.9149,Ys1=301.2754,Zs1=297.2430,Q1=14.9560,W1=4.7765,K1=-0.0308,f1=50,x01=0,z01=0,k11=0,k21=0;
Xs2=509.6501,Ys2=301.3448,Zs2=297.4727,Q2=2.1777,W2=4.5969,K2=0.0791,f2=50,x02=0,z02=0,k12=0,k22=0;
doublerr[N]={0.0},dx[N]={0.0},dz[N]={0.0};
doubleXX1,YY1,ZZ1,XX2,YY2,ZZ2;
//定义旋转矩阵,系数矩阵,常数项和改正数
doubleR1[3][3]={0.0},R2[3][3]={0.0},A1[N][N]={0.0},l1[N][N]={0.0},d[N][N]={0.0};
intt=0;
cout<//组成旋转矩阵
R1[0][0]=cos(Q1)*cos(K1)-sin(Q1)*sin(W1)*sin(K1);
R1[0][1]=cos(W1)*sin(Q1);
R1[0][2]=-cos(Q1)*sin(K1)-sin(Q1)*sin(W1)*cos(K1);
R1[1][0]=-sin(Q1)*cos(K1)-cos(Q1)*sin(W1)*sin(K1);
R1[1][1]=cos(Q1)*cos(W1);
R1[1][2]=sin(Q1)*sin(K1)-cos(Q1)*sin(W1)*cos(K1);
R1[2][0]=cos(W1)*sin(K1);
R1[2][1]=-sin(W1);
R1[2][2]=cos(W1)*cos(K1);
R2[0][0]=cos(Q2)*cos(K2)-sin(Q2)*sin(W2)*sin(K2);
R2[0][1]=cos(W2)*sin(Q2);
R2[0][2]=-cos(Q2)*sin(K2)-sin(Q2)*sin(W2)*cos(K2);
R2[1][0]=-sin(Q2)*cos(K2)-cos(Q2)*sin(W2)*sin(K2);
R2[1][1]=cos(Q2)*cos(W2);
R2[1][2]=sin(Q2)*sin(K2)-cos(Q2)*sin(W2)*cos(K2);
R2[2][0]=cos(W2)*sin(K2);
R2[2][1]=-sin(W2);
R2[2][2]=cos(W2)*cos(K2);
for(intk=0;k<4;k++)
{
XX1=R1[0][0]*(X[k]-Xs1)+R1[1][0]*(Y[k]-Ys1)+R1[2][0]*(Z[k]-Zs1);
YY1=R1[0][1]*(X[k]-Xs1)+R1[1][1]*(Y[k]-Ys1)+R1[2][1]*(Z[k]-Zs1);
ZZ1=R1[0][2]*(X[k]-Xs1)+R1[1][2]*(Y[k]-Ys1)+R1[2][2]*(Z[k]-Zs1);
XX2=R2[0][0]*(X[k]-Xs1)+R2[1][0]*(Y[k]-Ys1)+R2[2][0]*(Z[k]-Zs1);
YY2=R2[0][1]*(X[k]-Xs1)+R2[1][1]*(Y[k]-Ys1)+R2[2][1]*(Z[k]-Zs1);
ZZ2=R2[0][2]*(X[k]-Xs1)+R2[1][2]*(Y[k]-Ys1)+R2[2][2]*(Z[k]-Zs1);
}
for(intp=0;p<22;p++)
{
rr[p]=(x1[p]-x01)*(x1[p]-x01)+(z1[p]-z01)*(z1[p]-z01);
dx[p]=(x1[p]-x01)*(k11*(x1[p]-x01)*(x1[p]-x01)+k21*(x1[p]-x01)*(x1[p]-x01)*(x1[p]-x01)*(x1[p]-x01));
dz[p]=(z1[p]-z01)*(k11*(z1[p]-z01)*(z1[p]-z01)+k21*(z1[p]-z01)*(z1[p]-z01)*(z1[p]-z01)*(z1[p]-z01));
}
cout<for(intq=22;q<44;q++)
{
rr[q]=(x1[q]-x02)*(x1[q]-x02)+(z1[q]-z02)*(z1[q]-z02);
dx[q]=(x1[q]-x02)*(k12*(x1[q]-x02)*(x1[q]-x02)+k22*(x1[q]-x02)*(x1[q]-x02)*(x1[q]-x02)*(x1[q]-x02));
dz[q]=(z1[q]-z02)*(k12*(z1[q]-z02)*(z1[q]-z02)+k22*(z1[q]-z02)*(z1[q]-z02)*(z1[q]-z02)*(z1[q]-z02));
}
cout<//计算系数阵(88*73)和常数项
//左片
for(inti=0,H=0;i<22;i++)
{
l1[H][0]=x1[i]-x01+f1*XX1/YY1-dx[i];
l1[H+1][0]=z1[i]-z01+f1*ZZ1/YY1-dz[i];
A1[H][0]=(R1[0][1]*(x1[i]-x01)-R1[0][0]*f1)/YY1;//x/Xs=-x/X
A1[H][1]=(R1[1][1]*(x1[i]-x01)-R1[1][0]*f1)/YY1;//x/Ys
A1[H][2]=(R1[2][1]*(x1[i]-x01)-R1[2][0]*f1)/YY1;//x/Zs
A1[H][3]=(z1[i]-z01)*sin(W1)-((x1[i]-x01)*((x1[i]-x01)*cos(K1)-(z1[i]-z01)*sin(K1))/f1+f1*cos(K1))*cos(W1);//x/Q
A1[H][4]=-f1*sin(K1)-(x1[i]-x01)*((x1[i]-x01)*sin(K1)+(z1[i]-z01)*cos(K1))/f1;//x/W
A1[H][5]=z1[i]-z01;//x/K
A1[H][6]=(x1[i]-x01)/f1;//x/f
A1[H][7]=1;//x/x0
A1[H][8]=0;//x/z0
A1[H][9]=(x1[i]-x01)*rr[i];//x/k1
A1[H][10]=(x1[i]-x01)*rr[i]*rr[i];//x/k2
A1[H][11]=(R2[0][1]*(x1[i]-x02)-R2[0][0]*f2)/YY2;//x/Xs=-x/X
A1[H][12]=(R2[1][1]*(x1[i]-x02)-R2[1][0]*f2)/YY2;//x/Ys
A1[H][13]=(R2[2][1]*(x1[i]-x02)-R2[2][0]*f2)/YY2;//x/Zs
A1[H][14]=(z1[i]-z02)*sin(W2)-((x1[i]-x02)*((x1[i]-x02)*cos(K2)-(z1[i]-z02)*sin(K2))/f2+f2*cos(K2))*cos(W2);//x/Q
A1[H][15]=-f2*sin(K2)-(x1[i]-x02)*((x1[i]-x02)*sin(K2)+(z1[i]-z02)*cos(K2))/f2;//x/W
A1[H][16]=z1[i]-z02;//x/K
A1[H][17]=(x1[i]-x02)/f2;//x/f
A1[H][18]=1;//x/x0
A1[H][19]=0;//x/z0
A1[H][20]=(x1[i]-x02)*rr[i];//x/k1
A1[H][21]=(x1[i]-x02)*rr[i]*rr[i];//x/k2
A1[H+1][0]=(R1[0][1]*(z1[i]-z01)-R1[0][2]*f1)/YY1;//z/Xs=-z/X
A1[H+1][1]=(R1[1][1]*(z1[i]-z01)-R1[1][2]*f1)/YY1;//z/Ys=-z/Y
A1[H+1][2]=(R1[2][1]*(z1[i]-z01)-R1[2][2]*f1)/YY1;//z/Zs=-z/Z
A1[H+1][3]=-(x1[i]-x01)*sin(W1)-((z1[i]-z01)*((x1[i]-x01)*cos(K1)-(z1[i]-z01)*sin(K1))/f1-f1*sin(K1))*cos(W1);//z/Q
A1[H+1][4]=-f1*cos(K1)-(z1[i]-z01)*((x1[i]-x01)*sin(K1)+(z1[i]-z01)*cos(K1))/f1;//z/W
A1[H+1][5]=-(x1[i]-x01);//z/K
A1[H+1][6]=(z1[i]-z01)/f1;//z/f
A1[H+1][7]=0;//z/x0
A1[H+1][8]=1;//z/z0
A1[H+1][9]=(z1[i]-z01)*rr[i];//x/k1
A1[H+1][10]=(z1[i]-z01)*rr[i]*rr[i];//x/k2
A1[H+1][11]=(R2[0][1]*(z1[i]-z02)-R2[0][2]*f2)/YY2;//z/Xs=-z/X
A1[H+1][12]=(R2[1][1]*(z1[i]-z02)-R2[1][2]*f2)/YY2;//z/Ys=-z/Y
A1[H+1][13]=(R2[2][1]*(z1[i]-z02)-R2[2][2]*f2)/YY2;//z/Zs=-z/Z
A1[H+1][14]=-(x1[i]-x02)*sin(W2)-((z1[i]-z02)*((x1[i]-x02)*cos(K2)-(z1[i]-z02)*sin(K2))/f2-f2*sin(K2))*cos(W2);//z/Q
A1[H+1][15]=-f2*cos(K2)-(z1[i]-z02)*((x1[i]-x02)*sin(K2)+(z1[i]-z02)*cos(K2))/f2;//z/W
A1[H+1][16]=-(x1[i]-x02);//z/K
A1[H+1][17]=(z1[i]-z02)/f2;//z/f
A1[H+1][18]=0;//z/x0
A1[H+1][19]=1;//z/z0
A1