前方交会实验报告 本文关键词:交会,实验,报告
前方交会实验报告 本文简介:实验报告实验名称:立体像对前方交会实验日期:2010.9专业班级:资环学院测绘2008013班学号:200801322姓名:周少良一.实验内容及要求掌握前方交会的远离,编写计算机程序,在计算机上调试,输出结果并对结果进行检查。通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强综合运用所学
前方交会实验报告 本文内容:
实验报告
实验名称:立体像对前方交会
实验日期:2010.9
专业班级:资环学院
测绘2008013班
学号:200801322
姓名:周少良
一.
实验内容及要求
掌握前方交会的远离,编写计算机程序,在计算机上调试,输出结果并对结果进行检查。通过上机调试程序加强动手能力的培养,通过对实验结果的分析,增强综合运用所学知识解决实际问题的能力。
实验的具体要求如下:
1.
源程序名要遵循统一规定:以CH13**命名;
2.
输入像点坐标及外方位元素,要求一定以文件形式输入、输出数据;
3.
3编写前方交会程序,编程语言不限;
4.
编译及运行前方交会程序,输出计算结果;
5.
提交成果:程序框图,程序源代码,计算结果文件。
二.
实验过程
读入数据,采用文件方法,分别赋给相应的外方位元素
要求用户输入像点坐标
计算摄影基线分量,Bu,Bv,Bw
组成旋转矩阵,R1,R2
分别计算u1,v1,w1和u2,v2,w2
计算N1,N2
输出结果
1.
程序框图
2.
程序源代码:(采用vc6.0编译环境,c语言书写)
#include
#include
#include
double
Xs[2],Ys[2],Zs[2],phi[2],omega[2],kappa[2],f;
double
m1[3],m2[3];//同名像点坐标
double
d1[3],d2[3];//模型点物方坐标
//旋转矩阵
void
Rotationmatrix(double
phi,double
omega,double
kappa,double
matrix[])
{
matrix[0]=
cos(phi)*cos(kappa)-sin(phi)*sin(omega)*sin(kappa);
matrix[1]=
-cos(phi)*sin(kappa)-sin(phi)*sin(omega)*cos(kappa);
matrix[2]=
-sin(phi)*cos(omega);
matrix[3]=
cos(omega)*sin(kappa);
matrix[4]=
cos(omega)*cos(kappa);
matrix[5]=
-sin(omega);
matrix[6]=
sin(phi)*cos(kappa)+cos(phi)*sin(omega)*sin(kappa);
matrix[7]=
-sin(phi)*sin(kappa)+cos(phi)*sin(omega)*cos(kappa);
matrix[8]=
cos(phi)*cos(omega);
}
//矩阵相乘
void
Multmatrix(doubleA,doubleB,doubleResult,int
m,int
p,int
n)
{
int
i;
int
j;
int
k;
for(i=0;
i i++) { for(j=0; j j++) { Result[i*n+j] = 0.0; for(k=0; k k++) { Result[i*n+j] += A[i*p+k]*B[k*n+j]; } } } return; } //输出到 结果.txt int OutPut(const double if (!(fp_out=fopen(“结果.txt“,“w“))) { return 1; } fprintf(fp_out,“**************************************““**************************************““*************/n“); fprintf(fp_out,“/n立体像对前方交会程序(C)/n资源与环境学院/n班级:““测绘工程2008013/n学号:200801322/n姓名:周少良/n/n“); fprintf(fp_out,“**************************************““**************************************““*************/n“); fprintf(fp_out,“读入的是外方位元素是:/n“); int i=0; for(i=0;i<2;i++) { fprintf(fp_out,“%10.7lf/t%10.7lf/t%10.7lf/t%10.7lf/t%10.7lf/t%10.7lf/t%10.7lf/n“,Xs[i],Ys[i],Zs[i],phi[i],omega[i],kappa[i],f); } fprintf(fp_out,“**************************************““**************************************““**************/n“); fprintf(fp_out,“输入的像方坐标是:/n“); fprintf(fp_out,“1:/t%10.7lf/t%10.7lf/t%10.7lf/n“,m1[0],m1[1],m1[2]); fprintf(fp_out,“2:/t%10.7lf/t%10.7lf/t%10.7lf/n“,m2[0],m2[1],m2[2]); fprintf(fp_out,“**************************************““**************************************““**************/n“); fprintf(fp_out,“计算出的像空间坐标是:/n“); fprintf(fp_out,“1:/t%10.7lf/t%10.7lf/t%10.7lf/n“,d1[0],d1[1],d1[2]); fprintf(fp_out,“2:/t%10.7lf/t%10.7lf/t%10.7lf/n“,d2[0],d2[1],d2[2]); fprintf(fp_out,“**************************************““**************************************““**************/n“); fprintf(fp_out,“计算后的坐标是:/n“); fprintf(fp_out,“%10.7lf/t%10.7lf/t%10.7lf/n“,X,Y,Z); fprintf(fp_out,“/n“); fprintf(fp_out,“**************************************““**************************************““**************/n“); fclose(fp_out); return 0; } /*读入数据 数据格式如下: 150 0 0 1 103007.006117 139998.994849 4801.998994 -0.007272205 0.017453293 -0.002908882 2 106002.023762 140005.002780 4797.009648 0.029083973 -0.002908882 0.011635528/ int InputData(double Xs[2],double Ys[2],double Zs[2],double phi[2],double omega[2],double kappa[2],double f,double FILEfp_input; if (!(fp_input=fopen(“data1.txt“,“r“))) { return 1; } fscanf(fp_input,“%lf%lf%lf“,if (f<0) { return 3; } int i; for (i=0;i { if(fscanf(fp_input,“%*d%lf%lf%lf%lf%lf%lf“,} } fclose(fp_input); return 0; } //主函数 void main() { int i; double X,Y,Z; double N1,N2; double Bu,Bv,Bw; double R1[9],R2[9]; double n=2; //读入外方位元素 InputData(Xs,Ys,Zs,phi,omega,kappa,f,n); //用户输入待求点像方坐标,组成矩阵 printf(“Please input x1,y1/n“); scanf(“%lf%lf“,printf(“Please input x2,y2/n“); scanf(“%*c%lf%lf“,for(i=0;i<2;i++) { m1[i]/=1000; m2[i]/=1000; } f=150; m1[2]=-f/1000; m2[2]=-f/1000; //计算Bu,Bv,Bw Bu=Xs[1]-Xs[0]; Bv=Ys[1]-Ys[0]; Bw=Zs[1]-Zs[0]; //计算旋转矩阵R1和R2 Rotationmatrix(phi[0],omega[0],kappa[0],R1); Rotationmatrix(phi[1],omega[1],kappa[1],R2); //计算d1[3]:u1,v1,w1和d2[3]:u2,v2,w2 Multmatrix(R1,m1,d1,3,3,1); Multmatrix(R2,m2,d2,3,3,1); //计算N1,N2 N1=(Bu*d2[2]-Bw*d2[0])/(d1[0]*d2[2]-d2[0]*d1[2]); N2=(Bu*d1[2]-Bw*d1[0])/(d1[0]*d2[2]-d2[0]*d1[2]); //计算X,Y,Z X=Xs[0]+N1*d1[0]; Y=0.5*((Ys[0]+N1*d1[1])+(Ys[1]+N2*d2[1])); Z=Zs[0]+N1*d1[2]; OutPut(X,Y,Z); } 3. 输入数据文件格式 4. 实验结果