摄影测量后方交会法求解外方位元素.docx
- 文档编号:8442404
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:11
- 大小:71.85KB
摄影测量后方交会法求解外方位元素.docx
《摄影测量后方交会法求解外方位元素.docx》由会员分享,可在线阅读,更多相关《摄影测量后方交会法求解外方位元素.docx(11页珍藏版)》请在冰豆网上搜索。
摄影测量后方交会法求解外方位元素摄影测量后方交会法求解外方位元素摄影测量后方交会求外方位元素09地信一班肖明梅解题思路:
定义要用到的变量并初始化,定义一个函数用于求解旋转矩阵R,系数矩阵A,近似坐标矩阵JSZB,常数矩阵L;矩阵的转置,逆,矩阵相乘,相减,求外方位元素的近似值初值以及结果输出都定义为相应的函数。
最后定义一个用于循环求解的函数(程序中xhqiujie()),在该函数中调用之前定义的函数,求出外方位元素近似值初值,改正数Dv6,1,误差V8,1,用dowhile语句进行循环,使精度达到20m,限差低于20m,然后调用结果输出函数用于输出达到要求的结果。
在主函数中创建对象的实例,引用该实例的方法即xhqiujie()函数,就可以求出外方位元素。
代码:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace摄影测量后方交会求外方位元素classProgramdouble,Xs,Ys,Zs,m,f,Sx=0,Sy=0;doublen=206265/3600;/*角元素的单位从m到度的转换系数*/double,zuobiao=-86.15,-53.40,-14.78,10.46,-68.99,82.21,-76.63,64.43,36589.41,37631.08,39100.97,40426.54,25273.32,31324.51,24934.98,30319.81,2195.17,728.69,2386.50,757.31;doublea=newdouble3;/*存储a1,a2.a3*/doubleb=newdouble3;/*存储b1,b2,b3*/doublec=newdouble3;/*存储c1,c2,c3*/doubleXX=newdouble4;doubleYY=newdouble4;doubleZZ=newdouble4;double,L=newdouble8,1;double,JSZB=newdouble2,4;/*像点近似坐标*/double,A=newdouble8,6;/*系数阵*/double,AT=newdouble6,8;double,AB=newdouble6,6;double,AN=newdouble6,6;double,AL=newdouble6,1;double,Dv=newdouble6,1;double,AX=newdouble8,1;/*系数阵与改正数矩阵的乘积*/double,V=newdouble8,1;/*中误差矩阵*/privatevoidQchuzhi()for(inti=0;i4;i+)Sx+=zuobiao2,i;for(inti=0;i4;i+)Sy+=zuobiao3,i;for(inti=0;i4;i+)zuobiao0,i=zuobiao0,i/1000;zuobiao1,i=zuobiao1,i/1000;/*求外方位元素初始值*/=0;m=50000;f=0.15324;Xs=Sx/4;Ys=Sy/4;Zs=m*f;/*求旋转矩阵R,像点坐标近似值,常数项矩阵L,系数矩阵A*/privatevoidR()/旋转矩阵Ra0=Math.Cos()*Math.Cos()-Math.Sin()*Math.Sin()*Math.Sin();a1=-Math.Cos()*Math.Sin()-Math.Sin()*Math.Sin()*Math.Cos();a2=-Math.Sin()*Math.Cos();b0=Math.Cos()*Math.Sin();b1=Math.Cos()*Math.Cos();b2=-Math.Sin();c0=Math.Sin()*Math.Cos()+Math.Cos()*Math.Sin()*Math.Sin();c1=-Math.Sin()*Math.Sin()+Math.Cos()*Math.Sin()*Math.Cos();c2=Math.Cos()*Math.Cos();for(inti=0;i4;i+)XXi=a0*(zuobiao2,i-Xs)+b0*(zuobiao3,i-Ys)+c0*(zuobiao4,i-Zs);YYi=a1*(zuobiao2,i-Xs)+b1*(zuobiao3,i-Ys)+c1*(zuobiao4,i-Zs);ZZi=a2*(zuobiao2,i-Xs)+b2*(zuobiao3,i-Ys)+c2*(zuobiao4,i-Zs);/由共线条件方程式求得xo,yo的近似值JSZB0,i=-f*(XXi)/(ZZi);JSZB1,i=-f*(YYi)/(ZZi);/常数项矩阵Li*2,0=zuobiao0,i-JSZB0,i;Li*2+1,0=zuobiao1,i-JSZB1,i;for(inti=0;i4;i+)A2*i,0=(a0*f+a2*zuobiao0,i)/ZZi;A2*i,1=(b0*f+b2*zuobiao0,i)/ZZi;A2*i,2=(c0*f+c2*zuobiao0,i)/ZZi;A2*i,3=zuobiao1,i*Math.Sin()-(zuobiao0,i*(zuobiao0,i*Math.Cos()-zuobiao1,i*Math.Sin()/f+f*Math.Cos()*Math.Cos();A2*i,4=-f*Math.Sin()-zuobiao0,i*(zuobiao0,i*Math.Sin()+zuobiao1,i*Math.Cos()/f;A2*i,5=zuobiao1,i;A2*i+1,0=(a1*f+a2*zuobiao1,i)/ZZi;A2*i+1,1=(b1*f+b2*zuobiao1,i)/ZZi;A2*i+1,2=(c1*f+c2*zuobiao1,i)/ZZi;A2*i+1,3=-zuobiao0,i*Math.Sin()-(zuobiao1,i*(zuobiao0,i*Math.Cos()-zuobiao1,i*Math.Sin()/f-f*Math.Sin()*Math.Cos();A2*i+1,4=-f*Math.Cos()-zuobiao1,i*(zuobiao0,i*Math.Sin()+zuobiao1,i*Math.Cos()/f;A2*i+1,5=-zuobiao0,i;/*定义一个函数用来求矩阵的转置*/privatevoidT(double,A,double,B,inta,intb)for(inti=0;ib;i+)for(intj=0;ja;j+)Bi,j=Aj,i;/*定义一个函数用来求矩阵的乘积*/privatevoidMultiply(double,A,double,B,double,C,inta,intb,intc)for(inti=0;ia;i+)for(intj=0;jc;j+)Ci,j=0;for(intm=0;mb;m+)Ci,j=Ai,m*Bm,j+Ci,j;privatevoidsubstract(double,A,double,B,double,C,inta,intb)for(inti=0;ia;i+)for(intj=0;jb;j+)Ci,j=Ai,j-Bi,j;/*定义一个函数用来求矩阵的逆*/矩阵的求逆函数publicdouble,ReverseMatrix(double,dMatrix,intLevel)doubledMatrixValue=MatrixValue(dMatrix,Level);if(dMatrixValue=0)returnnull;double,dReverseMatrix=newdoubleLevel,2*Level;doublex,c;for(inti=0;iLevel;i+)for(intj=0;j2*Level;j+)if(jLevel)dReverseMatrixi,j=dMatrixi,j;elsedReverseMatrixi,j=0;dReverseMatrixi,Level+i=1;for(inti=0,j=0;iLevel&jLevel;i+,j+)if(dReverseMatrixi,j=0)intm=i;for(;dMatrixm,j=0;m+);if(m=Level-1)returnnull;else/Addi-rowwithm-rowfor(intn=j;n2*Level;n+)dReverseMatrixi,n+=dReverseMatrixm,n;/Formatthei-rowwith1startx=dReverseMatrixi,j;if(x!
=1)for(intn=j;ni;s-)x=dReverseMatrixs,j;for(intt=j;t=0;i-)for(intj=i+1;jLevel;j+)if(dReverseMatrixi,j!
=0)c=dReverseMatrixi,j;for(intn=j;n2*Level;n+)dReverseMatrixi,n-=(c*dReverseMatrixj,n);double,dReturn=newdoubleLevel,Level;for(inti=0;iLevel;i+)for(intj=0;jLevel;j+)dReturni,j=dReverseMatrixi,j+Level;returndReturn;/求得矩阵行列式的值publicdoubleMatrixValue(double,MatrixList,intLevel)double,dMatrix=newdoubleLevel,Level;for(inti=0;iLevel;i+)for(intj=0;jLevel;j+)dMatrixi,j=MatrixListi,j;doublec,x;intk=1;for(inti=0,j=0;iLevel&jLevel;i+,j+)if(dMatrixi,j=0)intm=i;for(;dMatrixm-2,j=0;m+);if(m=Level)return0;else/Rowchangebetweeni-rowandm-rowfor(intn=j;ni;s-)x=dMatrixs,j;for(intt=j;tLevel;t+)dMatrixs,t-=dMatrixi,t*(x/dMatrixi,j);doublesn=1;for(inti=0;iLevel;i+)if(dMatrixi,i!
=0)sn*=dMatrixi,i;elsereturn0;returnk*sn;privatevoidoutput()Console.WriteLine(外方位元素Xs:
t0m,Xs);Console.WriteLine(外方位元素Ys:
t0m,Ys);Console.WriteLine(外方位元素Zs:
t0m,Zs);Console.WriteLine(外方位元素:
t0度,*n);Console.WriteLine(外方位元素:
t0度,*n);Console.WriteLine(外方位元素:
t0度,*n);for(inti=0;i=0.00002|Math.Abs(Dv1,0)=0.00002|Math.Abs(Dv2,0)=0.00002|Math.Abs(Dv3,0)=0.00002|Math.Abs(Dv4,0)=0.00002|Math.Abs(Dv5,0)=0.00002|Math.Abs(V0,0)=0.00002|Math.Abs(V1,0)=0.00002|Math.Abs(V2,0)=0.00002|Math.Abs(V3,0)=0.00002|Math.Abs(V4,0)=0.00002|Math.Abs(V5,0)=0.00002|Math.Abs(V6,0)=0.00002|Math.Abs(V7,0)=0.00002);output();staticvoidMain(stringargs)ProgramHS=newProgram();HS.xhqiujie();结果如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 摄影 测量 后方 交会 求解 外方 元素