您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 空间后方交会C++程序代码
摄影测量后方交会程序(c/c++)输入数据截图:结果截图:程序源代码(其中的矩阵求逆在前面已经有了,链接):#includestdio.h#includestdlib.h#includemath.hconstdoublePRECISION=1e-5;typedefdoubleDOUBLE[5];intInputData(int&Num,DOUBLE*&Data,double&m,double&f);intResection(constint&Num,constDOUBLE*&Data,constdouble&m,constdouble&f);intInverseMatrix(double*matrix,constint&row);intmain(intargc,char*argv[]){DOUBLE*Data=NULL;intNum;doublef(0),m(0);if(InputData(Num,Data,m,f)){if(Data!=NULL){delete[]Data;}return1;}if(Resection(Num,Data,m,f)){if(Data!=NULL){delete[]Data;}return1;}if(Data!=NULL){delete[]Data;}printf(解算完毕...\n);do{printf(计算结果保存于\结果.txt\文件中\n请选择操作(输入P打开结果数据,R打开原始数据,其它退出程序):);fflush(stdin);//刷新输入流charorder=getchar();if('P'==order||'p'==order){system(结果.txt);}elseif('R'==order||'r'==order){system(data.txt);}elsebreak;system(cls);}while(1);system(PAUSE);return0;}/***********************************************函数名:InputData*函数介绍:从文件(data.txt)中读取数据,*文件格式如下:*点数m(未知写作0)*内方位元素(fx0y0)*编号xyXYZ*下面是一个实例:40153.24001-86.15-68.9936589.4125273.322195.172-53.4082.2137631.0831324.51728.693-14.78-76.6339100.9724934.982386.50410.4664.4340426.5430319.81757.31*参数:(in/out)Num(点数),*(in/out)Data(存放数据),m,f,x0,y0*返回值:int,0成功,1文件打开失败,2控制点个*数不足,3文件格式错误*作者:vcrs*完成时间:09-10-4**********************************************/intInputData(int&Num,DOUBLE*&Data,double&m,double&f){doublex0,y0;FILE*fp_input;if(!(fp_input=fopen(data.txt,r))){return1;}fscanf(fp_input,%d%lf,&Num,&m);if(Num4){return2;}fscanf(fp_input,%lf%lf%lf,&f,&x0,&y0);f/=1000;if(m0||f0){return3;}Data=newDOUBLE[Num];double*temp=newdouble[Num-1];doublescale=0;inti;for(i=0;iNum;i++){//读取数据,忽略编号if(fscanf(fp_input,%*d%lf%lf%lf%lf%lf,&Data[i][0],&Data[i][1],&Data[i][2],&Data[i][3],&Data[i][4])!=5){return3;}//单位换算成mData[i][0]/=1000.0;Data[i][1]/=1000.0;}//如果m未知则归算其值if(0==m){for(i=0;iNum-1;i++){temp[i]=(Data[i][2]-Data[i+1][2])/(Data[i][0]-Data[i+1][0])+(Data[i][3]-Data[i+1][3])/(Data[i][1]-Data[i+1][1]);scale+=temp[i]/2.0;}m=scale/(Num-1);}fclose(fp_input);delete[]temp;return0;}/***********************************************函数名:MatrixMul*函数介绍:求两个矩阵的积,*参数:Jz1(第一个矩阵),row(第一个矩阵行数),*Jz2(第二个矩阵),row(第二个矩阵列数),com(第一个*矩阵列数),(out)JgJz(存放结果矩阵)*返回值:void*作者:vcrs*完成时间:09-10-4**********************************************/voidMatrixMul(double*Jz1,constint&row,double*Jz2,constint&line,constint&com,double*JgJz){for(inti=0;irow;i++){for(intj=0;jline;j++){doubletemp=0;for(intk=0;kcom;k++){temp+=*(Jz1+i*com+k)*(*(Jz2+k*line+j));}*(JgJz+i*line+j)=temp;}}}/***********************************************函数名:OutPut*函数介绍:向结果.txt文件输出数据*参数:Q协因数阵,m精度,m0单位权中误差,6个外*方位元素,旋转矩阵*返回值:int,0成功,1失败*作者:vcrs*完成时间:09-10-4**********************************************/intOutPut(constdouble*&Q,constdouble*&m,constdouble&m0,constdouble&Xs,constdouble&Ys,constdouble&Zs,constdouble&Phi,constdouble&Omega,constdouble&Kappa,constdouble*R){FILE*fp_out;if(!(fp_out=fopen(结果.txt,w))){return1;}FILE*fp_input;if(!(fp_input=fopen(data.txt,r))){return1;}fprintf(fp_out,***************************************************************************************************************************************************\n);fprintf(fp_out,\n空间后方交会程序(C\\C++)\n遥感信息工程学院\n班级:00000\n学号:0000000\n姓名:vcrs\n\n);fprintf(fp_out,***************************************************************************************************************************************************\n);fprintf(fp_out,已知数据:\n\n已知点数:);intnum;doubletemp,x,y;fscanf(fp_input,%d%lf,&num,&temp);fprintf(fp_out,%d\n,num);fprintf(fp_out,摄影比例尺(0表示其值位置):);fprintf(fp_out,%10.0lf\n,temp);fprintf(fp_out,内方位元素(fx0y0):);fscanf(fp_input,%lf%lf%lf,&temp,&x,&y);fprintf(fp_out,%10lf\t%10lf\t%10lf\n,temp,x,y);for(inti=0;inum;i++){doubletemp[5];fscanf(fp_input,%*d%lf%lf%lf%lf%lf,&temp[0],&temp[1],&temp[2],&temp[3],&temp[4]);fprintf(fp_out,%3d\t%10lf\t%10lf\t%10lf\t%10lf\t%10lf\n,i+1,temp[0],temp[1],temp[2],temp[3],temp[4]);}fclose(fp_input);fprintf(fp_out,***************************************************************************************************************************************************\n);fprintf(fp_out,计算结果如下:\n\n外方位元素:\n);fprintf(fp_out,\tXs=%10lf\n,Xs);fprintf(fp_out,\tYs=%10lf\n,Ys);fprintf(fp_out,\tZs=%10lf\n,Zs);fprintf(fp_out,\tPhi=%10lf\n,Phi);fprintf(fp_out,\tOmega=%10lf\n,Omega);fprintf(fp_out,\tKappa=%10lf\n\n,Kappa);fprintf(fp_out,旋转矩阵:\n);for(i=0;i3;i++){fprintf(fp_out,\t);for(intj=0;j3;j++){fprintf(fp_out,%10lf\t,*(R+i*3+j));}fprintf(fp_out,\n);}fprintf(fp_out,\n单位权中误差:%10lf\n\n,m0);fprintf(fp_out,协因数阵:\n);for(i=0;i6;i++){fprintf(fp_out,\t);for(intj=0;j6;j++){fprintf(fp_out,%20lf\t,*(Q+i*6+j));}fprintf(fp_out,\n);}fprintf(fp_out,\n外方位元素精度:);for(i=0;i6;i++){fprintf(fp_out,%10lf\t,m[i]);}fprintf(fp_out,\n);fprintf(fp_out,***************************************************************************************************************************************************\n);fclose(fp_out);return0;}/***********************************************函数名:Resection*函数介绍:计算*参数:Num(点数),Data(数据),m,,f(焦距),x0,y0*返回值:int,0成功,其它失败*作者:
本文标题:空间后方交会C++程序代码
链接地址:https://www.777doc.com/doc-3875081 .html