好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

前方交会实验报告

前方交会实验报告 本文关键词:交会,实验,报告

前方交会实验报告 本文简介:实验报告实验名称:立体像对前方交会实验日期: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.

实验结果

TAG标签: