测绘程序实验报告_第1页
测绘程序实验报告_第2页
测绘程序实验报告_第3页
测绘程序实验报告_第4页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.实验 1Visual C+.Net环境和程序设计初步1.掌握 VC+.net语言的基本语法 ;2.理解顺序结构 、选择结构和循环结构程序设计的特点及应用;3.掌握对基于对话框的MFC 应用程序设计方法 ;4.掌握一些简单算法 。5.编写一个方位角计算程序。提示:先使用反正切函数计算 ,然后利用坐标增量的符号来判断所在的象限。设计思路 :在按钮下面添加程序 。X Y 同时大于 0 在第一象限 ,方位角等于 arctan(y/x) ; X>0,Y<0 在第二象限 ,方位角等于 arctan(y/x)+90 ; X<0,Y<0 在第三象限,方位角等于 arctan(y/x)

2、+180 ;X<0,Y>0 在第四象限 ,方位角等于arctan(y/x)+270 ;界面设计:专业 .专注.主要代码 :头文件protected :HICON m_hIcon;/生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public :double x;double y;double Q;afx

3、_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();afx_msg void OnBnClickedButton1();double A;实现文件#include"stdafx.h"专业 .专注.#include<math.h>#ifdef _DEBUG#definenew DEBUG_NEW#endifvoid CMy0145110615ymh21Dlg:OnBnClickedOk()/ 计算/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);if(x>0)if(

4、y>0)Q=1;A=atan(y/x); /x 大于 y大于在第一象限elseQ=4;A=atan(y/x)+270;/x 大于 y小于在第四象限else if(y>0)Q=2;A=atan(y/x)+90; /x 大于 y小于在第二象限elseQ=3;A=atan(y/x)+180;/x 小于 y小于在第三象限UpdateData(FALSE);专业 .专注./OnOK();void CMy0145110615ymh21Dlg:OnBnClickedCancel()/ 清除/ TODO:在此添加控件通知处理程序代码UpdateData( true );x=0;y=0;Q=0;A=

5、0;UpdateData( false);void CMy0145110615ymh21Dlg:OnBnClickedButton1()/ 退出/ TODO:在此添加控件通知处理程序代码OnCancel();专业 .专注.运行结果:总结第一次做这个实验的时候真的觉得挺难得可是当我经过更难的实验的洗礼之后在返回来看它真是顿时亲切了许多,其实当时是对这个软件不了解简单的东西把它想得很复杂绕来绕去都不知道该怎么实现一些很简单的东西了。实验 2.2 . 设计同一参考椭球下的三维地心坐标(笛卡儿坐标系 )与大地坐标系转换的程专业 .专注.序。(提示 :用dowhile迭代 , B 、 H 初始为0 进行

6、迭代 ,直到H 的精度达到0.00001米)注意:东经 0180 (Y>0 ),西经:0-180(Y<0)式中,B、L、H 为椭球面上的大地纬度 、大地经度 、大地高;X、Y、Z 为空间直角坐标;N 为卯酉圈曲率半径 ,e 为椭球的偏心率 , a 为椭球的长半径 , b 为椭球的 短 半 径 。( WGS84椭 球 参 数 : 长 半 径a=6378137m, 扁 率 =1/298.257223563 )设计思路 :在按钮下面设置主程序 ,按照指导书给的思路编辑公式界面设专业 .专注.计:主要代码 :头文件protected :HICON m_hIcon;/ 生成的消息映射函数vi

7、rtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public :double B;专业 .专注.double L;double H;double X;double Y;double Z;afx_msg void OnBnClickedOk();实现文件#include"stdafx.h"#include<mat

8、h.h>#ifdef _DEBUG#definenew DEBUG_NEW#endifvoid CMy0145110615ymh22Dlg:OnBnClickedOk()/ 大地坐标转换为空间直角坐标/ TODO: 在此添加控件通知处理程序代码UpdateData( true );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)*c

9、os(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

10、(B)、Tan(C);(5)计算 Pa、Pb、Pc;(6)计算待定点坐标Xp、Yp。界面要求 :三个坐标输入框 ,两个角度输入框一个坐标结果输出框一个计算按钮 ,一个清除按钮 ,一个退出按钮 。2.由三角形三个边长求内角函数计算公式 :设计思路 :通过示例编辑框添加变量,在按钮下面添加程序。先将 、的度分秒之转换成度利用三角形内角和等于180 算出 并将 转换成弧度 。 接着计算三角形的内角,判断 P 点是否在危险圆上若不在则计算P 点坐标若在则弹出 “该点在危险圆上 ”。界面设计 :专业 .专注.主要代码 : protected :HICON m_hIcon;/ 生成的消息映射函数virtu

11、al BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public :afx_msg void OnEnChangeEdit5();double XA;专业 .专注.double YA;double XB;double YB;double XC;double YC;double alfa;double bet;double Xp;double Yp

12、;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedOk();#include"stdafx.h"#include"dss2-3.h"#include"dss2-3Dlg.h"#include<math.h>#ifdef _DEBUG#definenew DEBUG_NEW#endifvoid Cdss23Dlg:OnBnClickedButton1()专业 .专注./ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double

13、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 转换成度D2= int (bet);M2= int (bet-D2)*100);S2=(bet-D2)*100-M2)*100;bet1=

14、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)/(XA-XC);afCB=atan(YB-YC)/(XB-XC);A=afAB-afAC;B=afBC-afBA;C=afC

15、A-afCB;/ 判断点是否在危险圆上若不在则计算 P点坐标if(alfa+bet+C<170|alfa+bet+C>190)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("

16、;该点位于危险圆上 ");UpdateData(FALSE);/OnCancel();专业 .专注.void Cdss23Dlg: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();;运行结果 :专业 .专注.总结本次实验刚开始还是遇到了很多问题的比如说根本不就不知道该如何用程序来实现后方交会这个过程 ,后来经过问同学 、上网查资料等大概弄懂了实现步骤可是写完程序后我发现他

17、根本计算不了点计算按按钮一点反应都没有。又开始找问题才发现是UpdateData ( FALSE)和 UpdateData ( TRUE)忘写了 ,还发现程序中没有进行度分秒到度的转换 ,就顺便把这个实现也加进去了。这个程序也就算完成了 。专业 .专注.实验 三 数组、指针与函数一、实验目的掌握数组的定义 、引用及应用方法 。掌握指针与动态数组 。掌握函数的定义 、引用及应用方法 。二、实验内容1.编写一个求任意多边形面积的程序。提示:通过界面输入数据 ,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算 。 要求计算部分写成函数的形式,使计算程序与界面无关 。动态

18、数组创建动态数组结构体的定义多边形面积计算原理及算法计算原理 :面积计算的算法 :专业 .专注.提示:显示框用Cedit 控件变量对每个输入的坐标用 CString str临时变量格式化,然后用CEdit 的控件变量插入设计思路 :将实现写在按钮在下面 。添加顶点下面实现创建动态数组 ,确认按钮实现返回数组大小值并将添加的数据显示到显示框中去 ,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据 ,退出按钮退出程序 。界面设计:主要代码:/实现protected :HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg

19、 void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();专业 .专注.afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public :double x;double y;double result;CEdit edit;afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton2();afx_msg void OnBnC

20、lickedButton1();afx_msg void OnBnClickedButton5();int n;double *px;double *py;CEdit m_strdis;#include"stdafx.h"#include"0145110615(3).h"#include"0145110615(3)Dlg.h"专业 .专注.#ifdef _DEBUG#definenew DEBUG_NEW#endif/ 用于应用程序 “关于 ”菜单项的 CAboutDlg 对话框double calarea( double x, do

21、uble y, int n)double s=0;int i;for (i=0;i<n;i+)s+=0.5*(xi+xi+1)*(yi+1-yi);return s;void CMy01451105173Dlg:OnBnClickedButton4()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);result=calarea(px,py,n);专业 .专注.UpdateData(FALSE);void CMy01451105173Dlg:OnBnClickedButton3()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);p

22、x= new double n;py= new double n;UpdateData(FALSE);void CMy01451105173Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知处理程序代码/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE); delete px; delete py; px=NULL; py=NULL;专业 .专注.n=0;result=0;m_strdis.SetWindowTextW(_T( "" );UpdateData(FALSE);int t=0;void CMy01451105

23、173Dlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CString str;t+=1;if(t>n)MessageBox(_T("Warning!" );str.Format(_T("No.%d % lf %lf rn"),t,x,y);m_strdis.ReplaceSel(str);pxt-1=x;pyt-1=y;UpdateData(FALSE);专业 .专注.void CMy01451105173Dlg:OnBnClickedButton5()/ TODO: 在

24、此添加控件通知处理程序代码exit(0);运行结果:总结:这个实验相比前面几个实验感觉难了好多。首先是不知道怎么实现动态数组也不知道怎样将输入的内容显示到示例编辑框里。总之在眼前的都是一堆问题,但面临的问题总得解决所以就只能看书、上网查资料 、问同学等各种方法来解决问题,最终把问题解决 。专业 .专注.实验 四 类的创建一、实验目的1. 掌握面向对象编程基本思想2. 掌握 VC+.net 中创建类3. 掌握建立和使用对象4. 掌握运算符号重载5. 理解类的继承和多态性二、实验内容1.设计一个角度类 。 要求该类具有度分秒至度的换算、度至度分秒的换算 、度与弧度的换算等功能 。提示 :设置一个角

25、度大小属性 ,并设定该属性为缺省属性;另设一个状态属性 ,表示当前设置的角度大小的形式;度分秒、度、弧度间的相互转换的方法 ;定义运算符号 (加、减)方法,使得角度类能够像一种普通的数据类型样的方便使用 。设计思路 :设计一个角度类在类的头文件里申明度到度分秒的转换 、度分秒到度的转换、度到弧度的转换 、运算符的重载 ,在类的 .cpp 文件中写出具体的函数实现 ,在按钮下面调用类的各个函数来实现角度的转换 。专业 .专注.界面设计:主要代码 :DECLARE_MESSAGE_MAP()专业 .专注.public :double dmstodgree( double dmg); / 声明度分秒

26、到度的转换函数double dgreetodms( double drgree); / 声明度到度分秒的转换函数double dgreetohd( double dgree); / 声明度到弧度的转换函数;DECLARE_MESSAGE_MAP()public :afx_msg void OnBnClickedCancel();double dgree;double dms;double hd;afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3()

27、;afx_msg void OnBnClickedOk();void Cymh4Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知处理程序代码OnCancel();专业 .专注.void Cymh4Dlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码UpdateData( true );Angle sf;sf.dgreetodms(dgree);UpdateData( false);void Cymh4Dlg:OnBnClickedButton2()/ TODO: 在此添加控件通知处理程序代码UpdateData( true

28、);Angle sf;sf.dmstodgree(dms);UpdateData( false);void Cymh4Dlg:OnBnClickedButton3()/ TODO: 在此添加控件通知处理程序代码UpdateData( true );专业 .专注.Angle sf;sf.dgreetohd(dgree);UpdateData( false);void Cymh4Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码/OnOK();UpdateData( true );dgree=0;dms=0;hd=0;UpdateData( false);运行结果

29、:这个实验调试最终没有通过所以没有结果总结这个实验给我的最大的感受是细节决定成败,实践总会比想象的困难,虽然我非常清除实验原理可是但我按照我的思路去写的时候各种调试改还是有错,我不清楚为什专业 .专注.么Angle sf;sf.dgreetodms(dgree); 这样的语句在程序七中调试能通过而这个程序中却死活不行。实验五文件一、实验目的掌握文件对话框的使用方法。掌握 C+ 文件操作的一般步骤及实现方法。了解 MFC 文件操作的特点及使用方法。二、实验内容1. 编制简单的 Cass 数据文件进行数据整理的程序 。 整理后的数据文件中要求无重复点数据 ,且数据按点号大小的升序进行排序 。要求整

30、理后的数据按与原始数据文件同样的格式保存为另外一个文件示例数据 “民用园燃气 .dat ”文件数据格式 :总点数点号,编码,X,Y,H例如:专业 .专注.要求:a.用 SaveFileDialog 和 OpenFileDialog控件获取文件打开或保存的文件名。b.自定义一个测量点数据结构体,其元素包括 :点号,编码, X,Y,Hc.用文本框显示原始数据和整理后的数据d.按编程规范进行编码a. 读数据、保存数据 、判断一个点数据是否已经存在 、排序、在文本框中显示文件内容等可以分别定义成一个子过程或函数 。c.编程技巧打开文件获得总点数根据点数调整数组的大逐行读取数据 ,判断该点是否已经存在数

31、组中,若不存在 ,则把该数据存放在数组中根据删除重复点后的总点数,重新调整数组大小按点号大小的升序排序按原数据格式输出到另外一个文件设计思路 :在按钮下面设置主程序 。通过打开文件按钮将原文件打开并显示到示例编辑框内,通过保存文件按钮实现对文件分行 、删除重复点 、排序、保存更改后的文件并把它显示到示例编辑框中等操作 。专业 .专注.界面设计:主要代码 : /实现专业 .专注.protected :HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lPa

32、ram);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public :afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();CString yuanshi;CString xiugai;CString *CMy0145110615ymh5Dlg:Splitstring(CString str,char split, int &isubstr);/ 0145110615 ymh 5Dlg.cpp :实现文件#

33、include"stdafx.h"#include"0145110615 ymh 5.h"#include"0145110615 ymh 5Dlg.h"#include<locale.h>#include<string.h>#ifdef _DEBUG#definenew DEBUG_NEW#endif专业 .专注./ 定义结构体里面的数据类型包括点号 、编码、X、 Y、 H struct Pointint number; CString coder; double X; double Y; double H;C

34、String *CMy0145110615ymh5Dlg:Splitstring(CString str,char split, int &isubstr) / 分割函数int M=0; / 分割位置int N=0; / 分割符的总数CString strLeft=str;CString strRight; / 定义两个字符串变量/ 计算字符串的总数while (M!=-1)M=strLeft.Find(split);/ 查找分割位置并赋给 MstrRight=strLeft.Mid(M+1,str.GetLength();/ 把字符串位置和长度信息赋给strRight 字符串专业 .

35、专注.strLeft=strRight;N+; / 字符串总数加一if(N=0) / 如果分割符的总数为字符串数就是字符串本身isubstr=1;return NULL;isubstr=N+1; / 字符串数等于分割符数加CString* pStrSlipt; / 创建字符串指针pStrSlipt= new CStringisubstr; / 创建字符串数组strLeft=str;CString strLeftss;for (int i=0;i<N;i+)M=strLeft.Find(split);strLeftss=strLeft.Left(M);strRight=strLeft.Mi

36、d(M+1,strLeft.GetLength();/ 把字符串位置和长度信息赋给strRight 字符串 strLeft=strRight;pStrSlipti=strLeftss;专业 .专注.pStrSliptN=strLeft;return pStrSlipt;void CMy0145110615ymh5Dlg:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码/OnOK();UpdateData( true );CFileDialog dlgFile(TRUE,_T( "txt" ),NULL,OFN_ALLOWMULTISELECT|OF

37、N_EXPLORER,_"(T(文本文件 )|*.txt" );/ 创建打开文件的对话框if(dlgFile.DoModal()=IDCANCEL)return ;/ 如果选择取消按钮则返回CStringstrFileName=dlgFile.GetPathName();/ 获取打开文件文件全名(含全路径)setlocale(LC_ALL,"");/ 设置语言环境CStdioFile sf; / 设置文件对象if(!sf.Open(strFileName,CFile:modeRead) return ;/ 如果没有打开文件则返回CString strLi

38、ne; / 定义 CString 变量yuanshi.Empty(); / 文件和显示框建立联系BOOL bEOF=sf.ReadString(strLine); / 把文件中读取的行之赋给变量bEOFwhile (bEOF)专业 .专注.yuanshi+=strLine;bEOF=sf.ReadString(strLine);if(bEOF)yuanshi+=_T( "n" );/ 判断文件是否结束sf.Close();/ 关闭文件UpdateData( false);void CMy0145110615ymh5Dlg:OnBnClickedCancel()/ TODO: 在此添加控件通知处理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论