空间后方交会程序

上传人:29 文档编号:60134331 上传时间:2022-03-07 格式:DOC 页数:8 大小:154KB
收藏 版权申诉 举报 下载
空间后方交会程序_第1页
第1页 / 共8页
空间后方交会程序_第2页
第2页 / 共8页
空间后方交会程序_第3页
第3页 / 共8页
资源描述:

《空间后方交会程序》由会员分享,可在线阅读,更多相关《空间后方交会程序(8页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上一 实验目的: 掌握摄影测量空间后方交会的原理,利用计算机编程语言实现空间后方交会外方位元素的解算。二 仪器用具及已知数据文件: 计算机windows xp 系统,编程软件(VISUAL C+6.0),地面控制点在摄影测量坐标系中的坐标及其像点坐标文件shuju.txt。 三 实验内容: 单张影像的空间后方交会:利用已知地面控制点数据及相应像点坐标根据共线方程反求影像的外方位元素。 数学模型:共线条件方程式: 求解过程:(1)获取已知数据。从航摄资料中查取平均航高与摄影机主距;获取控制点的地面测量坐标并转换为地面摄影测量坐标。(2)量测控制点的像点坐标并做系统改正。(

2、3)确定未知数的初始值。在竖直摄影且地面控制点大致分布均匀的情况下,按如下方法确定初始值,即:, =0 式中;m为摄影比例尺分母;n为控制点个数。 (4)用三个角元素的初始值,计算个方向余弦,组成旋转矩阵R。 (5)逐点计算像点坐标的近似值。利用未知数的近似值和控制点的地面坐标代入共线方程式,逐点计算像点坐标的近似值(x)、(y)。 (6)逐点计算误差方程式的系数和常数项,组成误差方程式。(7)计算法方程的系数矩阵和常数项,组成法方程式。 (8)解法方程,求得外方位元素的改正数,,d,d,d。(9)用前次迭代取得的近似值,加本次迭代的改正数,计算外方位元素的新值。(10)将求得的外方位元素改正

3、数与规定的限差比较,若小于限差则迭代结束。否则用新的近似值重复(4)(9),直到满足要求为止。四实验结果:程序的源代码如下所示:#include#include#include#include#include#define N 4void turn(double *A,double A2,int m,int n) /计算矩阵的转置int i,j; for(i=0;im;i+)for(j=0;jn;j+)A2j*m+i=Ai*n+j;void mulAB(double *A,double *B,double *C,int am,int an,int bm,int bn) /计算两矩阵相乘int

4、i,j,l,u;if(an!=bm)printf(error!cannot do the multiplication.n);return;for(i=0;iam;i+)for(j=0;jbn;j+)u=i*bn+j;Cu=0.0;for(l=0;lan;l+)Cu+=Ai*an+l*Bl*bn+j;return;double *inv(double *a,int n) /计算矩阵的逆,本程序的难点 /采用高斯-约旦-全选主元法int *is,*js,i,j,k,l,u,v; double d,p; is=(int*)malloc(n*sizeof(int); js=(int*)malloc(

5、n*sizeof(int); for (k=0; k=n-1; k+) d=0.0; for (i=k;in;i+) for (j=k;jd) d=p; isk=i; jsk=j; if (d+1.0=1.0) free(is); free(js); printf(error not invn); return NULL; if (isk!=k) for (j=0;jn;j+) u=k*n+j; v=isk*n+j; p=au; au=av; av=p; if (jsk!=k) for (i=0;in;i+) u=i*n+k; v=i*n+jsk; p=au; au=av; av=p; l=k

6、*n+k; al=1.0/al; for (j=0;jn;j+) if (j!=k) u=k*n+j; au=au*al; for (i=0;in;i+) if (i!=k) for (j=0;jn;j+) if (j!=k) u=i*n+j; au=au-ai*n+k*ak*n+j; for (i=0;i=0;k-) if (jsk!=k) for (j=0;j=n-1;j+) u=k*n+j; v=jsk*n+j; p=au; au=av; av=p; if (isk!=k) for (i=0;in;i+) u=i*n+k; v=i*n+isk; p=au; au=av; av=p; fr

7、ee(is);free(js); return a;void printmatrix(double M,int m,int n) /矩阵的输出int i,j;for(i=0;im;i+)for(j=0;jn;j+)printf(%.5f,Mi*n+j);printf(n);printf(n);main() /主函数,空间后方交会的计算FILE *fp; /定义一个文件指针fpint m,i,j=0;double f,t,w,k,S1=0.0,S2=0.0,S3=0.0,xN,yN,x0N,y0N,XN,YN,ZN,Xs0,Ys0,Zs0;double a3,b3,c3,A2*N*6,AT6*2

8、*N,ATA6*6,*ATA_=NULL,l2*N,ATl6,V6; if(fp=fopen(e:shuju.txt,r)=NULL) /使fp指向被打开的shuju.txt文件 /并判断文件是否打开成功printf(nerror on open shuju.txtn);getch();exit(1); for(i=0;iN;i+)fscanf(fp,%lf%lf%lf%lf%lf,&xi,&yi,&Xi,&Yi,&Zi); /将文件中的数据赋给主函数定义的变量printf(原始数据:n);printf(xttyttXttYttZttn); /输出文件中的原始数据for(i=0;iN;i+)p

9、rintf(%lf %lf %lf %lf %lfn,xi,yi,Xi,Yi,Zi);printf(n请输入摄影机主距和摄影比例尺分母;f,m:);scanf(%lf,%lf,&f,&m); /输入f,mf=f/1000.0;for(i=0;iN;i+)xi/=1000.0;yi/=1000.0;S1+=Xi;S2+=Yi;S3+=Zi; Xs0=S1/N;Ys0=S2/N; /计算外方位元素的初始值Zs0=m*f+S3/N;t=0.0;w=0.0;k=0.0; while(j3) printf(-第%d次计算-n,j+1);a0=cos(t)*cos(k)-sin(t)*sin(w)*sin

10、(k);a1=-cos(t)*sin(k)-sin(t)*sin(w)*cos(k);a2=-sin(t)*cos(w);b0=cos(w)*sin(k);b1=cos(w)*cos(k); /计算旋转矩阵b2=-sin(w);c0=sin(t)*cos(k)+cos(t)*sin(w)*sin(k);c1=-sin(t)*sin(k)+cos(t)*sin(w)*cos(k);c2=cos(t)*cos(w);for(i=0;iN;i+)x0i=-f*(a0*(Xi-Xs0)+b0*(Yi-Ys0)+c0*(Zi-Zs0)/(a2*(Xi-Xs0)+b2*(Yi-Ys0)+c2*(Zi-Zs

11、0); /计算像点坐标近似值y0i=-f*(a1*(Xi-Xs0)+b1*(Yi-Ys0)+c1*(Zi-Zs0)/(a2*(Xi-Xs0)+b2*(Yi-Ys0)+c2*(Zi-Zs0);Gi=a2*(Xi-Xs0)+b2*(Yi-Ys0)+c2*(Zi-Zs0);for(i=0;iN;i+)Ai*12+0=(a0*f+a2*xi)/Gi;Ai*12+1=(b0*f+b2*xi)/Gi;Ai*12+2=(c0*f+c2*xi)/Gi;Ai*12+3=yi*sin(w)-(xi*(xi*cos(k)-yi*sin(k)/f+f*cos(k)*cos(w); /计算误差方程的系数阵以及lAi*1

12、2+4=-f*sin(k)-xi*(xi*sin(k)+yi*cos(k)/f;Ai*12+5=yi;Ai*12+6=(a1*f+a2*yi)/Gi;Ai*12+7=(b1*f+b2*yi)/Gi;Ai*12+8=(c1*f+c2*yi)/Gi;Ai*12+9=-xi*sin(w)-(yi*(xi*cos(k)-yi*sin(k)/f-f*sin(k)*cos(w);Ai*12+10=-f*cos(k)-yi*(xi*sin(k)+yi*cos(k)/f;Ai*12+11=-xi;li*2+0=xi-x0i;li*2+1=yi-y0i;/printf(output matrix: An);/p

13、rintmatrix(A,2*N,6);/printf(output matrix: ln);/ printmatrix(l,2*N,1);turn(A,AT,2*N,6);/printf(output matrix: ATn);/printmatrix(AT,6,2*N);mulAB(AT,A,ATA,6,2*N,2*N,6); /间接平差法计算外方位元素,中间计算的矩阵可以根据需要/printf(output matrix: ATAn); /选择性的输出,这里将其屏蔽,为了在打印输出结果的时候/printmatrix(ATA,6,6); /节约资源ATA_=inv(ATA,6);/prin

14、tf(output matrix: ATA_n);/printmatrix(ATA_,6,6);mulAB(AT,l,ATl,6,2*N,2*N,1);/printf(outpit matrinx: ATln);/printmatrix(ATl,6,1);mulAB(ATA_,ATl,V,6,6,6,1);/printf(output matrix: Vn);/printmatrix(V,6,1);Xs0+=V0;Ys0+=V1;Zs0+=V2;t+=V3;w+=V4;k+=V5;printf(第%d次计算的外方位元素为:n,+j); printf(Xs=%.5lf,Ys=%.5lf,Zs=%

15、.5lf,t=%.5lf,w=%.5lf,k=%.5lfn,Xs0,Ys0,Zs0,t,w,k); printf(n外方位元素为:n); printf(Xs=%.5lf,Ys=%.5lf,Zs=%.5lf,t=%.5lf,w=%.5lf,k=%.5lfn,Xs0,Ys0,Zs0,t,w,k); fclose(fp);程序运行的结果为:五实验总结: 通过这次的实验我学到了很多的东西,通过编程加深了对摄影测量空间后方交会相关知识的理解。在老师的严格要求下,我翻阅了很多的C语言的书籍,看了很多的算法,这个程序最难的地方是矩阵的求逆,以及如何将文本文档中的数据赋给程序中的数组变量,这些在以前的学习中都没有学到,感谢刘昭华老师的严格要求。 专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!