测绘程序设计基础实验报告
- 格式:docx
- 大小:764.10 KB
- 文档页数:78
一、实习背景随着我国经济的快速发展,测绘技术在国民经济和社会生活中扮演着越来越重要的角色。
测绘程序设计作为测绘专业的一门重要课程,旨在培养学生的计算机编程能力和测绘数据处理能力。
本次实习是在测绘程序设计课程结束后,为了巩固所学知识,提高实际操作能力而进行的。
二、实习目的1. 熟悉MATLAB软件,掌握其基本操作和编程方法。
2. 学习测绘数据处理方法,提高数据处理能力。
3. 通过实习项目,锻炼编程能力和团队协作能力。
4. 培养严谨的科学态度和良好的职业道德。
三、实习内容本次实习主要分为以下几个部分:1. MATLAB软件学习(1)MATLAB基础操作:了解MATLAB的界面、菜单、命令窗口、工作空间、函数库等。
(2)MATLAB编程基础:掌握MATLAB的数据类型、运算符、控制语句、函数、图形绘制等。
2. 测绘数据处理方法学习(1)坐标转换:学习地理坐标、平面坐标之间的转换方法。
(2)距离测量:掌握距离测量的原理和方法。
(3)角度测量:学习角度测量的原理和方法。
(4)地形分析:了解地形分析的基本原理和方法。
3. 实习项目本次实习项目为“基于MATLAB的测量数据处理与分析”。
具体内容包括:(1)数据导入:将野外实测数据导入MATLAB软件。
(2)坐标转换:将实测数据中的地理坐标转换为平面坐标。
(3)距离测量:计算各测点之间的距离。
(4)角度测量:计算各测点之间的角度。
(5)地形分析:分析地形起伏情况,绘制等高线图。
(6)结果输出:将处理后的数据和分析结果以图表形式输出。
四、实习过程1. 第一阶段:学习MATLAB软件,掌握基本操作和编程方法。
2. 第二阶段:学习测绘数据处理方法,了解坐标转换、距离测量、角度测量、地形分析等原理和方法。
3. 第三阶段:开始实习项目,完成数据导入、坐标转换、距离测量、角度测量、地形分析等工作。
4. 第四阶段:对实习项目进行总结,撰写实习报告。
五、实习成果1. 成功完成实习项目,掌握了测绘数据处理方法。
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一三年三月目录实验1 Visual Basic环境和程序设计初步 (1)总结 (5)实验2、控制结构程序设计(方位角计算、坐标转换、后方交会) (6)总结 (16)实验1 Visual C++.Net 环境和程序设计初步一、实验内容1. 启动与退出VC++.net ,熟悉VC++.net 的开发环境,通过向导生成基于对话框的应用程序。
使用MSDN 查看命令按钮、标签和文本框的主要属性和方法。
2. 打开Microsoft visual studio 2008 文档,浏览“Visual studio 文档”目录下的内容,并从“Visual studio 文档->Visual C++->示例”目录下下载一个程序,编译并运行之。
3. 设计一个已知三边边长计算三角形面积的程序。
计算模型如下:海伦公式:))()((c p b p a p p S ---=,其中2cb a p ++=二、设计思路1、首先,设计一个窗体,上面有三个静态框和三个文本框用于提示和输入三边a,b,c,还要有一个静态框加一个文本框用于输出面积,还要加三个命令按钮,用于计算,清除和退出;2、然后要对输入的三边进行判断是否合法(即是否可以组成三角形),用if 语句实现,不合法则清零;3、最后将海伦公式写成代码的形式即可。
三、界面设计如下:四、主要代码如下:#include<math.h>void CMy006Dlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码//判断输入是否有误并计算UpdateData(TRUE);if(a+b>c&&a+c>b&&b+c>a){double t;t=(a+b+c)/2;s=sqrt(t*(t-a)*(t-b)*(t-c));}else CMy006Dlg::OnBnClickedButton2();//输入的三边不能构成三角形时则清零UpdateData(FALSE);}void CMy006Dlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码//清除功能a=0;b=0;c=0;s=0;UpdateData(FALSE);}void CMy006Dlg::OnBnClickedButton3(){exit(0);//退出功能// TODO: 在此添加控件通知处理程序代码}五、运行结果如下:六、实验总结本次实验比较简单,主要是熟悉一下Virsual Studio 2008的MFC编程环境,了解编译MFC项目的整个流程。
测绘程序设计实习报告一、实习背景及目的随着科技的不断发展,测绘领域逐渐融入了越来越多的计算机技术,测绘程序设计成为了一项重要的工作。
本次实习旨在让我们了解测绘程序设计的基本流程,掌握测绘程序设计的方法和技巧,提高我们的实际操作能力。
二、实习内容及过程1. 实习内容本次实习主要分为以下几个部分:(1) 熟悉测绘程序设计的基本原理和流程;(2) 学习测绘程序设计的相关软件;(3) 参与实际测绘项目,进行程序设计和调试;(4) 撰写测绘程序设计实习报告。
2. 实习过程(1) 基本原理学习在实习开始阶段,我们首先学习了测绘程序设计的基本原理,包括测绘数据采集、数据处理、图形绘制等。
通过学习,我们了解了测绘程序设计的核心内容和方法。
(2) 软件学习为了更好地进行测绘程序设计,我们学习了AutoCAD、MapGIS、ArcGIS等软件。
这些软件为我们进行测绘程序设计提供了强大的支持,使我们能够更加高效地完成实习任务。
(3) 实际项目参与在掌握了基本原理和软件操作后,我们参与了实际的测绘项目。
项目中,我们负责进行数据处理、图形绘制等工作,通过实际操作,我们深入了解了测绘程序设计的具体应用。
(4) 实习报告撰写在实习结束后,我们根据实习过程中的经验和收获,撰写了测绘程序设计实习报告。
报告中,我们总结了实习过程中遇到的问题及解决方法,并对自己的实习成果进行了分析。
三、实习收获及体会通过本次实习,我们收获了以下几点:1. 掌握了测绘程序设计的基本原理和方法;2. 熟悉了测绘程序设计的相关软件,提高了实际操作能力;3. 了解了测绘程序设计在实际项目中的应用;4. 培养了团队协作能力和解决问题的能力。
同时,我们认识到测绘程序设计不仅需要理论知识,更需要实践操作。
在实习过程中,我们要善于发现问题、解决问题,不断提高自己的实际操作能力。
此外,我们还应注重学习最新的测绘技术和软件,紧跟科技发展的步伐,为我国的测绘事业做出贡献。
第1篇一、实验目的本次测绘实训实验旨在通过实际操作,使学生掌握测绘基本原理、方法和技能,提高学生对测绘工作的认识,培养动手能力和团队协作精神。
通过本次实验,学生应能够:1. 理解并掌握测绘基本概念和原理;2. 熟练操作测绘仪器,进行实地测量;3. 学会绘制地形图和施工图;4. 培养严谨的工作态度和团队协作精神。
二、实验内容本次实验分为三个部分:测绘基本原理与仪器操作、实地测量与数据处理、地形图与施工图的绘制。
三、实验步骤(一)测绘基本原理与仪器操作1. 理论学习:首先,对测绘基本原理进行理论学习,包括测量误差理论、水准测量、角度测量、距离测量等。
2. 仪器操作:然后,进行仪器操作训练,包括水准仪、经纬仪、全站仪等仪器的操作方法和注意事项。
3. 实地操作:在教师的指导下,进行实地测量,包括水准测量、角度测量、距离测量等。
(二)实地测量与数据处理1. 实地测量:根据实验要求,选择合适的测量方法,进行实地测量。
2. 数据处理:将实地测量数据输入计算机,进行数据处理,包括坐标转换、误差分析等。
3. 结果分析:对处理后的数据进行分析,得出结论。
(三)地形图与施工图的绘制1. 地形图绘制:根据实地测量数据,绘制地形图,包括等高线、比例尺、方向等。
2. 施工图绘制:根据设计要求,绘制施工图,包括平面图、立面图、剖面图等。
四、实验结果与分析(一)测绘基本原理与仪器操作通过本次实验,学生对测绘基本原理有了更深入的理解,能够熟练操作水准仪、经纬仪、全站仪等测绘仪器,为后续实验奠定了基础。
(二)实地测量与数据处理在实地测量过程中,学生掌握了测量误差的来源和减小方法,能够进行简单的误差分析。
在数据处理方面,学生学会了坐标转换、误差分析等基本操作。
(三)地形图与施工图的绘制通过本次实验,学生能够根据实地测量数据绘制地形图和施工图,为实际工程提供了参考。
五、实验总结本次测绘实训实验使学生在理论知识与实践操作方面都有了很大的提高。
测绘程序设计(VB)课间实习报告姓名:________________________________学号:________________________________班级:_1141502 __________________________2012年10月目录1实习目的 (3)2实习仪器与软件 (3)2.1 Visual Basic 6.0 (3)3实习要求 (4)4实习内容 (5)5实习步骤 (7)5.1坐标正反算 (7)5.2水准测量 (8)5.3导线计算 (12)5.4集成化设计 (15)6实习总结 (16)6.1实习问题总结 (16)6.2程序调试总结 (16)7附录............................................................ 错误!未定义书签。
7.1正算代码 (20)测绘程序设计实习报告1实习目的掌握Visual Basic(VB)程序设计的基本理论、方法和应用,掌握VB程序应用于测绘专业的程序开发,理解程序设计在测绘数据处理中的作用和地位,学会利用模块化程序设计的基本技术,掌握面向对象程序设计方法,应用测绘专业的基本技能,测绘专业模块程序包开发的基本方法,以及掌握一些最基本的知识,编程里面的英语以及函数有很多不知道,以至学习编程有点困难。
、对水准网观测高程间接平差理论内容的验证与应用。
通过学习掌握测绘软件开发过程与方法,初步具备测绘软件开发基本技能。
、实验原理和过程通过本学期对《测绘程序设计》课程的学习,编写一份综合性实验报告我选取的题目是利用vb语言进行编程。
熟悉程序设计任务书的基本内容,调查了解软件需求状况,进行需求分析,。
计算机的基础比较差,要想将编程学好得掌握更多的函数以及专用的编程语言,工程测量运用编程来计算是比较普遍的,运用编程的方面也比较多,因此努力去掌握一些基础非常重要,为学习后续课程和专业技术工作打下基础。
计算机测绘程序设计实验报告专业:班级:姓名:学号:实验一角度与弧度的转换(1)原理首先获取输入角度的正负号,再取绝对值,通过提取度、分、秒计算出角度总和,利用1度=π/180弧度求出弧度;首先获取输入弧度的正负号,再取绝对值,利用1弧度=180/π度将弧度转换为角度,单位为度,通过提取度、分、秒计算出度.分秒。
(2)属性设置窗体、控件属性设置(3)程序代码Private Sub Cmd_jh_Click()Const pi# = 3.14159265358979 '定义常量piDim d%, f%, m#, fh%, jdzh%jd = txt_jd.Textfh = Sgn(jd) '获取输入角度的正负号jd = Abs(jd) '取输入角度的绝对值d = Int(jd) '提取度f = Int((jd - d) * 100) '提取分m = ((jd - d) * 100 - f) * 100 '提取秒jdzh = (d + f / 60 + m / 3600) '得到角度总和,单位为度hd = Format(jd * pi / 180 * fh, "0.000000") '保留6位小数txt_hd.Text = hdEnd SubPrivate Sub Cmd_hj_Click()Const pi# = 3.14159265358979 '定义常量piDim d%, f%, m#, fh%hd = txt_hd.Textfh = Sgn(hd) '获取输入弧度的正负号jdzh = Abs(hd) * 180 / pi '将弧度转换为角度,单位为度d = Int(jdzh) '提取度f = Int((jdzh - d) * 60) '提取分m = ((jdzh - d) * 60 - f) * 60 '提取秒jd = Format((d + f / 100 + m / 10000) * fh, "0.0000") '得到度.分秒并保留四位小数txt_jd.Text = jdEnd SubPrivate Sub Cmd_qk_Click() txt_jd.Text = ""txt_hd.Text = ""End Sub(4)运行结果实验二 矩阵的加、减、乘、转置、求逆(1)原理根据矩阵的运算方法及规则,只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法和减法运算。
测绘程序设计(C版)实习报告学号:201420050138姓名:李阳靖班级:1420501Z专业:测绘工程课程名称:测绘程序设计(C及Matlab)指导老师:肖根如2015年12月目录前言1一、实验目的1二、实验环境2三、Turbo C 3.0与VC++6.0的熟悉与操作2四、实验内容梗概3五、实验具体内容4实验一算法4实验二数据类型、运算符和表达式5实验三控制语句6实验四函数9实验五数组11实验六结构体与共用体12六、常见错误及分析14七、程序调试15八、实验心得与体会17九、附录:实习程序设计清单21.、八、-刖言现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。
作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。
而C语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。
但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。
C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。
想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。
一、实验目的C语言程序设计实习是在学习《C语言程序设计》理论知识的基础上进行的实践教学环节,其目的是培养我们具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。
全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
测绘程序设计实验报告python 实验目的:学习如何使用Python语言编程实现测绘程序设计。
实验内容:1.设计测量平面图的程序2.实现坐标转换功能3.计算计算两点之间的距离实验步骤:1. 使用Pycharm等Python开发工具新建一个python文件2. 导入所需的模块:numpy、math3. 定义函数,实现程序的功能代码如下:1. 设计测量平面图的程序def map_design():print("请输入地图缩放比例:")scale = float(input())print("请输入地图的长度和宽度(m):")length = float(input())width = float(input())area = length * width * scale * scaleprint("地图的面积是:", area, "平方米")2. 实现坐标转换功能def coords_convert():print("请输入原坐标系的坐标(x, y):")x1 = float(input())y1 = float(input())print("请输入目标坐标系的坐标系数(a, b):")a = float(input())b = float(input())x2 = a * x1y2 = b * y1print("转换后的坐标(x, y)为:", x2, y2)3. 计算计算两点之间的距离def distance_calc():print("请输入起始点和结束点的坐标(x1, y1, x2, y2):")x1 = float(input())y1 = float(input())x2 = float(input())y2 = float(input())distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)print("两点之间的距离为:", distance, "米")4. 主函数,用于调用其他函数def main():print("***欢迎使用测绘程序设计***")print("请选择要进行的操作:")print("1. 设计测量平面图的程序")print("2. 实现坐标转换功能")print("3. 计算两点之间的距离")choice = int(input())if choice == 1:map_design()elif choice == 2:coords_convert()elif choice == 3:distance_calc()else:print("输入错误,请重新输入")if __name__ == '__main__':main()实验总结:通过这个Python编程实验,我学到了如何使用Python语言编程实现测绘程序设计。
《测绘程序设计》上机实验报告(Visual C++.Net)班级:测绘0901班学号: 04姓名:代娅琴2012年4月29日实验八平差程序设计基础一、实验目的巩固过程的定义与调用巩固类的创建与使用巩固间接平差模型及平差计算掌握平差程序设计的基本技巧与步骤二、实验内容水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取,计算部分与界面无关。
1.水准网间接平差模型:2.计算示例:近似高程计算:3.水准网平差计算一般步骤(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。
4.水准网高程近似值计算算法5.输入数据格式示例实验代码:#pragma onceclass LevelControlPoint{public:LevelControlPoint(void);~LevelControlPoint(void);public:CString strName;trName=pstrData[0];m_pKnownPoint[i].strID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);m_pKnownPoint[i].flag=1;trName=pstrData[i];m_pUnknownPoint[i].strID=pstrData[i];m_pUnknownPoint[i].H=0;lag=0;pBackObj=SearchPointUsingID(pstrData[0]);pFrontObj=SearchPointUsingI D(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID){return &m_pKnownPoint[i];}}return NULL;}trID==ID){return &m_pUnknownPoint[i];}}return NULL;}LevelControlPoint* AdjustLevel::SearchPointUsingID(CString ID){LevelControlPoint* cp;cp=SearchKnownPointUsingID(ID);if(cp==NULL)cp=SearchUnknownPointUsingID(ID);return cp;}void AdjustLevel::ApproHeignt(void)lag!=1){pFrontObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpBackObj->flag==1 ){ =m_pDhObs[i].cpBackObj->H - m_pDhObs[i].ObsValue;*/m_pUnknownPoint[i].H=m_pDhObs[j].cpBackObj->H + m_pDhObs[j].HObsValue;m_pUnknownPoint[i].flag=1;break;}}if(m_pUnknownPoint[i].flag!=1)pBackObj->strID==m_pUnknownPoint[i].strID)&& m_pDhObs[j].cpFrontObj->flag==1 ){ =m_pDhObs[j].cpFrontObj->H-m_pDhObs[j].HObsValue;/* m_pUnknownPoint[i].H=m_pDhObs[i].cpFrontObj->H+m_pDhObs[i].ObsValue;*/ m_pUnknownPoint[i].flag=1;break;}}}}if(i==m_iUnknownPointCount-1)lag!=1)ist);p(i,i)=value;}return p;}void AdjustLevel::FormErrorEquation(CMatrix &B, CMatrix &L){(m_iDhObsCount,m_iUnknownPointCount);(m_iDhObsCount,1);for(int i=0;i<m_iDhObsCount;i++)pBackObj->strID);tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontO bj->H);*/L(i,0)=m_pDhObs[i].HObsValue-(m_pDhObs[i].cpFrontObj->H - m_pDhObs[i].cpBackObj->H);(_T("%.3f"),L(i,0));L(i,0)=_tstof(tmp);L(i,0)=L(i,0)*1000;+=x(i,0);xt"));xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}void CIndircLelveDlg::OnBnClickedComputelevel(){f\r\n"), [i].strID,[i].H);LevleContent+=Temp;}(_T("单位权中误差:%.1f mm\r\n"),r0*1000);LevleContent+=Temp;LevleContent+=_T("未知点高程中误差(mm):\r\n");for(int i=0;i< ;i++){();(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);LevleContent+=Temp;}UpdateData(false);}void CIndircLelveDlg::OnBnClickedSavelevleresult(){xt"));if()==IDCANCEL) return;CString strFileName=();setlocale(LC_ALL,"");CStdioFile sf;if(!(strFileName, CFile::modeCreate|CFile::modeWrite)) return;(LevleContent);();UpdateData(FALSE);}三、实验结果打开文件数据:平差结果:四、实验心得这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
一、实习目的在测绘工作与科学研究中,很多情况都需要用计算机,测绘工程所涉及的数据计算、绘图、数据库管理、数据分析等,都可以用计算机来完成。
因此,本次课程实习的内容主要集中在测绘工程的相关计算上,其中,主要学习关于平差计算的程序设计问题上。
实习目的在于增强我们对误差理论与测量平差基础理论的理解,牢固掌握测量平差的基本原理和基本公式,熟悉测量数据处理的基本技能和计算方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机理论知识,编制简单的计算程序。
二、实习内容(一)高级程序语言应用1.编译软件安装,输出“Hello,World”2.角度与弧度互化3.文件读写操作4.矩阵加、减、乘及转置程序5.矩阵求逆程序(二)测量平差模型实现1.间接平差模型公式及程序实现,实例验证。
2.条件平差模型公式及程序实现,实例验证。
(三)测量综合实例解算1.水准网平差三、实习过程(一)实习1(角度与弧度互化)1.准备(1)第一步分析设计:使用double类型数据表示角度制数和弧度制数。
例如:120度40分56秒,用double类型表示为120.4056,其中分、秒根据小数位确定。
(2)第二步角度化为弧度的公式为:弧度值=角度值/180×π,角度值=弧度值×180÷π2.实现编写代码,实现角度与弧度互化功能。
3.改善角度转换过程中需要考虑角度的正负号问题,角度转化可以添加是否超过59的判断。
4.计算结果(二)实习2(文件读写操作)1.准备C++文件流:fstream 文件流,ofstream输出文件流,ifstream输入文件流。
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:测绘1101学号: 0405100731姓名:龚自飞序号:二零一四年六月目录实验1 Visual C++.Net环境和程序设计初步 (1)实验内容: (1)设计思路: (1)界面设计: (1)主要代码:列出程序的代码,按文件依次列出。
注意代码的书写格式和注释 (2)运行结果: (3)总结 (5)实验1 Visual C++.Net 环境和程序设计初步实验内容:1. 启动与退出VC++.net ,熟悉VC++.net 的开发环境,通过向导生成基于对话框的应用程序。
使用MSDN 查看命令按钮、标签和文本框的主要属性和方法。
2. 打开Microsoft visual studio 2008 文档,浏览“Visual studio 文档”目录下的内容,并从“Visual studio 文档->Visual C++->示例”目录下下载一个程序,编译并运行之。
3. 设计一个已知三边边长计算三角形面积的程序。
计算模型如下: 海伦公式:))()((c p b p a p p S ---=,其中2c b a p ++= 设计思路:(1)、创建名为“gzf1”的 MFC 应用程序;(2)、在窗体上放置4 个文本框、4 个静态框、3 个命令按钮(其中两个缺省);(3)、设置控件属性,如Static1 的Caption 属性设置成“a=”,用于提示Edit框的输入边长a ;(4)、把“取消”按钮的Caption 属性改为“退出”;双击前两个按钮,生成Click 消息函数,注释掉重载函数“OnOK()”。
(5)、为4 个Edit 控件添加绑定变量。
(6)、在相应的函数中添加代码;(7)、运行和调试程序;(8)、保存应用程序。
界面设计:主要代码:gzf1void Cproject01Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double p;p=(a+b+c)/2;S=sqrt(p*(p-a)*(p-b)*(p-c));UpdateData(FALSE);//OnOK();}void Cproject01Dlg::OnBnClickedOk2(){// TODO: 在此添加控件通知处理程序代码a=0;b=0;c=0;S=0;UpdateData(FALSE);}void Cproject01Dlg::OnBnClickedCancel() {// TODO: 在此添加控件通知处理程序代码OnCancel();}运行结果:总结总结的书写要求:这是我这学期编写的第一个MFC程序,在这次课前,我们在大一课程设计的时候有接触到相关的MFC编程,不过时隔两年,也陌生了不少。
以前编程的时候都不知道为什么每次都要写UpdateData(TRUE)、UpdateData(FALSE),通过这次编程知道了它的作用分别的把控件的值赋给变量、将变量的值赋给控件;同时这次编程让我找回来了编程的感觉,觉得其实自己也是很不错的。
目录实验2 控制结构程序设计 (1)实验内容: (1)设计思路: (1)界面设计: (1)主要代码:列出程序的代码,按文件依次列出。
注意代码的书写格式和注释 (3)运行结果: (10)设计技巧: (12)总结 (1)实验2 控制结构程序设计实验内容:4.编写一个方位角计算程序。
先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限;5.设计同一参考椭球下的三维地心坐标(笛卡尔坐标系)与大地坐标系转换的程序;6.编写一个后方交会程序。
设计思路:1.(1)、设计程序界面,并且给控件添加变量;(2)、计算dx、dy;(3)、编写程序;为相应的控件编写相应的程序,“计算”首先是方位角在坐标轴上的情况,其次就是不在坐标轴上的情况,然后再将输出的弧度转换为度分秒的形式;(4)、调试运行程序。
2.(1)、设计程序界面,并且给控件添加变量;(2)、先编写BLH转换到XYZ代码;(3)、再编写XYZ转换到BLH代码(注意L在不同象限的计算公式不同,B、H在循环体内只要H满足条件B就一定满足);(4)、调试运行程序;3.(1)、设计程序界面;(2)、判断危险圆的范围;(3)、计算三边的边长,然后计算三角形的三个内角;(4)、计算出三个观测角和三个内角的正切值,再将其带人公式计算相应的权,最后计算出观测点的坐标位置;(5)、调试运行。
界面设计:主要代码:Project201void Cproject201Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);const double PI=3.141592653;double AB;double dx,dy;dx=Xb-Xa;dy=Yb-Ya;AB=0.0;if (dx==0&&dy>0){AB=PI/2;//在Y轴正半轴MessageBox(_T("该方位角在Y轴正半轴"));}else if (dx==0&&dy<0){AB=3*PI/2;//在Y轴负半轴MessageBox(_T("该方位角在Y轴负半轴"));}else if (dx>0&&dy==0){AB=0;//在X轴正半轴MessageBox(_T("该方位角在X轴正半轴"));}else if (dx<0&&dy==0){AB=PI;//在X轴负半轴MessageBox(_T("该方位角在X轴负半轴"));}else if (dx>0&&dy>0){AB=atan2(dy,dx);//第一象限m=1;}else if (dx<0&&dy>0){AB=atan2(dy,dx);//第二象限AB=PI-AB;;m=2;}else if (dx<0&&dy>0){AB=atan2(dy,dx);//第三象限AB=PI+AB;m=3;}else if (dx>0&&dy<0){AB=atan2(dy,dx);//第四象限AB=2*PI-AB;m=4;}AB=AB*206265;//将弧度化成角度,并存在秒中AB_deg=floor(AB/60/60+0.00001);AB_min=floor((AB-AB_deg *60*60)/60+0.00001);AB_sec= AB-AB_deg *60*60-AB_min *60;//将秒数化成度分秒UpdateData(FALSE);//OnOK();}void Cproject201Dlg::OnBnClickedclear(){// TODO: 在此添加控件通知处理程序代码Xa=0;Ya=0;Xb=0;Yb=0;AB_deg=0;AB_min=0;AB_sec=0;m=0;UpdateData(FALSE);}void Cproject201Dlg::OnBnClickedExit(){// TODO: 在此添加控件通知处理程序代码OnCancel();}Project202void Cproject202Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double a,m,n,N,e,b;m=1/298.257223563;a=6378137;b=a-a*m;double B1,B2,B3,L1,L2,L3;//将度分秒转换为度,其中B1、L1为度,B2、L2为分,B3、L3为秒B1=int(B);B2=int((B-B1)*100);B3=int(((B-B1)*100-B2)*100);B=B1+B2/60+B3/60/60;//B的输入度分秒转换为度分秒B=B/57.3;//B的度转换为弧度进行计算L1=int(L);L2=int((L-L1)*100);L3=int(((L-L1)*100-L2)*100);L=L1+L2/60+L3/60/60;//L的输入度分秒转换为度L=L/57.3;//L的度转换为弧度进行计算e=sqrt((a*a-b*b)/(a*a));n=1-e*e*sin(B)*sin(B);N=a/(sqrt(n));X=(N+H)*cos(B)*cos(L);Y=(N+H)*cos(B)*sin(L);Z=(N*(1-e*e)+H)*sin(B);UpdateData(FALSE);//OnOK();}//大地坐标转换为空间直角坐标void Cproject202Dlg::OnBnClickedOk3(){// TODO: 在此添加控件通知处理程序代码const double pi = 3.141592653;UpdateData(TRUE);double a,m,n,N,e ,B1,H1,f,b,dh;m=1/298.257223563;a=6378137;b=a-a*m;e=sqrt((a*a-b*b)/(a*a));double L_RAD;L_RAD = atan(Y/X);if( X == 0 && Y ==0){AfxMessageBox(_T("处在椭球中心")); }else if( X ==0 && Y > 0){L = 90;}else if( X ==0 && Y < 0){L = 270;}else if( X > 0 && Y == 0){L = 0;}else if( X > 0 && Y > 0){L = L_RAD/pi*180;}else if( X > 0 && Y < 0){L = (2*pi + L_RAD)/pi*180;}else if( X < 0 && Y == 0){L = 180;}else if( X < 0 && Y > 0){L = (pi + L_RAD)/pi*180;}else if( X <0 && Y < 0){L = (pi + L_RAD)/pi*180;}f=sqrt(X*X+Y*Y);B1=0;H1=0;do{n=1-e*e*((sin(B1))*(sin(B1)));N=a/(sqrt(n));B=atan(Z/(f*(1-e*e*N/(N+H1))));H=f/(cos(B1))-N;dh=H-H1;B1=B;H1=H;}while (fabs(dh)>=0.00001);B=57.3*B;double Bdeg,Bmin,Bsec;Bdeg=int(B+0.0000001);Bmin=int((B-Bdeg)*60+0.000000001);Bsec=((B-Bdeg)*60-Bmin)*60;B=Bdeg+Bmin/100+Bsec/10000;// B的度转换为度分秒double Ldeg,Lmin,Lsec;Ldeg=int(L+0.00000001);Lmin=int((L-Ldeg)*60+0.0000001);Lsec=((L-Ldeg)*60-Lmin)*60;L=Ldeg+Lmin/100+Lsec/10000;// L的度转换为度分秒UpdateData(FALSE);}void Cproject202Dlg::OnBnClickedOk2(){// TODO: 在此添加控件通知处理程序代码X=0;Y=0;Z=0;B=0;L=0;H=0;UpdateData(FALSE);}Project203void Cproject203Dlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double A,B,C,z;z=f+g+C;if(z>=2.965&&z<=3.315){MessageBox(_T("危险圆"))//危险圆的判定}else{double A1,B1,C1,a,b,c;a=sqrt((xB-xC)*(xB-xC)+(yB-yC)*(yB-yC));//角A对应的边a b=sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC));//角B对应的边b c=sqrt((xB-xC)*(xB-xC)+(yB-yC)*(yB-yC));//角C对应的边c A1=(b*b+c*c-a*a)/(2*b*c);//A1=cosAB1=(a*a+c*c-b*b)/(2*a*c);//B1=cosBC1=(a*a+b*b-c*c)/(2*a*b);//C1=cosCA=acos(A1);B=acos(B1);C=acos(C1);//计算三角形的三个内角A、B、Cdouble A2,B2,C2,f2,g2,h2;A2=tan(A);B2=tan(B);C2=tan(C);f2=tan(f);g2=tan(g);h2=tan(h);//计算三角形的三个内角和三个观测角的正切值double Pa,Pb,Pc;//定义三个已知点的权Pa=f2*A2/(f2-A2);Pb=g2*B2/(g2-B2);Pc=h2*C2/(h2-C2);double m,n,k;//将待定的计算公式分三部分m=Pa*xA+Pb*xB+Pc*xC;n=Pa*yA+Pb*yB+Pc*yC;k=Pa+Pb+Pc;xP=m/k;yP=n/k;UpdateData(FALSE);//OnOK();}}void Cproject203Dlg::OnBnClickedOk2(){// TODO: 在此添加控件通知处理程序代码xA=0;xB=0;xC=0;yA=0;yB=0;yC=0;f=0;g=0;h=0;xP=0;yP=0;UpdateData(FALSE);}void Cproject203Dlg::OnBnClickedCancel() {// TODO: 在此添加控件通知处理程序代码OnCancel();}运行结果:设计技巧:1、程序调试的时候可以将要输入的数据预先输入初始化处,这样调试运行的时候就不用再花时间在对话框中输入数据了;2、长的表达式尽量分成几个小部分,一方面调试比较方便,另一方面程序比较清晰;3、在编写程序之前最好还是先把主要程序的大致思路写在草稿纸上。