您好,欢迎访问三七文档
1实验1VisualC++.Net环境和程序设计初步1.掌握VC++.net语言的基本语法;2.理解顺序结构、选择结构和循环结构程序设计的特点及应用;3.掌握对基于对话框的MFC应用程序设计方法;4.掌握一些简单算法。5.编写一个方位角计算程序。提示:先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。设计思路:在按钮下面添加程序。XY同时大于0在第一象限,方位角等于arctan(y/x);X0,Y0在第二象限,方位角等于arctan(y/x)+90;X0,Y0在第三象限,方位角等于arctan(y/x)+180;X0,Y0在第四象限,方位角等于arctan(y/x)+270;界面设计:主要代码://0145110615ymh2.1Dlg.h:头文件protected:HICONm_hIcon;//生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);2afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:doublex;doubley;doubleQ;afx_msgvoidOnBnClickedOk();afx_msgvoidOnBnClickedCancel();afx_msgvoidOnBnClickedButton1();doubleA;};//0145110615ymh2.1Dlg.cpp:实现文件#includestdafx.h#include0145110615ymh2.1.h#include0145110615ymh2.1Dlg.h#includemath.h#ifdef_DEBUG#definenewDEBUG_NEW#endifvoidCMy0145110615ymh21Dlg::OnBnClickedOk()//计算{//TODO:在此添加控件通知处理程序代码UpdateData(TRUE);if(x0){if(y0){Q=1;A=atan(y/x);}//x大于y大于在第一象限else{Q=4;A=atan(y/x)+270;}//x大于y小于在第四象限}elseif(y0){Q=2;A=atan(y/x)+90;}//x大于y小于在第二象限else{Q=3;A=atan(y/x)+180;}//x小于y小于在第三象限UpdateData(FALSE);//OnOK();}voidCMy0145110615ymh21Dlg::OnBnClickedCancel()//清除{//TODO:在此添加控件通知处理程序代码UpdateData(true);x=0;3y=0;Q=0;A=0;UpdateData(false);}voidCMy0145110615ymh21Dlg::OnBnClickedButton1()//退出{//TODO:在此添加控件通知处理程序代码OnCancel();}运行结果:总结第一次做这个实验的时候真的觉得挺难得可是当我经过更难的实验的洗礼之后在返回来看它真是顿时亲切了许多,其实当时是对这个软件不了解简单的东西把它想得很复杂绕来绕去都不知道该怎么实现一些很简单的东西了。实验2.2.设计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。4(提示:用do…while迭代,B、H初始为0进行迭代,直到H的精度达到0.00001米)注意:东经0~180(Y0),西经:0~-180(Y0)式中,B、L、H为椭球面上的大地纬度、大地经度、大地高;X、Y、Z为空间直角坐标;N为卯酉圈曲率半径,e为椭球的偏心率,a为椭球的长半径,b为椭球的短半径。(WGS84椭球参数:长半径a=6378137m,扁率α=1/298.257223563)设计思路:在按钮下面设置主程序,按照指导书给的思路编辑公式界面设计:5主要代码://0145110615ymh2.2Dlg.h:头文件protected:HICONm_hIcon;//生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:doubleB;doubleL;doubleH;doubleX;doubleY;doubleZ;afx_msgvoidOnBnClickedOk();};//0145110615ymh2.2Dlg.cpp:实现文件#includestdafx.h#include0145110615ymh2.2.h#include0145110615ymh2.2Dlg.h#includemath.h#ifdef_DEBUG#definenewDEBUG_NEW#endifvoidCMy0145110615ymh22Dlg::OnBnClickedOk()//大地坐标转换为空间直角坐标{//TODO:在此添加控件通知处理程序代码UpdateData(true);doubler=1/298.257223563;doublee=sqrt((2*r)-(r*r));inta=6378137;doubleW=sqrt(1-e*e*sin(B)*sin(B));doubleN=a/W;6X=(N+H)*cos(B)*cos(L);Y=(N+H)*cos(B)*cos(L);Z=(N*(1-e*e)+H)*sin(B);UpdateData(false);//OnOK();运行结果:。实验2.3.编写一个后方交会计算程序。3.1基本原理及计算公式若将Pa、Pb、Pc看成权,则P点的坐标即为三个已知点的加权平均值3.2计算程序设计步骤(1)设计界面,用于输入3于输出待定点坐标的文本框(12个)、静态标签框和Button按钮;(2)定义文本框控件变量(Value);(3)根据已知点计算三个内角A、B、C;(4)计算Tan()、Tan(β)、Tan(γ)、Tan(A)、Tan(B)、Tan(C);(5)计算Pa、Pb、Pc;(6)计算待定点坐标Xp、Yp。界面要求:三个坐标输入框,两个角度输入框一个坐标结果输出框7一个计算按钮,一个清除按钮,一个退出按钮。2.由三角形三个边长求内角函数计算公式:设计思路:通过示例编辑框添加变量,在按钮下面添加程序。先将α、β、的度分秒之转换成度利用三角形内角和等于180算出γ并将γ转换成弧度。接着计算三角形的内角,判断P点是否在危险圆上若不在则计算P点坐标若在则弹出“该点在危险圆上”。界面设计:主要代码:protected:HICONm_hIcon;//生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:8afx_msgvoidOnEnChangeEdit5();doubleXA;doubleYA;doubleXB;doubleYB;doubleXC;doubleYC;doublealfa;doublebet;doubleXp;doubleYp;afx_msgvoidOnBnClickedButton1();afx_msgvoidOnBnClickedOk();};#includestdafx.h#includedss2-3.h#includedss2-3Dlg.h#includemath.hconstdoublePI=3.1415926535897932;#ifdef_DEBUG#definenewDEBUG_NEW#endifvoidCdss23Dlg::OnBnClickedButton1(){//TODO:在此添加控件通知处理程序代码UpdateData(TRUE);doubleafAB,afAC,afBC,afBA,afCA,afCB,A,B,C,Pa,Pb,Pc;intD1,M1,D2,M2;doubleS1,S2,alfa1,bet1,gama1,alfa2,bet2,gama2;//将alfa转换成度D1=int(alfa);M1=int((alfa-D1)*100);S1=((alfa-D1)*100-M1)*100;alfa1=D1+M1/60+S1/3600;alfa2=alfa1*PI/180;//将bet转换成度D2=int(bet);M2=int((bet-D2)*100);S2=((bet-D2)*100-M2)*100;bet1=D2+M2/60+S2/3600;bet2=bet*PI/180;//计算gama1的值gama1=180-bet1-alfa1;gama2=gama1*PI/180;//将gama1的值转换成弧度//计算已知点的三个内角9afAB=atan((YB-YA)/(XB-XA));afAC=atan((YC-YA)/(XC-XA));afBA=atan((YA-YB)/(XA-XB));afBC=atan((YC-YB)/(XC-XB));afCA=atan((YA-YC)/(XA-XC));afCB=atan((YB-YC)/(XB-XC));A=afAB-afAC;B=afBC-afBA;C=afCA-afCB;//判断点是否在危险圆上若不在则计算P点坐标if(alfa+bet+C170||alfa+bet+C190){Pa=(tan(alfa2)*tan(A))/(tan(alfa2)-tan(A));Pb=(tan(bet2)*tan(B))/(tan(bet2)-tan(B));Pc=(tan(gama2)*tan(C))/(tan(gama2)-tan(C));Xp=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc);Yp=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc);}else//若在则弹出“该点位于危险圆上”MessageBox(_T(该点位于危险圆上));UpdateData(FALSE);//OnCancel();}voidCdss23Dlg::OnBnClickedOk(){//TODO:在此添加控件通知处理程序代码UpdateData(TRUE);XA=0;YA=0;XB=0;YB=0;XC=0;YC=0;alfa=0;bet=0;Xp=0;Yp=0;UpdateData(FALSE);//OnOK();};运行结果:10总结本次实验刚开始还是遇到了很多问题的比如说根本不就不知道该如何用程序来实现后方交会这个过程,后来经过问同学、上网查资料等大概弄懂了实现步骤可是写完程序后我发现他根本计算不了点计算按按钮一点反应都没有。又开始找问题才发现是UpdateData(FALSE)和UpdateData(TRUE)忘写了,还发现程序中没有进行度分秒到度的转换,就顺便把这个实现也加进去了。这个程序也就算完成了。实验三数组、指针与函数一、实验目的掌握数组的定义、引用及应用方法。11掌握指针与动态数组。掌握函数的定义、引用及应用方法。二、实验内容1.编写一个求任意多边形面积的程序。提示:通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。要求计算部分写成函数的形式,使计算程序与界面无关。动态数组创建动态数组结构体的定义多边形面积计算原理及算法计算原理:面积计算的算法:提示:显示框用Cedit控件变量对每个输入的坐标用CStringstr临时变量格式化,然后用CEdit的控件变量
本文标题:测绘程序实验报告
链接地址:https://www.777doc.com/doc-2229113 .html