ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:269.56KB ,
资源ID:7675382      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7675382.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(测绘程序设计四 函数实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

2、标的文本框(12个)、静态标签框和Button按钮;定义文本框控件变量(Value);创建后方交会定点计算函数,函数的输入为三个观测角和三个已知点的坐标,输出为待定点坐标,输出可以用引用参数的方式输出,具体计算步骤;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、函数计算的正确性进行测试。 正算公式:反算公式:界面设计:控件类型控件ID控件名称变量函数EditControlIDC_EDITx1x1EditControlIDC_EDITx2x2EditControl IDC_EDITy1y1EditControlIDC_EDITy2y2EditControlIDC_EDITDapDapEditControlIDC_EDITDbpDbpEditControlIDC_EDITxpxpEditControlIDC_EDITypypEditControlIDC_EDITX1X1EditControlIDC_EDITX2X2EditControlIDC_EDITY

4、1Y1EditControlIDC_EDITY2Y2EditControlIDC_EDITalphaaEditControlIDC_EDITbettabEditControlIDC_EDITXpXpEditControlIDC_EDITYpYpButtonID_BUTTON_DELETE清除OnBnClickedDELETEButtonID_BUTTON_OK2计算前方交会OnBnClickedOK2ButtonID_BUTTON_OK计算侧方交会OnBnClickedOKButtonID_BUTTON_CANCLE取消OnBnClickedCANCLE控件类型控件ID变量控件名称函数Edit

5、ControlIDC_EDITXAXAEditControlIDC_EDITYAYAEditControlIDC_EDITXBXBEditControlIDC_EDITYBYBEditControlIDC_EDITXCXCEditControlIDC_EDITYCYCEditControlIDC_EDITalphaalphaEditControlIDC_EDITbettabettaEditControlIDC_EDITgammagammaEditControlIDC_EDITXPXPEditControlIDC_EDITYPYPButtonID_BUTTON_OK计算OnBnClickedOK

6、ButtonID_BUTTON_DELETE清除OnBnClickedELETE控件类型控件ID变量控件名称函数EditControlIDC_EDITXXEditControlIDC_EDITYYEditControlIDC_EDITB BEditControlIDC_EDITL LEditControlIDC_EDIT2nButtonID_BUTTON_ InverseOnBnClickedInverseButtonID_BUTTON_ DeleteOnBnClickedDeleteButtonID_BUTTON_CoordinateOnBnClickedCoordinateButtonID

7、_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*cot

8、b+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); else angleAB=1.5*PI-atan(dx/dy); /计

9、算角A double Dab; /AB边长 double A; /角A double angleAP; /方位角AP Dab=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

10、=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

11、,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)

12、*(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+

13、Pb+Pc); YP=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc); else MessageBox(_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 d

14、ge; 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);/截取度的整数部分

15、 Min=int(drg-Dgree)*60);/截取分的整数部分 Secend=int(drg-Dgree)*60-Min)*60);/截取秒的整数部分 dge=Dgree+Min/100+Secend/10000;/将度转换成度分秒 return dge;/返回度分秒double caculateS(double B) /计算X double 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)+17

16、640/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

17、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*po

18、w(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; dou

19、ble 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

20、)*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

21、&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*

22、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) /清

23、除 X=0; Y=0; n=0; B=0; L=0;void CCalculationofcoordinateDlg:OnBnClickedCoordinate()/正算 UpdateData(true); coordinatecalculate(B,L,n,X,Y); /调用正算函数 UpdateData(false);void CCalculationofcoordinateDlg:OnBnClickedInverse()/反算 UpdateData(true); coordinateinversecalculation(X,Y,n,B,L); /调用反算函数 UpdateData(fal

24、se);void CCalculationofcoordinateDlg:OnBnClickeddelete()/清除 UpdateData(true); qingchu(X,Y,n,B,L); UpdateData(false);void CCalculationofcoordinateDlg:OnBnClickedCancel()/退出 OnCancel();计算结果 总结 次实验虽然思维不复杂,但是因为高斯投影正反算公式比较复杂,导致工作量有点大,但还是顺利完成了。大量添加窗体或者控件后,发现无法由系统IDE自动生成代码,如自动添加按钮响应函数等,rc管理器界面双击按钮添加函数,会出现 提示框 “无法执行添加/移除操作,因为代码元素Csqz是只读的” 。始认为可能是对应的.cpp和.h被加了只读属性,后来发现是工程的ncb文件引起的。于是我在网上找到了答案,关闭vs,删除工程对应的.ncb文件,重启vs就好了。要特别注意这样复杂的字母比较多的情况下命名就特别的重要了。Welcome !欢迎您的下载,资料仅供参考!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1