1、 double Q; afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); afx_msg void OnBnClickedButton1(); double A;/ 0145110615 ymh 2.1Dlg.cpp : 实现文件#include stdafx.h0145110615 ymh 2.1.h0145110615 ymh 2.1Dlg.h#include #ifdef _DEBUG#define new DEBUG_NEW#endifvoid CMy0145110615ymh21Dlg:OnBnClicked
2、Ok()/计算 / TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if(x0) if(y Q=1; A=atan(y/x);/x大于y大于在第一象限 elseQ=4; A=atan(y/x)+270;/x大于y小于在第四象限 else if(y Q=2; A=atan(y/x)+90;/x大于y小于在第二象限 elseQ=3; A=atan(y/x)+180;/x小于y小于在第三象限 UpdateData(FALSE); /OnOK();OnBnClickedCancel()/清除/ TODO: UpdateData(true); x=0; y=0; Q=0;
3、A=0; UpdateData(false);OnBnClickedButton1()/退出 OnCancel();运行结果:总 结 第一次做这个实验的时候真的觉得挺难得可是当我经过更难的实验的洗礼之后在返回来看它真是顿时亲切了许多,其实当时是对这个软件不了解简单的东西把它想得很复杂绕来绕去都不知道该怎么实现一些很简单的东西了。实验2.2 .设计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。(提示:用 dowhile 迭代,B、H 初始为 0 进行迭代,直到 H 的精度达到 0.00001米)注意:东经 0180(Y0),西经:0-180(Y式中,B、L、H 为椭球面上的
4、大地纬度、大地经度、大地高;X、Y、Z 为空间直角坐标;N 为卯酉圈曲率半径,e 为椭球的偏心率,a 为椭球的长半径,b 为椭球的短半径。 (WGS84 椭球参数:长半径 a=6378137m,扁率=1/298.257223563)在按钮下面设置主程序,按照指导书给的思路编辑公式 / 0145110615 ymh 2.2Dlg.h : double B; double L; double H; double X; double Y; double Z;/ 0145110615 ymh 2.2Dlg.cpp :0145110615 ymh 2.2.h0145110615 ymh 2.2Dlg.h
5、void CMy0145110615ymh22Dlg:OnBnClickedOk()/大地坐标转换为空间直角坐标 double r=1/298.257223563; double e=sqrt(2*r)-(r*r); int a=6378137; double W=sqrt(1-e*e*sin(B)*sin(B); double N=a/W; X=(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 基本原理及计算
6、公式若将 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。界面要求:三个坐标输入框,两个角度输入框一个坐标结果输出框一个计算按钮,一个清除按钮,一个退出按钮。2.由三角形三
7、个边长求内角函数计算公式: 设计思路:通过示例编辑框添加变量,在按钮下面添加程序。先将、的度分秒之转换成度利用三角形内角和等于180算出并将转换成弧度。接着计算三角形的内角,判断P点是否在危险圆上若不在则计算P点坐标若在则弹出“该点在危险圆上”。 afx_msg void OnEnChangeEdit5(); double XA; double YA; double XB; double YB; double XC; double YC; double alfa; double bet; double Xp; double Yp;dss2-3.hdss2-3Dlg.hconst double
8、PI=3.1415926535897932;void Cdss23Dlg:OnBnClickedButton1() double afAB,afAC,afBC,afBA,afCA,afCB,A,B,C,Pa,Pb,Pc; int D1,M1,D2,M2; double S1,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转换
9、成度 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的值转换成弧度 /计算已知点的三个内角 afAB=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
10、)/(XA-XC); afCB=atan(YB-YC)/(XB-XC); A=afAB-afAC; B=afBC-afBA; C=afCA-afCB; /判断点是否在危险圆上若不在则计算P点坐标 if(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)/(P
11、a+Pb+Pc); else/若在则弹出“该点位于危险圆上” MessageBox(_T(该点位于危险圆上); /OnCancel();OnBnClickedOk() XA=0; YA=0; XB=0; YB=0; XC=0; YC=0; alfa=0; bet=0; Xp=0; Yp=0;; 本次实验刚开始还是遇到了很多问题的比如说根本不就不知道该如何用程序来实现后方交会这个过程,后来经过问同学、上网查资料等大概弄懂了实现步骤可是写完程序后我发现他根本计算不了点计算按按钮一点反应都没有。又开始找问题才发现是UpdateData(FALSE)和UpdateData(TRUE)忘写了,还发现程序
12、中没有进行度分秒到度的转换,就顺便把这个实现也加进去了。这个程序也就算完成了。实验 三 数组、指针与函数一、实验目的 掌握数组的定义、引用及应用方法。 掌握指针与动态数组。 掌握函数的定义、引用及应用方法。二、实验内容1.编写一个求任意多边形面积的程序。通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。要求计算部分写成函数的形式,使计算程序与界面无关。动态数组创建动态数组 结构体的定义多边形面积计算原理及算法计算原理:面积计算的算法:显示框用 Cedit 控件变量对每个输入的坐标 用 CString str 临时变量 格式化,然后用 CEdit
13、的控件变量插入将实现写在按钮在下面。添加顶点下面实现创建动态数组,确认按钮实现返回数组大小值并将添加的数据显示到显示框中去,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据,退出按钮退出程序。/ 实现 double result; CEdit edit; afx_msg void OnBnClickedButton4(); afx_msg void OnBnClickedButton3(); afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton5(); int n; double *px; double
14、*py; CEdit m_strdis;0145110615(3).h0145110615(3)Dlg.h/ 用于应用程序“关于”菜单项的CAboutDlg 对话框double calarea(double x,double y,int n) double s=0; int i; for(i=0;in)Warning! ; str.Format(_T(No.%d % lf %lf rn),t,x,y); m_strdis.ReplaceSel(str); pxt-1=x; pyt-1=y;OnBnClickedButton5() exit(0);总 结:这个实验相比前面几个实验感觉难了好多。首
15、先是不知道怎么实现动态数组也不知道怎样将输入的内容显示到示例编辑框里。总之在眼前的都是一堆问题,但面临的问题总得解决所以就只能看书、上网查资料、问同学等各种方法来解决问题,最终把问题解决。实验 四 类的创建1. 掌握面向对象编程基本思想2. 掌握 VC+.net 中创建类3. 掌握建立和使用对象4. 掌握运算符号重载5. 理解类的继承和多态性1.设计一个角度类。要求该类具有度分秒至度的换算、度至度分秒的换算、度与弧度的换算等功能。设置一个角度大小属性,并设定该属性为缺省属性;另设一个状态属性,表示当前设置的角度大小的形式;度分秒、度、弧度间的相互转换的方法;定义运算符号(加、减)方法,使得角度
16、类能够像一种普通的数据类型样的方便使用。设计一个角度类在类的头文件里申明度到度分秒的转换、度分秒到度的转换、度到弧度的转换、运算符的重载,在类的.cpp文件中写出具体的函数实现,在按钮下面调用类的各个函数来实现角度的转换。 double dmstodgree(double dmg);/声明度分秒到度的转换函数 double dgreetodms(double drgree);/声明度到度分秒的转换函数 double dgreetohd(double dgree);/声明度到弧度的转换函数 double dgree; double dms; double hd; void Cymh4Dlg:On
17、BnClickedCancel()void Cymh4Dlg: Angle sf; sf.dgreetodms(dgree); sf.dmstodgree(dms); sf.dgreetohd(dgree); dgree=0; dms=0; hd=0; 运行结果:这个实验调试最终没有通过所以没有结果 这个实验给我的最大的感受是细节决定成败,实践总会比想象的困难,虽然我非常清除实验原理可是但我按照我的思路去写的时候各种调试改还是有错,我不清楚为什么Angle sf;这样的语句在程序七中调试能通过而这个程序中却死活不行。实验 五文 件 掌握文件对话框的使用方法。 掌握 C+文件操作的一般步骤及实现方法。 了解 MFC 文件操作的特点及使用方法。1. 编制简单的 Cass 数据文件进行数据整理的程序。整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件示例数据“民用园燃气.dat”文件数据格式:总点数点号,编码,X,Y,H例如:要求:a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件名。b.自定义一个测量点数据结构体,其元素包括:c.用文本框显示原始数据