测绘程序设计四-函数实验报告

上传人:第*** 文档编号:34234262 上传时间:2018-02-22 格式:DOC 页数:15 大小:388.50KB
返回 下载 相关 举报
测绘程序设计四-函数实验报告_第1页
第1页 / 共15页
测绘程序设计四-函数实验报告_第2页
第2页 / 共15页
测绘程序设计四-函数实验报告_第3页
第3页 / 共15页
测绘程序设计四-函数实验报告_第4页
第4页 / 共15页
测绘程序设计四-函数实验报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《测绘程序设计四-函数实验报告》由会员分享,可在线阅读,更多相关《测绘程序设计四-函数实验报告(15页珍藏版)》请在金锄头文库上搜索。

1、测绘程序设计(VC.net)上机实验报告(Visual C+.Net)班 级: 测绘 1402 学 号: 0401140207 姓 名: 施庆章 序 号: sm_207 二零一六年五月2实验 4 函数一、实验目的 掌握函数的定义、引用及应用方法。二、实验内容1.交会定点计算函数设计把前方交会、测边交会、后方交会程序写成函数的形式,然后再通过主程序调用。提示:后方交会计算函数设计思路(1) 基本原理及计算公式。若将 Pa、Pb、Pc 看成权,则 P 点的坐标即为三个已知点的加权平均值(2)计算程序设计步骤设计界面,用于输入 3 个已知点的坐标和三个观测角、 和,以及用于输出待定点坐标的文本框(1

2、2 个) 、静态标签框和 Button 按钮;定义文本框控件变量(Value) ;3创建后方交会定点计算函数,函数的输入为三个观测角和三个已知点的坐标,输出为待定点坐标,输出可以用引用参数的方式输出,具体计算步骤;a.根据已知点计算三个内角 A、B、C;b.计算 Tan()、Tan()、Tan( )、Tan(A)、Tan(B)、Tan(C);c.计算 Pa、Pb、Pc;d.计算待定点坐标 Xp、Yp。创建“计算”Button 按钮的 Click 事件函数,在该事件函数中调用后方交会计算函数,并在相应的文本框中显示计算结果。2.高斯投影正反算计算函数设计编写高斯投影正算与反算的两个函数,并设计简

3、单界面对函数计算的正确性进行测试。正算公式: 522425 3364256 4232 )818(cos120(s)861cosin70 )95(cosinslttBNly lt ltBNlBNXx BecosBeaN2sin1ae长半轴长半轴 第一偏心率第一偏心率tan abe2bae2 4反算公式: )sin(sinsin2sin 02640220200 BKBKBBf 020)1(AeaXxX即,即, y=0时时 x 所对应道的子午弧长所对应道的子午弧长 522425 3236425 42232 )868(cos120 1(cos6)5901(720 )9( ytttBNtyl yttMt

4、 yttNtytB ffffff ffffff ffff ffffffff lf是要求的点到中央子午线的经度差,为底点纬度 下标“f”表示与 f有关量 fff BeNM2cos1 ffeaN2sin1ffBecosfftan5界面设计:6控件类型 控件 ID 控件名称 变量 函数EditControl IDC_EDITx1 x1EditControl IDC_EDITx2 x2EditControl IDC_EDITy1 y1EditControl IDC_EDITy2 y2EditControl IDC_EDITDap DapEditControl IDC_EDITDbp DbpEditCo

5、ntrol IDC_EDITxp xpEditControl IDC_EDITyp ypEditControl IDC_EDITX1 X1EditControl IDC_EDITX2 X2EditControl IDC_EDITY1 Y1EditControl IDC_EDITY2 Y2EditControl IDC_EDITalpha aEditControl IDC_EDITbetta bEditControl IDC_EDITXp XpEditControl IDC_EDITYp YpButton ID_BUTTON_DELETE 清除 OnBnClickedDELETEButton I

6、D_BUTTON_OK2 计算前方交会 OnBnClickedOK27Button ID_BUTTON_OK 计算侧方交会 OnBnClickedOKButton ID_BUTTON_CANCLE 取消 OnBnClickedCANCLE控件类型 控件 ID 变量 控件名称 函数EditControl IDC_EDITXA XAEditControl IDC_EDITYA YAEditControl IDC_EDITXB XBEditControl IDC_EDITYB YBEditControl IDC_EDITXC XCEditControl IDC_EDITYC YCEditContro

7、l IDC_EDITalpha alphaEditControl IDC_EDITbetta bettaEditControl IDC_EDITgamma gammaEditControl IDC_EDITXP XPEditControl IDC_EDITYP YPButton ID_BUTTON_OK 计算 OnBnClickedOKButton ID_BUTTON_DELETE 清除 OnBnClickedELETE控件类型 控件 ID 变量控件名称函数EditControl IDC_EDITX XEditControl IDC_EDITY YEditControl IDC_EDITB B

8、EditControl IDC_EDITL LEditControl IDC_EDIT2 nButton ID_BUTTON_ Inverse OnBnClickedInverseButton ID_BUTTON_ Delete OnBnClickedDeleteButton ID_BUTTON_Coordinate OnBnClickedCoordinateButton ID_BUTTON_ Cancel OnBnClickedCancel8主要代码:double PI=3.1415926;double EPSILON=1.0E-10;void FowardIntersection(doub

9、le 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,dou

10、ble 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+Da

11、p*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;9b=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(t

12、rue);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:OnB

13、nClickedOk()/进行后方交会的计算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

14、-c*c)/(2*b*a)*180/3.1415926;10if(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;d

15、ouble 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;/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号