




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
测绘程序设计(VC.net)上机实验报告(Visual C+.Net)班 级: 测绘1402 学 号: 0401140207 姓 名: 施庆章 序 号: sm_207 二零一六年五月实验4 函数一、实验目的 掌握函数的定义、引用及应用方法。二、实验内容1.交会定点计算函数设计把前方交会、测边交会、后方交会程序写成函数的形式,然后再通过主程序调用。提示:后方交会计算函数设计思路(1) 基本原理及计算公式。若将Pa、Pb、Pc看成权,则P点的坐标即为三个已知点的加权平均值(2)计算程序设计步骤设计界面,用于输入3个已知点的坐标和三个观测角a、b和g,以及用于输出待定点坐标的文本框(12个)、静态标签框和Button按钮;定义文本框控件变量(Value);创建后方交会定点计算函数,函数的输入为三个观测角和三个已知点的坐标,输出为待定点坐标,输出可以用引用参数的方式输出,具体计算步骤;a.根据已知点计算三个内角A、B、C;b.计算Tan(a)、Tan(b)、Tan(g)、Tan(A)、Tan(B)、Tan(C);c.计算Pa、Pb、Pc;d.计算待定点坐标Xp、Yp。创建“计算”Button按钮的Click事件函数,在该事件函数中调用后方交会计算函数,并在相应的文本框中显示计算结果。2.高斯投影正反算计算函数设计编写高斯投影正算与反算的两个函数,并设计简单界面对函数计算的正确性进行测试。 正算公式: 长半轴第一偏心率是要求的点到中央子午线的经度差,为底点纬度 下标“f”表示与有关量 反算公式:即,y=0时 x 所对应道的子午弧长界面设计:控件类型控件ID控件名称变量函数EditControlIDC_EDITx1x1EditControlIDC_EDITx2x2EditControl IDC_EDITy1y1EditControlIDC_EDITy2y2EditControlIDC_EDITDapDapEditControlIDC_EDITDbpDbpEditControlIDC_EDITxpxpEditControlIDC_EDITypypEditControlIDC_EDITX1X1EditControlIDC_EDITX2X2EditControlIDC_EDITY1Y1EditControlIDC_EDITY2Y2EditControlIDC_EDITalphaaEditControlIDC_EDITbettabEditControlIDC_EDITXpXpEditControlIDC_EDITYpYpButtonID_BUTTON_DELETE清除OnBnClickedDELETEButtonID_BUTTON_OK2计算前方交会OnBnClickedOK2ButtonID_BUTTON_OK计算侧方交会OnBnClickedOKButtonID_BUTTON_CANCLE取消OnBnClickedCANCLE控件类型控件ID变量控件名称函数EditControlIDC_EDITXAXAEditControlIDC_EDITYAYAEditControlIDC_EDITXBXBEditControlIDC_EDITYBYBEditControlIDC_EDITXCXCEditControlIDC_EDITYCYCEditControlIDC_EDITalphaalphaEditControlIDC_EDITbettabettaEditControlIDC_EDITgammagammaEditControlIDC_EDITXPXPEditControlIDC_EDITYPYPButtonID_BUTTON_OK计算OnBnClickedOKButtonID_BUTTON_DELETE清除OnBnClickedELETE控件类型控件ID变量控件名称函数EditControlIDC_EDITXXEditControlIDC_EDITYYEditControlIDC_EDITB BEditControlIDC_EDITL LEditControlIDC_EDIT2nButtonID_BUTTON_ InverseOnBnClickedInverseButtonID_BUTTON_ DeleteOnBnClickedDeleteButtonID_BUTTON_CoordinateOnBnClickedCoordinateButtonID_BUTTON_ CancelOnBnClickedCancel主要代码:double PI=3.1415926;double EPSILON=1.0E-10;void FowardIntersection(double Xa1,double Ya1,double Xb1,double Yb1,double a,double b,double& Xp1,double& Yp1) /前方交会函数double cota=1/tan(a);double cotb=1/tan(b);Xp1=(Xa1*cotb+Xb1*cota+Yb1-Ya1)/(cota+cotb);Yp1=(Ya1*cotb+Yb1*cota+Xa1-Xb1)/(cota+cotb);void SideIntersection(double Xa2,double Ya2,double Xb2,double Yb2,double Dap,double Dbp,double& Xp2,double& Yp2) /侧方交会函数double dx=Xb2-Xa2;double dy=Yb2-Ya2+EPSILON;/计算AB方位角(弧度制)double angleAB;if(dy=0)angleAB=0.5*PI-atan(dx/dy);elseangleAB=1.5*PI-atan(dx/dy);/计算角Adouble Dab; /AB边长double A; /角Adouble angleAP; /方位角APDab=sqrt(Xb2-Xa2)*(Xb2-Xa2)+(Yb2-Ya2)*(Yb2-Ya2);A=acos(Dab*Dab+Dap*Dap-Dbp*Dbp)/(2*Dab*Dap); angleAP=angleAB-A;Xp2=Xa2+Dap*cos(angleAP);Yp2=Ya2+Dap*sin(angleAP);void Csqz2Dlg:OnBnClickedCancle()/清空数据UpdateData(true);X1=0;Y1=0;X2=0;Y2=0;a=0;b=0;Xp=0;Yp=0;x1=0;y1=0;x2=0;y2=0;Dap=0;Dbp=0;xp=0;yp=0;UpdateData(false);void Csqz2Dlg:OnBnClickedOk2()/进行侧方交会计算UpdateData(true);SideIntersection(x1,y1,x2,y2,Dap,Dbp,xp,yp); /调用函数UpdateData(false); void Csqz2Dlg:OnBnClickedOk()/进行前方交会计算UpdateData(true);FowardIntersection(X1,Y1,X2,Y2,a,b,Xp,Yp); /调用函数UpdateData(false);double Pxy(double x,double y) /计算x,y的函数double P; P=(tan(x)*tan(y)/(tan(x)-tan(y);return P;void CsqzDlg:OnBnClickedOk()/进行后方交会的计算UpdateData(TRUE);double Pa;double Pb;double Pc;double a,b,c,A,B,C;a=sqrt(XC-XB)*(XC-XB)+(YC-YB)*(YC-YB); b=sqrt(XC-XA)*(XC-XA)+(YC-YA)*(YC-YA);c=sqrt(XB-XA)*(XB-XA)+(YB-YA)-(YB-YA);A=acos(b*b+c*c-a*a)/(2*b*c)*180/3.1415926;B=acos(a*a+c*c-b*b)/(2*a*c)*180/3.1415926; C=acos(b*b+a*a-c*c)/(2*b*a)*180/3.1415926;if(alpha+betta+C190) /判断危险圆Pa=Pxy(alpha,A);Pb=Pxy(betta,B);Pc=Pxy(gamma,C);XP=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc);YP=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc); elseMessageBox(_T(该点位于危险圆上); UpdateData(FALSE);#include math.hdouble PI=3.1415926; /一些常数的定义double p2=206265;double a=6378140.0;double b=6356755.2881575287;double e=(sqrt(a*a-b*b)/a;double e1=(sqrt(a*a-b*b)/b;double dmstodgree(double dmg) /度分秒转换成度double dge;int Dgree;int Min;int Secend;Dgree=int(dmg);/截取度的整数部分 Min=int(dmg-Dgree)*100);/截取分的部分Secend=int(dmg-Dgree)*100-Min)*100;/截取秒的部分dge=Dgree+(Min/60)+(Secend/3600);/将度分秒转换为度return dge;/返回度double dgreetodms(double drg)/度转换成度分秒 double dge;int Dgree;int Min;int Secend; Dgree=int(drg);/截取度的整数部分 Min=int(drg-Dgree)*60);/截取分的整数部分 Secend=int(drg-Dgree)*60-Min)*60);/截取秒的整数部分 dge=Dgree+Min/100+Secend/10000;/将度转换成度分秒return dge;/返回度分秒double caculateS(double B) /计算Xdouble A0=1+3/4*e*e+45/64*pow(e,4)+350/512*pow(e,6)+11025/16384*pow(e,8);double A2=-1/2*(3/4*e*e+60/64*pow(e,4)+525/512*pow(e,6)+17640/16384*pow(e,8);double A4=1/4*(15/64*pow(e,4)+210/512*pow(e,6)+8820/16384*pow(e,8);double A6=-1/6*(35/512*pow(e,6)+2520/16384*pow(e,8);double A8=1/8*(315/16384*pow(e,8); double S=a*(1-e*e)*(A0*B+A2*sin(2*B)+A4*sin(4*B)+A6*sin(6*B)+A8*sin(8*B);return S;double caculateBf(double X) /计算Bf double A0=1+3/4*e*e+45/64*pow(e,4)+350/512*pow(e,6)+11025/16384*pow(e,8);double B0=caculateS(X)/(a*(1-e*e)*A0);double k0=1/2*(3/4*e*e+45/64*pow(e,4)+350/512*pow(e,6)+11025/16384*pow(e,8);double k2=-1/3*(63/64*pow(e,4)+1108/512*pow(e,6)+58239/16384*pow(e,8);double k4=1/3*(604/512*pow(e,6)+68484/16384*pow(e,8);double k6=-1/3*(26328/16384*pow(e,8);double Bf=B0+sin(2*B0)*(k0+sin(B0)*sin(B0)*(k2+sin(B0)*sin(B0)*(k4+k6*sin(B0)*sin(B0);return Bf;void coordinatecalculate(double B,double L,double n,double &X,double&Y) /正算 double dl=dmstodgree(L);double N=dmstodgree(n);double l=(dl-N)*3600/206265;double b=dmstodgree(B)*PI/180; double n1=e1*cos(b);double t=tan(b);double N1=a/sqrt(1-e*e*sin(b)*sin(b); double l2=abs(l-(int(l)*6-3)*3600;/经度L同当前子午线的差值单位为秒double s=p2*p2*p2*p2;double v=l2*l2*l2*l2;double u=cos(b)*cos(b)*cos(b);X=caculateS(X)+N1/(2*(p2)*(p2)*sin(b)*cos(b)*(l2)*(l2)+N/(24*(p2)*(p2)*sin(b)*u*(5-t*t+9*n1*n1+4*n1*n1*n1*n1)*v+N1/(720*p2*p2*s)*sin(b)*cos(b)*cos(b)*u*(61-58*t*t+t*t*t*t)*l2*l2*v;Y=N1/(p2)*cos(b)*(l2)+N*p2/(6*s)*u*(1-t*t+n*n)*v/l2+N1/(120*p2*s)*cos(b)*cos(b)*u*(5-18*t*t+t*t*t*t-58*n1*n1*t*t)*l2*v; void coordinateinversecalculation(double X,double Y,double n,double &B,double &L) /反算 double Bf=caculateBf(X);double x=X; double Tf=tan(Bf);double nf=e1*cos(Bf); double Nf=a/sqrt(1-e*e*sin(Bf)*sin(Bf);double Mf=Nf/(1+e1*e1*cos(Bf)*cos(Bf);double g=Nf*Nf*Nf*Nf;double h=Y*Y*Y*Y;double c=Tf*Tf*Tf*Tf;double b=Bf-Tf/(2*Mf*Nf)*Y*Y+Tf/(24*Mf*pow(Nf,3)*(5+3*Tf*Tf+nf*nf-9*nf*nf*Tf*Tf)*h-Tf/(720*Mf*pow(Nf,5)*(61+90*Tf*Tf+45*c)*h*Y*Y;double l=1/(Nf*cos(Bf)*Y-Nf/(6*g*cos(Bf)*(1+2*Tf*Tf+nf*nf)*h/Y+1/(120*Nf*g*cos(Bf)*(5+28*Tf*Tf+24*c+6*nf*nf+8*nf*nf*Tf*Tf)*h*Y;l=l+n;B=dmstodgree(b); /转换L=dmstodgree(l);void qingchu(double X,double Y,double n,double B,double L) /清除X=0;Y=0;n=0;B=0;L=0;void CCalculationofcoordinate
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三农经济统计分析与研究方案集锦
- 客户服务投诉处理表
- 防渗渠道施工方案
- 家装施工方案范本
- 水电工法展示样板施工方案
- 挖掘机打管桩施工方案
- 工厂环氧地坪工程施工方案
- 初一下人教版数学试卷
- 香港动力源国际有限公司股东全部权益价值资产评估报告
- 宁波复式屋顶花园施工方案
- 世界各国区号大全
- 认识医生和护士PPT完整版
- 十二经络及常用穴位
- 第四章 新闻职业道德失范:虚假新闻1
- 护士延续注册体检表通用
- 高标准农田建设勘测可研规划设计与预算编制技术方案
- 【炒股必看】股票基础学习-实战篇、股票入门、股票基础知识、股市入门、炒股、股市、股市入门基础知识
- 穿堤涵闸工程施工方案
- 某污水处理厂设计倒置a2o工艺
- 贯入法砌筑砂浆抗压强度报告
- GB/T 6495.2-1996光伏器件第2部分:标准太阳电池的要求
评论
0/150
提交评论