您好,欢迎访问三七文档
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.IO;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Collections;namespace摄影测量学实验程序设计{publicpartialclass空间后方交会:Form{public空间后方交会(){InitializeComponent();}privatevoidbutton4_Click(objectsender,EventArgse){this.Dispose();}privateArrayListlist=newArrayList();doublef,x0,y0,xs,ys,zs,fiu,omg,kaf;doublem;doublem0;intloop;double[]mx=newdouble[6];privatevoidbutton1_Click(objectsender,EventArgse){stringpath=Application.StartupPath+\\空间后方交会控制点文件.txt;StreamReadersr=newStreamReader(path);Stringline;string[]splits=null;line=sr.ReadLine();splits=line.Split(',');f=Convert.ToDouble(splits[0]);x0=Convert.ToDouble(splits[1]);y0=Convert.ToDouble(splits[2]);m=Convert.ToDouble(splits[3]);do{line=sr.ReadLine();if(line==null){break;}list.Add(line);}while(line!=null);sr.Close();//StreamReadersr;//Stringline,strfilename;//string[]splits=null;//OpenFileDialogopnDlg=newOpenFileDialog();//opnDlg.Filter=文本文件(*.txt)|*.txt;//opnDlg.Title=打开控制点文件;//opnDlg.ShowHelp=true;//if(opnDlg.ShowDialog()==DialogResult.OK)//{//strfilename=opnDlg.FileName;//sr=newStreamReader(opnDlg.FileName);//line=sr.ReadLine();//splits=line.Split(',');//f=Convert.ToDouble(splits[0]);//x0=Convert.ToDouble(splits[1]);//y0=Convert.ToDouble(splits[2]);//m=Convert.ToDouble(splits[3]);//do//{//line=sr.ReadLine();//if(line==null)//{break;}//list.Add(line);//}while(line!=null);//sr.Close();//}MessageBox.Show(已知数据和观测数据已经读入!,数据读取进程提示,MessageBoxButtons.OK);}privatevoidbutton2_Click(objectsender,EventArgse){//intnum=list.Count;stringline;string[]splits=null;int[]id=newint[num];double[]xp=newdouble[num];double[]yp=newdouble[num];double[]xt=newdouble[num];double[]yt=newdouble[num];double[]zt=newdouble[num];inti,j,k;for(i=0;i=num-1;i++){line=Convert.ToString(list[i]);splits=line.Split(',');id[i]=Convert.ToInt16(splits[0]);xp[i]=Convert.ToDouble(splits[1]);yp[i]=Convert.ToDouble(splits[2]);xt[i]=Convert.ToDouble(splits[3]);yt[i]=Convert.ToDouble(splits[4]);zt[i]=Convert.ToDouble(splits[5]);}//定义平差计算变量double[,]b=newdouble[2,6];double[]l=newdouble[2];double[,]n=newdouble[6,6];double[]w=newdouble[6];double[,]q=newdouble[6,6];double[]x=newdouble[6];doublexp0,yp0;double[]vx=newdouble[4];double[]vy=newdouble[4];doublea1,a2,a3,b1,b2,b3,c1,c2,c3;doublexh,yh,zh;fiu=0;omg=0;kaf=0;zs=m*f/1000;doublesx,sy;sx=0;sy=0;for(i=0;i=num-1;i++){sx=sx+xt[i];sy=sy+yt[i];}xs=sx/num;ys=sy/num;loop=0;loop1:loop=loop+1;a1=Math.Cos(fiu)*Math.Cos(kaf)-Math.Sin(fiu)*Math.Sin(omg)*Math.Sin(kaf);a2=-Math.Cos(fiu)*Math.Sin(kaf)-Math.Sin(fiu)*Math.Sin(omg)*Math.Cos(kaf);a3=-Math.Sin(fiu)*Math.Cos(omg);b1=Math.Cos(omg)*Math.Sin(kaf);b2=Math.Cos(omg)*Math.Cos(kaf);b3=-Math.Sin(omg);c1=Math.Sin(fiu)*Math.Cos(kaf)+Math.Cos(fiu)*Math.Sin(omg)*Math.Sin(kaf);c2=-Math.Sin(fiu)*Math.Sin(kaf)+Math.Cos(fiu)*Math.Sin(omg)*Math.Cos(kaf);c3=Math.Cos(fiu)*Math.Cos(omg);for(i=0;i=5;i++)//法方程式系数和常数项置零{for(j=0;j=5;j++){n[i,j]=0;}w[i]=0;x[i]=0;}//逐点建立误差法方程式for(k=0;k=num-1;k++){for(i=0;i=1;i++)//各点的误差方程式系数和常数项置零{for(j=0;j=5;j++){b[i,j]=0;}l[i]=0;}xh=a1*(xt[k]-xs)+b1*(yt[k]-ys)+c1*(zt[k]-zs);yh=a2*(xt[k]-xs)+b2*(yt[k]-ys)+c2*(zt[k]-zs);zh=a3*(xt[k]-xs)+b3*(yt[k]-ys)+c3*(zt[k]-zs);xp0=-f*(xh/zh);yp0=-f*(yh/zh);l[0]=xp[k]-x0-xp0;l[1]=yp[k]-y0-yp0;vx[k]=l[0];vy[k]=l[1];b[0,0]=(a1*f+a3*(xp[k]-x0))/zh;b[0,1]=(b1*f+b3*(xp[k]-x0))/zh;b[0,2]=(c1*f+c3*(xp[k]-x0))/zh;b[1,0]=(a2*f+a3*(yp[k]-y0))/zh;b[1,1]=(b2*f+b3*(yp[k]-y0))/zh;b[1,2]=(c2*f+c3*(yp[k]-y0))/zh;b[0,3]=(yp[k]-y0)*Math.Sin(omg)-((xp[k]-x0)/f*((xp[k]-x0)*Math.Cos(kaf)-(yp[k]-y0)*Math.Sin(kaf))+f*Math.Cos(kaf))*Math.Cos(omg);b[0,4]=-f*Math.Sin(kaf)-(xp[k]-x0)/f*((xp[k]-x0)*Math.Sin(kaf)+(yp[k]-y0)*Math.Cos(kaf));b[0,5]=yp[k]-y0;b[1,3]=-(xp[k]-x0)*Math.Sin(omg)-((yp[k]-y0)/f*((xp[k]-x0)*Math.Cos(kaf)-(yp[k]-y0)*Math.Sin(kaf))-f*Math.Sin(kaf))*Math.Cos(omg);b[1,4]=-f*Math.Cos(kaf)-(yp[k]-y0)/f*((xp[k]-x0)*Math.Sin(kaf)+(yp[k]-y0)*Math.Cos(kaf));b[1,5]=-(xp[k]-x0);//逐点建立法方程式for(i=0;i=5;i++){for(j=0;j=5;j++){n[i,j]=n[i,j]+b[0,i]*b[0,j]+b[1,i]*b[1,j];}}for(i=0;i=5;i++){w[i]=w[i]+b[0,i]*l[0]+b[1,i]*l[1];}}////求逆q=inv(6,n);//求未知数for(i=0;i=5;i++){for(j=0;j=5;j++){x[i]=x[i]+q[i,j]*w[j];}}xs=xs+x[0];ys=ys+x[1];zs=zs+x[2];fiu=fiu+x[3];omg=omg+x[4];kaf=kaf+x[5];doublemax=Math.Abs(x[0]);for(i=1;i=5;i++){if(Math.Abs(x[i])=max){max=Math.Abs(x[i]);}}if(max=Convert.ToDouble(textBox2.Text)){gotoloop1;}//精度评定doublevv=0;for(k=0;k=num-1;k++){vv=vv+vx[k]*vx[k]+vy[k]*vy[k];}m0=Math.Sqrt(vv/2);for(k=0;k=5;k++){mx[k]=m0*Math.Sqrt(q[k,k]);}textBox1.Text=Convert.ToString(loop);MessageBox.Show(平差计算已经完成,请确定是否保存数据!,平差计算进程提示,MessageBoxButtons.OK);}publicdouble[,]inv(intm,double[,]n)//求逆函数{double[,]q=newdouble[m,m];//法方程系数逆矩阵;doubleu;inti;intj;intk;//求逆//置零for(i=0;i=m-1;i++){for(j=0;j=m-1;j++){if(i==j){q[i,j]=1;}else{q[i,j]=0;}}}//'求左下for(i=0;i=m-2;i++){u=n[i,i];for(j=0;j=m-1;j++){n[i,j]=n[i,j]/u;q[i,j]=q[i,j]/u;}for(k=i+1;k=m-1;k++){u=n[k,i];for(j=0;j=m-1;j++){n[k,j]=n[k
本文标题:后方交会代码样本
链接地址:https://www.777doc.com/doc-5752098 .html