预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

输入文件形式如下: C++源程序如下: #include<iostream> #include<fstream> #include<cmath> #include<string> #include<iomanip> usingnamespacestd; constintn=6; voidinverse(doublec[n][n]); template<typenameT1,typenameT2>voidtranspose(T1*mat1,T2*mat2,inta,intb); template<typenameT1,typenameT2>voidmulti(T1*mat1,T2*mat2,T2*result,inta,intb,intc); template<typenameT>voidinput(T*mat,inta,intb); template<typenameT>voidoutput(T*mat,char*s,inta,intb); intmain() { ofstreamoutFile; cout.precision(5); doublex0=0.0,y0=0.0;doublefk=0.15324;//内方位元素 doublem=39689;//估算比例尺 doubleB[4][5]={0.0},R[3][3],XG[6][1],AT[6][8],ATA[6][6],ATL[6][1]; input(B,4,5);//从文件中读取控制点的影像坐标和地面坐标,存入数组B doubleXs=0.0,Ys=0.0,Zs=0.0,Q=0.0,W=0.0,K=0.0; doubleX,Y,Z,L[8][1],A[8][6]; //确定未知数的出始值 for(inti=0;i<4;i++) {Xs=Xs+B[i][2]; Ys=Ys+B[i][3]; Zs=Zs+B[i][4]; } Xs=Xs/4;Ys=Ys/4;Zs=Zs/4+m*fk; intf=0; do//迭代计算 {f++; //组成旋转矩阵 R[0][0]=cos(Q)*cos(K)-sin(Q)*sin(W)*sin(K); R[0][1]=-cos(Q)*sin(K)-sin(Q)*sin(W)*cos(K); R[0][2]=-sin(Q)*cos(W); R[1][0]=cos(W)*sin(K); R[1][1]=cos(W)*cos(K); R[1][2]=-sin(W); R[2][0]=sin(Q)*cos(K)+cos(Q)*sin(W)*sin(K); R[2][1]=-sin(Q)*sin(K)+cos(Q)*sin(W)*cos(K); R[2][2]=cos(Q)*cos(W); //计算系数阵和常数项 for(inti=0,k=0,j=0;i<=3;i++,k++,j++) { X=R[0][0]*(B[i][2]-Xs)+R[1][0]*(B[i][3]-Ys)+R[2][0]*(B[i][4]-Zs); Y=R[0][1]*(B[i][2]-Xs)+R[1][1]*(B[i][3]-Ys)+R[2][1]*(B[i][4]-Zs); Z=R[0][2]*(B[i][2]-Xs)+R[1][2]*(B[i][3]-Ys)+R[2][2]*(B[i][4]-Zs); L[j][0]=B[i][0]-(x0-fk*X/Z); L[j+1][0]=B[i][1]-(y0-fk*Y/Z); j++; A[k][0]=(R[0][0]*fk+R[0][2]*(B[i][0]-x0))/Z; A[k][1]=(R[1][0]*fk+R[1][2]*(B[i][0]-x0))/Z; A[k][2]=(R[2][0]*fk+R[2][2]*(B[i][0]-x0))/Z; A[k][3]=(B[i][1]-y0)*sin(W)-((B[i][0]-x0)*((B[i][0]-x0)*cos(K)-(B[i][1]-y0)*sin(K))/fk+fk*cos(K))*cos(W); A[k][4]=-fk*sin(K)-(B[i][0]-x0)*((B[i][0]-x0)*sin(K)+(B[i][1]-y0)*cos(K))/fk; A[k][5]=B[i][1]-y0; A[k+1][0]=(R[0][1]*fk+R[0][2]*(B[i][1]-y0))/Z; A[k+1][1]=(R[1][1]*fk+R[1][2]*(B[i][1]-y0))/Z; A[k+1][2]=(R[2][1]*fk+R[2][2]*(B[i][1]-