测量程序设计报告
C语言测控系统程序设计实验报告
C语⾔测控系统程序设计实验报告Harbin Institute of TechnologyC语⾔在测量与控制中的应⽤实验报告专业:⾃动化班级:1104104学号:姓名:设计时间:2014/3/29实验⼀定时中断程序设计实验的⽬的:1.掌握定时器/计数器8254的⼯作原理与编程。
2.熟悉中断控制器8259A的⼯作原理与使⽤⽅法。
3.掌握硬件中断程序设计的原理与编程⽅法。
实验条件:PC机,WinXP操作系统,Turbo C 2.0程序设计要求:程序运⾏⾸先提⽰输⼊中断服务的时间间隔T和中断服务次数N,正确输⼊后,回车,则每间隔指定的时间T会在屏幕上显⽰⼀些字符,显⽰N次后,则不再显⽰,如果N=0,则会⽆限显⽰下去,直到在键盘上按下指定的按键,才停⽌显⽰。
停⽌显⽰后,按任意键程序结束运⾏。
1.时间间隔T为以毫秒为单位浮点数,可处理范围⾄少要0.001毫秒到5000毫秒。
2.屏幕上的显⽰信息要有助于验证程序运⾏结果的正确。
3.输⼊错误信息要有提⽰,并允许重新输⼊。
4.编程时要尽量把具有独⽴功能的代码写成⼦程序。
5.注意变量的命名要清晰,代码的注释要丰富。
6.后⾯的三个实验均要在此程序基础上编程、添加代码,注意程序的结构。
设计思路1.如何实现任意时间间隔?(附程序流程图)时间间隔的选取是根据⽤户的需要来进⾏的,因此程序⾸先应该是要求⽤户输⼊时间间隔T(ms),设定了8254的通道0定时器的计数初值,再通过将计数初值先写低8位后写⾼8位的⽅式来初始化通道0。
代码实现为:通过CalIPara()函数来计算计数初值的⾼低8位:void CalIPara(double DTimeI,int *ILongCount,unsigned char *CL8,unsigned char *CH8){double TotalCounter=DTimeI*1193;int Residue;ILongCount[0]=TotalCounter/65536;Residue=TotalCounter-65536*ILongCount[0];CH8[0]=Residue>>8;CL8[0]=Residue&0x0FF;}通过SetupTimerInterrupt()函数来对8254的通道0定时器的初始化:void SetupTimerInterrupt(void){disable();oldint8=getvect(0x08);outportb(0x43,0x36);if(LongCount==0){outportb(0x40,L8);outportb(0x40,H8);}else{outportb(0x40,0x00);outportb(0x40,0x00);}setvect(0x08,myint8);enable();}这样,每隔T(ms)时间,8259A的中断请求信号引起中断服务的执⾏。
脉冲参数测量程序设计与实现_实验指导书
实验二脉冲波形参数的测量一.实验目的1.研究脉冲波形参数的定义及测试、分析方法;2.掌握用示波器进行脉冲参数测量的程控命令。
二.实验任务1.用程控方式完成对脉冲波形参数的测量;2.分析参数测量的误差。
三.实验设备1.带有Agilent Connection Expert、配有网络接口的计算机一台;2.DSO5012A 示波器一台;3.33220A 函数/任意波形发生器一台。
四.实验原理1.系统框图将选择的信号输出到数字示波器DSO5012A ,在LabWindows/CVI 集成环境下编写脉冲参数测量控制程序,利用Agilent Connection Expert 根据仪器IP 配置仪器,通过LXI 总线程控数字示波器完成脉冲参数的测量,并在用户界面上显示程控命令、脉冲波形及脉冲参数测量结果。
2.脉冲波形参数定义PC 机LXI 总线DSO5012A33220A 互联网用户终端1)高值(HIGH):脉冲信号的高电平,或称为脉冲信号的顶值;2)低值(LOW):脉冲信号的低电平,或称为脉冲信号的底值;3)幅值(Amplitude):用高值和低值之差定义的信号幅度;4)上升时间(Rise Time):脉冲的瞬时幅度从脉冲幅值的低电平参考值(Low Reference)上升到高电平参考值(High Reference)之间的时间间隔;5)上升过冲(Rise Overshoot):脉冲信号高值和脉冲上冲峰值的差值,用脉冲幅值的百分比表示;6)上升预冲(Rise Preshoot):脉冲信号低值和脉冲信号预冲的负峰值的差值,用脉冲幅值的百分比表示;7)下降时间(Fall Time):脉冲的瞬时幅度从脉冲幅值的高电平参考值(High Reference)下降到低电平参考值(Low Reference)之间的时间间隔;8)下降过冲(Fall Overshoot):脉冲信号低值和脉冲信号下冲的负峰值的差值,用脉冲幅值的百分比表示;9)下降预冲(Fall Preshoot):脉冲信号高值和脉冲下降预冲的正峰值的差值,用脉冲幅值的百分比表示;10)周期(Period):脉冲信号周期;11)正脉宽(PWidth):脉冲信号瞬时幅度从上升沿参考值到其后的下降沿参考值之间的时间宽度,上升沿参考值和下降沿参考值相同,一般以高值与低值的中值为参考值;12)负脉宽(NWidth):脉冲信号瞬时幅度从下降沿参考值到其后的上升沿参考值之间的时间宽度,上升沿参考值和下降沿参考值相同,一般以高值与低值的中值为参考值;13)正占空比(PDutycycle):正脉宽和脉冲信号周期的比值,用百分比表示;14)负占空比(NDutycycle):负脉宽和脉冲信号周期的比值,用百分比表示;15)最大值(Maximum):脉冲波形的最大瞬时幅值;16)最小值(Minimum):脉冲波形的最小瞬时幅值;17)峰峰值(PTPeak):脉冲信号最大值和最小值的差值;18)频率(Frequency):脉冲信号频率。
设计测试用例实验报告
设计测试用例实验报告1. 引言本报告旨在介绍一个测试团队设计测试用例的实验过程和结果。
测试用例是软件测试中的关键组成部分,它能够帮助测试团队从全面的角度评估系统的功能和性能。
本次实验的目标是设计一组有效的测试用例,以验证一个任务管理应用程序的核心功能。
2. 测试目标和策略在开始设计测试用例之前,我们首先明确了测试的目标和策略。
我们的目标是确保任务管理应用程序的核心功能能够正常工作,并且用户能够方便地添加、更新和删除任务。
为此,我们采取了如下的测试策略:1. 边界值测试:验证系统对于边界值的处理是否正确。
例如,任务的标题是否能够包含特殊字符,截止时间是否能够设置为过去的时间等等。
2. 功能测试:验证任务管理应用程序的各个功能模块是否能够正常工作。
例如,添加任务、更新任务、删除任务等等。
3. 性能测试:验证任务管理应用程序在大量任务情况下的性能表现。
例如,添加一定数量的任务后,应用程序的响应时间是否仍然能够接受。
3. 测试用例设计根据测试目标和策略,我们设计了一组测试用例来验证任务管理应用程序的核心功能。
下面是部分测试用例的示例:3.1 边界值测试1. 测试用例:标题超过最大长度限制提示- 输入:任务标题为超过最大长度限制的字符串(例如超过100个字符)- 预期结果:系统应该弹出提示框,告知用户标题超过最大长度限制2. 测试用例:截止时间设置为过去的时间提示- 输入:任务的截止时间设置为过去的时间- 预期结果:系统应该弹出提示框,告知用户截止时间不能为过去的时间3.2 功能测试1. 测试用例:添加任务成功- 输入:有效的任务标题和截止时间- 预期结果:系统应该成功添加任务,并在任务列表中显示新添加的任务2. 测试用例:更新任务成功- 输入:任务的新标题和新截止时间- 预期结果:系统应该成功更新任务,并在任务列表中显示更新后的任务3. 测试用例:删除任务成功- 输入:要删除的任务- 预期结果:系统应该成功删除任务,并在任务列表中移除删除的任务3.3 性能测试1. 测试用例:添加大量任务后的性能测试- 输入:连续添加大量的任务(例如1000个任务)- 预期结果:系统应该能够在合理时间内完成任务的添加,并且不会出现明显的卡顿现象4. 实验结果和讨论我们按照设计的测试用例,对任务管理应用程序进行了测试。
程序设计报告
程序设计报告一、引言。
程序设计是计算机科学领域中的重要部分,它涉及到软件开发的方方面面。
本报告旨在对程序设计的相关内容进行分析和总结,以期为程序设计工作提供一定的参考和指导。
二、需求分析。
在进行程序设计之前,首先需要进行需求分析。
需求分析是程序设计的第一步,它的目的是明确用户的需求和期望,为后续的设计和开发工作提供清晰的方向。
通过与用户的沟通和调研,我们可以了解到用户对于软件功能、界面设计、性能要求等方面的需求,从而为程序设计提供基础。
三、设计方案。
在需求分析的基础上,我们可以开始进行设计方案的制定。
设计方案包括整体架构设计、模块设计、数据库设计等内容。
在设计方案阶段,我们需要考虑软件的可扩展性、灵活性、性能等方面的问题,同时也需要考虑到后续的维护和升级工作。
设计方案的合理性和完整性对于程序设计的成功至关重要。
四、编码实现。
设计方案确定之后,我们可以开始进行编码实现工作。
编码实现是程序设计的核心环节,它需要程序员具备扎实的编程技能和丰富的经验。
在编码实现的过程中,我们需要严格按照设计方案进行开发,同时也需要进行代码的测试和调试,确保程序的质量和稳定性。
五、测试与优化。
编码实现完成之后,我们需要进行测试与优化工作。
测试是程序设计过程中不可或缺的环节,它可以帮助我们发现程序中存在的问题和bug,并及时进行修复。
同时,通过测试,我们也可以评估程序的性能和稳定性,为后续的优化工作提供依据。
六、总结与展望。
通过以上的工作,我们完成了程序设计的各个环节。
在未来的工作中,我们还需要不断地改进和完善程序,以适应不断变化的需求和技术。
同时,我们也需要密切关注行业的发展动态,不断学习和积累经验,为程序设计工作注入新的活力。
七、结语。
程序设计是一项复杂而又具有挑战性的工作,它需要设计者具备扎实的理论基础和丰富的实践经验。
通过本报告的分析和总结,我们希望能够为程序设计工作提供一定的参考和帮助,同时也希望能够为相关领域的研究和实践工作贡献一份力量。
测绘程序设计实习报告
测绘程序设计(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语言进行编程。
熟悉程序设计任务书的基本内容,调查了解软件需求状况,进行需求分析,。
计算机的基础比较差,要想将编程学好得掌握更多的函数以及专用的编程语言,工程测量运用编程来计算是比较普遍的,运用编程的方面也比较多,因此努力去掌握一些基础非常重要,为学习后续课程和专业技术工作打下基础。
测绘程序设计(VS2008)实验报告--水准网平差程
《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一一年五月实验8 平差程序设计基础1.实验目的:1.1 巩固过程的定义与调用;1.2 巩固类的创建于使用;1.3 巩固间接平差模型与平差计算;1.4 掌握平差程序设计的基本技巧与步骤。
2.实验内容:水准网平差程序设计。
设计一个水准网平差的程序,要求数据从文件中读取。
计算部分也界面无关。
3.设计思路:在本次的实验中,我着重想表现的是一种面向对象的编程思想。
于是,在程序中我设计了4个类:CPoint、CObserve、CMatrix、Leveling,分别定义点的属性、观测数据属性、矩阵和水准网平差计算的属性与方法。
水准网平差计算一般步骤为:(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。
水准网高程近似值计算算法4.界面设计:仅添加了一个button按钮,单击后读取数据,并进行水准网平差计算,计算结果保存在记事本中5.主要代码:文件一: CPoint.h代码:class ControlPoint{public:ControlPoint(void){};~ControlPoint(void){};public:CString pointID; //点号double H; //高程};class CObserve{public:CObserve(void){};~CObserve(void){};public:ControlPoint *pStartObs; //后视点ControlPoint *pEndObs; //前视点double h; //路线长度double dDist; //高差};文件二:Leveling.h代码:#pragma once#include"CPoint.h"#include"Matrix.h"class Leveling{public:Leveling(void);~Leveling(void);private:ControlPoint *m_pKnownPoint; //已知点数组int m_iKnownPointCount; //已知点个数ControlPoint *m_pUnknownPoint; //待测点数组int m_iUnknownPointCount; //待测点个数CObserve *m_pObsData; //观测数据数组int m_iObsDataCount; //观测数据个数public:bool LoadData(const CString &FileName); //从文件中导入数据void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF); //把矩阵输出到文件中void SetKownPointSize(int n); //设置已知点数据大小void SetUnknownPointSize(int n);void SetObsDataSize(int n);CString* SplitString(CString str , char split, int iSubStrs); //分割字符串public://根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchKnownPointUsingID(CString pointID);//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* SearchUnknownPointUsingID(CString pointID);//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchPointUsingID(CString pointID);void ComputeApproximateH(void); //求待测点高差近似值public://组成误差方程,B 为系数矩阵,f为常数项向量void FormErrorEquations(CMatrix& B, CMatrix& f);void Weight(CMatrix& P); //求高差观测值的权阵void IndirectlyAdjust(const CString& strFileName);//间接平差计算主函数};文件三:Leveling.cpp代码:#include"StdAfx.h"#include"Leveling.h"#include"math.h"#include<locale.h>Leveling::Leveling(void){m_pKnownPoint=NULL;m_iKnownPointCount=0;m_pUnknownPoint=NULL;m_iUnknownPointCount=0;m_pObsData=NULL;m_iObsDataCount=0;}Leveling::~Leveling(void){//释放动态数组内存if(m_pUnknownPoint!=NULL){delete[] m_pUnknownPoint;m_pUnknownPoint=NULL;}if(m_pKnownPoint!=NULL){delete[] m_pKnownPoint;m_pKnownPoint=NULL;}if(m_pObsData!=NULL){delete[] m_pObsData;m_pObsData=NULL;}}bool Leveling::LoadData(const CString &FileName){CStdioFile sf; //创建文件对象//以读的形式打开文件,如果打开失败则返回if(!sf.Open(FileName, CFile::modeRead)) return false;CString strLine;BOOL bEOF=sf.ReadString(strLine);//读取第一行,已知点数m_iKnownPointCount= _ttoi((strLine)); //把读取的第一行字符串转换为数值型SetKownPointSize(m_iKnownPointCount);//设置已知点数组大小int n=0;//读取并保存已知点数据for(int i=0;i<m_iKnownPointCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pKnownPoint[i].pointID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);delete[] pstrData;pstrData=NULL;}//开始读取未知知点数据sf.ReadString(strLine);//未知点个数m_iUnknownPointCount= _ttoi((strLine));SetUnknownPointSize(m_iUnknownPointCount); //设置未知点数组大小sf.ReadString(strLine);//未知点点号//读取并保存未知点数据CString *pstrData=SplitString(strLine,',',n);for(int i=0;i<m_iUnknownPointCount;i++){m_pUnknownPoint[i].pointID=pstrData[i];m_pUnknownPoint[i].H=0;}delete[] pstrData;pstrData=NULL;//开始读取观测数据个数sf.ReadString(strLine);//观测数个数m_iObsDataCount= _ttoi((strLine));SetObsDataSize(m_iObsDataCount);//读取并保存观测数据for(int i=0;i<m_iObsDataCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pObsData[i].pStartObs=SearchPointUsingID(pstrData[0]);m_pObsData[i].pEndObs=SearchPointUsingID(pstrData[1]);m_pObsData[i].h=_tstof(pstrData[2]);m_pObsData[i].dDist=_tstof(pstrData[3]);delete[] pstrData;pstrData=NULL;}sf.Close();return true;}void Leveling::SetKownPointSize(int n){m_iKnownPointCount=n;m_pKnownPoint=new ControlPoint[n];}void Leveling::SetUnknownPointSize(int n){m_iUnknownPointCount=n;m_pUnknownPoint=new ControlPoint[n];}void Leveling::SetObsDataSize(int n){m_iObsDataCount=n;m_pObsData=new CObserve[n];}//字符串分割函数CString* Leveling::SplitString(CString str , char split, int iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength()); strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}//根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchKnownPointUsingID(CString pointID) {for(int i=0;i<m_iKnownPointCount;i++){if(pointID==m_pKnownPoint[i].pointID){return &m_pKnownPoint[i];}}return NULL;}//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchUnknownPointUsingID(CString pointID) {for(int i=0;i<m_iUnknownPointCount;i++){if(pointID==m_pUnknownPoint[i].pointID){return &m_pUnknownPoint[i];}}return NULL;}//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchPointUsingID(CString pointID){ControlPoint* pCP=NULL;pCP=SearchKnownPointUsingID(pointID);if(pCP==NULL){pCP=SearchUnknownPointUsingID(pointID);}return pCP;}void Leveling::ComputeApproximateH(void) //求待测点近似高程{for(int i=0;i<m_iUnknownPointCount;i++){if(m_pUnknownPoint[i].H!=0)continue;for(int j=0;j<m_iObsDataCount;j++){if(m_pUnknownPoint[i].pointID==m_pObsData[j].pStartObs->pointID&&m_pObsData[j].pEndObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pEndObs->H-m_pObsData[j].h;elseif(m_pUnknownPoint[i].pointID==m_pObsData[j].pEndObs->pointID&&m_pObsData[j].pStartObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pStartObs->H+m_pObsData[j].h;}}}void Leveling::FormErrorEquations(CMatrix& B, CMatrix& f){B.SetSize(m_iObsDataCount, m_iUnknownPointCount);f.SetSize(m_iObsDataCount, 1);//计算系数阵for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iUnknownPointCount;j++){if(m_pObsData[i].pStartObs->pointID==m_pUnknownPoint[j].pointID) B(i,j)=-1;if(m_pObsData[i].pEndObs->pointID==m_pUnknownPoint[j].pointID)B(i,j)=1;}//计算常数阵for(int i=0;i<m_iObsDataCount;i++)f(i,0)=m_pObsData[i].h-(m_pObsData[i].pEndObs->H-m_pObsData[i].pStartObs->H);}void Leveling::Weight(CMatrix& P) //计算权阵{P.SetSize(m_iObsDataCount,m_iObsDataCount);for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iObsDataCount;j++){if(i==j)P(i,j)=1.0/m_pObsData[i].dDist;}}void Leveling::IndirectlyAdjust(const CString& strFileName){//使用最小二乘法计算平差值//NBB=BT*P*BCMatrix B; //系数矩阵CMatrix BT; //B的转置矩阵CMatrix NBB; //NBBCMatrix invNbb; //NBB逆阵CMatrix W; //W=BT*P*fCMatrix f; //常数项矩阵CMatrix P; //权阵CMatrix x; //近似值改正项矩阵CMatrix V; //改正项矩阵CMatrix Omiga; //方差CMatrix X; //平差值ComputeApproximateH();FormErrorEquations(B,f); //系数阵Weight(P); //权阵BT=~B; //B的转置矩阵NBB=BT*P*B;invNbb=NBB.Inv();; //NBB逆阵W=BT*P*f;x=invNbb*W;X.SetSize(m_iUnknownPointCount,1);for(int i=0;i<m_iUnknownPointCount;i++){X(i,0)=m_pUnknownPoint[i].H+x(i,0);}//精度评定V=B*x-f;//开始输出间接平差的结果CStdioFile SF;CString strLine;setlocale(LC_ALL,"");if(!SF.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;//开始写数据SF.WriteString(_T("----------水准网间接平差结果----------\n"));//写已知点数据strLine.Format(_T("已知点个数:%d\n"),m_iKnownPointCount);SF.WriteString(strLine);for(int i=0;i<m_iKnownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pKnownPoint[i].pointID,m_pKnownPoint[i].H);SF.WriteString(strLine);}//待测点平差值strLine.Format(_T("待测点个数:%d\n"),m_iUnknownPointCount);SF.WriteString(strLine);strLine.Format(_T("平差结果:\n"));SF.WriteString(strLine);for(int i=0;i<m_iUnknownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pUnknownPoint[i].pointID,X(i,0));SF.WriteString(strLine);}//输出系数阵和常数项SF.WriteString(_T("B矩阵:\r\n"));OutMatrixToFile(B,SF);//输出权矩阵SF.WriteString(_T("\r\nP矩阵(对角阵):\r\n"));OutMatrixToFile(P,SF);SF.WriteString(_T("高差改正数x(mm):\r\n"));OutMatrixToFile(x,SF);SF.WriteString(_T("NBB矩阵:\r\n"));OutMatrixToFile(NBB,SF);SF.WriteString(_T("NBB矩阵的逆矩阵:\r\n"));OutMatrixToFile(invNbb,SF);SF.WriteString(_T("W矩阵:\r\n"));OutMatrixToFile(W,SF);//输出观测值残差SF.WriteString(_T("观测值残差(mm):\r\n"));OutMatrixToFile(V,SF);//计算单位权中误差,并输出Omiga=~V*P*V;double Sigma;Sigma = sqrt(Omiga(0, 0) / (m_iObsDataCount - m_iUnknownPointCount));strLine.Format(_T("单位权中误差(mm):%.4f\r\n"),Sigma);SF.WriteString(strLine);double Qx;SF.WriteString(_T("点位误差(mm):\r\n"));for(int i=0;i<invNbb.Row();i++){Qx=sqrt(invNbb(i,i))*Sigma;strLine.Format(_T("%.4f "),Qx);SF.WriteString(strLine);}SF.WriteString(_T("\r\n"));SF.Close();}//把矩阵输出到文件中void Leveling::OutMatrixToFile(const CMatrix& mat,CStdioFile& SF){CString strLine,strTmp;for(int i=0;i<mat.Row();i++){strLine.Empty();for(int j=0;j<mat.Col();j++){strTmp.Format(_T("%.4f "),mat(i,j));strLine=strLine+strTmp;}SF.WriteString(strLine+_T("\r\n"));}}文件四:Matrix.h代码:#pragma onceclass CMatrix{public:CMatrix(int row=3,int col=3);// copy constructorCMatrix (const CMatrix& m);~CMatrix(void);private:double **dMatData;//保存矩阵元素数据的二维数组int iRow;//矩阵的行int iCol;//矩阵的列public:int Row() const {return iRow;}//返回行int Col() const {return iCol;}//返回列void SetSize (int row, int col);//调整数组的大小,原有数据不变(未测试)double& operator () (int row, int col);//获取矩阵元素double operator() (int row, int col) const;//重载获取矩阵元素函数,只有const 对象能访问CMatrix& operator = (const CMatrix& m) ;//注意:友元函数并不是类自己的成员函数friend CMatrix operator + (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator - (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const double& num, const CMatrix& m1);friend CMatrix operator * (const CMatrix& m1,const double& num);friend CMatrix operator ~ (const CMatrix& m);//矩阵转置CMatrix Inv();//矩阵求逆void Unit();//生成单位矩阵};文件五:LevelingAdjustDlg.cpp代码:void CLevelingAdjustDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_EXPLORER,_T("(文本文件)|*.txt")); //创建打开文件对话框if(dlgFile.DoModal()==IDCANCEL) return;//如果选择取消按钮,则退出CString strFileName=dlgFile.GetPathName();//获取选择的文件的名称Leveling ST;ST.LoadData(strFileName);ST.IndirectlyAdjust(_T("IndirectlyAdjustResult.txt"));MessageBox(_T("计算完毕!\r\n结果保存在Result.txt文件中!"));ShellExecute(this->m_hWnd,_T("open"),_T("notepad.exe"),_T("IndirectlyAdjustResult.txt"),_T(""),SW_SHOW );}6.运行结果:实验的运行结果如下图所示:8.实验总结这次的实验让我对于面对对象的编程思想有了进一步的理解。
测绘程序设计课程设计
测绘程序设计课程设计一、教学目标本课程旨在通过学习测绘程序设计,使学生掌握测绘学的基本原理和方法,能够运用测绘程序进行实际操作,培养学生的动手能力和实际操作能力。
学生通过本课程的学习,应达到以下目标:1.知识目标:掌握测绘学的基本原理、方法和程序,了解测绘技术的发展趋势。
2.技能目标:能够熟练使用测绘程序,进行地形图的绘制、测量数据的处理等。
3.情感态度价值观目标:培养学生对测绘学科的兴趣,提高学生对测绘工作的认识,培养学生严谨的科学态度和良好的职业道德。
二、教学内容本课程的教学内容主要包括测绘学的基本原理、测绘程序的使用和操作、地形图的绘制等。
具体包括以下内容:1.测绘学基本概念、测绘基准和测绘仪器的使用。
2.地形图的绘制方法、地形图的阅读和应用。
3.测绘程序的使用和操作,包括数据的输入和输出、数据的处理和分析等。
三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、实践操作法、案例分析法等。
具体方法如下:1.讲授法:通过教师的讲解,使学生掌握测绘学的基本原理和方法。
2.实践操作法:通过学生的实际操作,使学生熟练使用测绘程序,掌握地形图的绘制方法。
3.案例分析法:通过分析实际案例,使学生了解测绘程序在实际工程中的应用。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的测绘学教材,为学生提供系统、科学的学习材料。
2.参考书:提供相关测绘学科的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作课件、演示视频等,帮助学生直观、形象地理解测绘学原理和方法。
4.实验设备:准备测绘仪器、计算机等实验设备,为学生提供实际操作的机会。
以上教学资源将有助于提高本课程的教学质量,帮助学生更好地掌握测绘程序设计知识。
五、教学评估本课程的教学评估将采用多元化评估方式,全面客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过学生在课堂上的发言、提问、讨论等,评估学生的参与度和思考能力。
测绘程序设计实验报告python
测绘程序设计实验报告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);}三、实验结果打开文件数据:平差结果:四、实验心得这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
工程测量报告
工程测量报告一、引言。
工程测量是工程建设中不可或缺的重要环节,它涉及到土地规划、建筑设计、道路修建等诸多领域。
本次报告旨在对某工程测量项目进行详细记录和分析,以便为后续工程建设提供准确的测量数据和参考依据。
二、测量范围。
本次工程测量涉及的范围主要包括X区域内的土地和建筑物。
具体包括土地界址、地表高程、建筑物平面图、地下管线等内容。
三、测量方法。
在本次测量过程中,我们采用了全站仪、GPS定位仪、电子测距仪等先进的测量设备,结合传统的测量方法,对目标进行了精确的测量和定位。
同时,为了保证测量数据的准确性和可靠性,我们进行了多次重复测量,并对测量结果进行了严格的校核和比对。
四、测量成果。
经过精确测量和数据处理,我们得到了X区域内土地界址的详细测量数据,包括地块面积、边界坐标等;地表高程的测量数据,包括地面高程分布图、地形剖面图等;建筑物平面图的测量数据,包括建筑物外形、内部空间分布等;地下管线的测量数据,包括管线类型、埋深、走向等。
五、数据分析。
通过对测量数据的分析,我们可以清晰地了解X区域内土地的利用状况和地形地貌特征,为土地规划和设计提供重要参考;可以准确把握建筑物的布局和空间分布,为建筑设计和施工提供重要依据;可以详细掌握地下管线的位置和走向,为道路修建和管线维护提供重要支持。
六、结论与建议。
通过本次工程测量,我们获得了丰富的测量数据,为后续工程建设提供了重要的基础资料。
但同时也发现了一些问题和不足,比如部分地块存在边界争议、建筑物平面图中存在一些不清晰的区域、地下管线的部分数据存在偏差等。
因此,我们建议在后续工程建设中,需要进一步加强对这些问题的调查和处理,以确保工程建设的顺利进行。
七、致谢。
在本次工程测量过程中,得到了相关部门和单位的大力支持和帮助,在此向他们表示诚挚的感谢。
八、附录。
1. 测量数据表格。
2. 测量图纸和图像资料。
以上就是本次工程测量报告的全部内容,希望能为相关工程建设提供有益的参考和支持。
测量平差课程设计报告
一、需求分析:总体描述:控制网平差程序对野外控制网观测数据进行平差数据处理,其目的就是根据最小二乘原理,消除网中的各种几何矛盾,求出全网各待定元素(未知点的平面坐标或三维坐标)功能需求:1.优化设计:根据控制网的观测精度与网形,全面评定网的精度2.数据输入:外部数据倒入3.概算:自动完成近似坐标的推算。
4.平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定。
5.成果输出:控制网图形输出,平差结果报表及其输出,绘制误差椭圆。
二、系统设计系统设计是课程设计的提纲与指导,它主要分为四大模块:1.数据输入模块;2.数据预处理模块;3.平差计算模块;4.成果输出模块。
后面两个星期的实习基本上按照系统设计执行模块一:数据输入模块数据文件设计:ControlNetName, name1Surveyor, Name2Recorder, Name3Date, ##-##-##FixPointNum, Number1UnknownPointNum, Number2AngleObsNum, Number3DistanceObsNum, Number4AllObsNum, Number5AngleRmsError, m1DistRmsError, m2WeightedError, mEND Header主体数据观测数据:测站点号,照准点号,方向观测值测站点号,照准点号,距离观测值模块二:数据预处理模块坐标概算:j为测站,i为照准点,k为与测站j相邻的已知点则有:Tji=Tij+AXi=Xj+Sji*cos(Tji)Yi=Yi+ Sji*sin(Tji)Tij=arctan((Yj-Yi)/(Xj-Xi))每遇到未知的照准点皆重复以上四部。
模块三:平差计算模块1. 列出误差方程及条件式间接平差模型:误差方程: 角度观测值的误差方程:其中:边长观测值的误差方程:由近似坐标计算而得 为实测边长2. 定权已知测角精度为 δ1,边长的观测精度为δ2, 令方向观测值的权 P=1, 则边长观测值的权 P=δ*δ/S(计算权阵时要注意与B 及L 系数阵的单位要统一)3. 组成法方程4. 解算法方程,求得dX=[dx1 dy1 dx2 dy2 …] 5. 平差后的坐标值计算X=X+dX 。
温湿度测量设计实训报告
一、实训目的本次实训旨在通过设计、搭建和调试一个温湿度测量系统,使学生掌握温湿度传感器的工作原理,了解温湿度测量系统的设计方法,提高学生的实际操作能力和工程实践能力。
二、实训内容1. 传感器选型:选择合适的温湿度传感器,如SHT11或DHT11。
2. 电路设计:设计温湿度传感器的电路,包括传感器与单片机的接口电路、电源电路等。
3. 程序编写:编写单片机程序,实现温湿度数据的采集、处理和显示。
4. 系统调试:对系统进行调试,确保其正常运行。
三、实训过程1. 传感器选型:根据实训要求,选择SHT11温湿度传感器。
SHT11传感器具有精度高、响应速度快、功耗低等优点,适用于各种温湿度测量场合。
2. 电路设计:(1)传感器与单片机的接口电路:将SHT11传感器的输出信号与单片机的I/O 口相连,实现数据的采集。
(2)电源电路:为SHT11传感器和单片机提供稳定的电源。
3. 程序编写:(1)初始化单片机,配置I/O口、定时器等。
(2)读取SHT11传感器的数据,包括温度和湿度。
(3)对数据进行处理,转换为实际值。
(4)将温度和湿度值显示在LCD屏幕上。
4. 系统调试:(1)检查电路连接是否正确,确保传感器与单片机之间的信号传输正常。
(2)运行程序,观察LCD屏幕上的显示,确保温湿度数据采集和显示正确。
(3)对系统进行校准,确保测量精度。
四、实训结果1. 系统功能:(1)实时采集温湿度数据。
(2)显示温度和湿度值。
(3)具有数据保存和查询功能。
2. 系统性能:(1)测量精度:温度精度±0.5℃,湿度精度±3%RH。
(2)响应时间:≤1秒。
(3)功耗:≤0.5W。
3. 系统优点:(1)结构简单,易于搭建。
(2)操作方便,易于使用。
(3)测量精度高,可靠性好。
五、实训总结通过本次实训,我们学习了温湿度传感器的工作原理,掌握了温湿度测量系统的设计方法。
在实训过程中,我们学会了电路设计、程序编写和系统调试等技能,提高了自己的实际操作能力和工程实践能力。
测量程序设计实验自我鉴定
测量程序设计实验自我鉴定
《测量程序设计实验自我鉴定》
在测量程序设计实验中,我对自己的表现进行了一次全面的自我鉴定。
通过这次实验,我认识到了自己的优势和不足之处,并且为今后的学习和工作制定了更加明确的目标。
首先,在实验中我表现出了较强的独立思考能力和实验操作能力。
在测量程序设计的过程中,我能够独立思考问题,并且能够灵活运用所学知识进行实验操作,取得了较好的实验成果。
这一点让我感到自豪,也让我意识到在今后的学习和工作中,要保持独立思考和实践能力的重要性。
其次,我也意识到了自己在编程能力和程序设计方面的不足。
在实验中,我遇到了一些编程问题,尤其是在程序的设计和调试过程中遇到了困难。
这让我意识到需要加强对编程知识和程序设计的学习,提高自己的能力和水平。
通过这次实验的自我鉴定,我对自己的能力有了更清晰的认识,也为今后的学习和工作制定了更加明确的目标。
我将努力加强对编程知识和程序设计的学习,在实践中不断提升自己的能力和水平。
同时,我也会保持对独立思考和实践能力的重视,不断完善自己,为未来的发展做好准备。
《工程测量》实验报告书
《工程测量》实验报告书姓名:学号:组别:组长:小组成员:第一部分测量实验须知一、测量实验规定(1)在测量实验之前,应复习教材中的有关内容,认真仔细地预习实验或实验指导书,明确目的与要求、熟悉实验步骤、注意有关事项,并准备好所需文具用品,以保证按时完成实验任务。
(2)实验分小组进行,组长负责组织协调工作,办理所用仪器工具的借领和归还手续。
(3)实验应在规定的时间进行,不得无故缺席或迟到早退;应在指定的场地进行,不得擅自改变地点或离开现场。
(4)必须严格遵守本书列出的“测量仪器工具的借领与使用规则”和“测量记录与计算规则”(5)服从教师的指导,每人都必须认真、仔细地操作,培养独立工作能力和严谨的科学态度,同时要发扬互相协作精神。
每项实验都应取得合格的成果并提交书写工整规范的实验报告,经指导教师审阅签字后,方可交还测量仪器和工具,结束实验。
(6)实验过程中,应遵守纪律,爱护现场的花草、树木和农作物,爱护周围的各种公共设施,任意砍折、踩踏或损坏者应予赔偿。
二、测量仪器工具的借领与使用规则(1)测量仪器工具的借领1)在教师指定的地点办理借领手续,以小组为单位领取仪器工具。
2)借领时应该当场清点检查。
实物与清单是否相符,仪器工具及其附件是否齐全,背带及提手是否牢固,脚架是否完好等。
如有缺损,可以补领或更换。
3)离开借领地点之前,必须锁好仪器箱并捆扎好各种工具;搬运仪器工具时,必须轻取轻放,避免剧烈震动。
4)借出仪器工具之后,不得与其他小组擅自调换或转借。
5)实验结束,应及时收装仪器工具,送还借领处检查验收,消除借领手续。
如有遗失或损坏,应写出书面报告说明情况,并按有关规定给予赔偿。
(2)测量仪器使用注意事项1)携带仪器时,应注意检查仪器箱盖是否关紧锁好,拉手、背带是否牢固。
2)打开仪器箱之后,要看清并记住仪器在箱中的安放位置,避免以后装箱困难。
3)提取仪器之前,应注意先松开制动螺旋,再用双手握住支架或基座轻轻取出仪器,放在三脚架上,保持一手握住仪器,一手去拧连接螺旋,最后旋紧连接螺旋使仪器与脚架连接牢固。
合肥工业大学 测绘工程 课程设计报告(曲线测设程序设计)
课程设计报告曲线测设程序设计专 业: 测绘工程姓 名: 胡强班 级: 测绘工程09级1班指导老师: 吴兆福实验时间: 2012.6.15‐‐‐‐2012.7.10合肥工业大学 测绘工程2009级1.实验目的和要求1.学习工程测量的基本知识,加强对课本知识的运用,通过编写程序,深化对课本知识的理解。
2.学会用计算机编程工具对所学知识进行运用,并用计算机程序来解决专业中所遇到的实际问题。
2.实验环境和工具1.可用于操作的计算机一台,2.Microsoft Visual basic工具软件;3. 实验结果a)程序流程图(略)b)程序代码(主要)Private Sub cmdCalc_Click()Dim dblA#, dblR#, dblJD#, s As StringDim dblT#, dblL#, dblE#, dblD#Dim dblZY#, dblQZ#, dblYZ#Dim i%, fab#'缓和曲线变量Dim ls#, V#, bet0#, p#, q#Dim Th#, Lh#, Ly#, Eh#, Dh#Dim dblZH#, dblHY#, dblYH#, dblHZ#dblA = DoToHu(Val(txtA.Text))dblR = Val(txtR.Text)dblJD = ZToS(txtJD.Text)If Check1.Value = 0 Then '无缓和曲线'圆曲线测设元素的计算dblT = dblR * Tan(dblA / 2)dblL = dblR * dblAdblE = dblR * (1 / Cos(dblA) ‐ 1)dblD = 2 * dblT ‐ dblL'主点里程计算dblZY = dblJD ‐ dblTdblYZ = dblZY + dblLdblQZ = dblYZ ‐ dblL / 2If Abs(dblJD ‐ (dblQZ + dblD / 2)) > 0.000001 Then MsgBox "主点里程检核不合格!"'详细测设iZY = dblQZ \ 20 ‐ dblZY \ 20iYZ = dblYZ \ 20 ‐ dblQZ \ 20ReDim xZY#(iZY), yZY#(iZY), fZY#(iZY), lZY#(iZY), xYZ#(iYZ), yYZ#(iYZ), fYZ#(iYZ), lYZ#(iYZ)lZY(0) = 0: fZY(0) = 0: xZY(0) = 0: yZY(0) = 0 '直圆点到曲中点For i = 0 To iZY ‐ 1lZY(i + 1) = ((i + 1) * 20 ‐ (dblZY ‐ (dblZY \ 20) * 20))fZY(i + 1) = lZY(i + 1) / dblRxZY(i + 1) = dblR * Sin(fZY(i + 1))yZY(i + 1) = dblR * (1 ‐ Cos(fZY(i + 1)))Next ilYZ(0) = 0: fYZ(0) = 0: xYZ(0) = 0: yYZ(0) = 0 '曲中点到圆直点For i = 0 To iYZ ‐ 1lYZ(i + 1) = ((iYZ ‐ i ‐ 1) * 20 + (dblYZ ‐ (dblYZ \ 20) * 20))fYZ(i + 1) = lYZ(i + 1) / dblRxYZ(i + 1) = dblR * Sin(fYZ(i + 1))yYZ(i + 1) = dblR * (1 ‐ Cos(fYZ(i + 1)))Next i'显示结果With MSFlexGrid1.Cols = 5.Rows = iZY + iYZ + 4'显示第一行.Row = 0.Col = 0: .Text = "桩号".Col = 1: .Text = "Li".Col = 2: .Text = "圆心角".Col = 3: .Text = "Xi".Col = 4: .Text = "Yi"'显示内容:数值保留2位小数,角度到秒.Row = 1: .Col = 0: .Text = "ZY " & SToZ(dblZY) 'ZY点.Col = 1: .Text = lZY(0): .Col = 2: .Text = fZY(0).Col = 3: .Text = xZY(0): .Col = 4: .Text = yZY(0)For i = 1 To iZY 'ZY‐‐>QZ.Row = i + 1: .Col = 0: .Text = "+" & ((dblZY ‐ (dblZY \ 1000) * 1000) \ 20 + i) * 20.Col = 1: .Text = Format(lZY(i), "0.00"): .Col = 2: .Text = Format(HuToDo(fZY(i)), "0.0000").Col = 3: .Text = Format(xZY(i), "0.00"): .Col = 4: .Text = Format(yZY(i), "0.00")Next i.Row = iZY + 2: .Col = 0: .Text = "QZ " & SToZ(dblQZ) 'QZ点For i = 0 To iYZ ‐ 1 'QZ‐‐>YZ.Row = i + iZY + 3: .Col = 0: .Text = "+" & ((dblQZ ‐ (dblQZ \ 1000) * 1000) \ 20 + i + 1) * 20.Col = 1: .Text = Format(lYZ(i + 1), "0.00"): .Col = 2: .Text = Format(HuToDo(fYZ(i + 1)), "0.0000") .Col = 3: .Text = Format(xYZ(i + 1), "0.00"): .Col = 4: .Text = Format(yYZ(i + 1), "0.00")Next i.Row = iZY + iYZ + 3: .Col = 0: .Text = "YZ " & SToZ(dblYZ) 'YZ点.Col = 1: .Text = lYZ(0): .Col = 2: .Text = fYZ(0).Col = 3: .Text = xYZ(0): .Col = 4: .Text = yYZ(0)End WithElseIf Check1.Value = 1 Then '有缓和曲线'缓和曲线参数V = Val(txtV.Text)ls = 0.035 * V * V * V / dblRbet0 = ls / (2 * dblR)p = ls * ls / (24 * dblR)q = ls / 2 ‐ ls * ls * ls / (240 * dblR * dblR)'缓和曲线元素Th = (dblR + p) * Tan(dblA / 2) + qLy = dblR * (dblA ‐ 2 * bet0)Lh = Ly + 2 * lsEh = (dblR + p) / Cos(dblA / 2) ‐ dblRDh = 2 * Th ‐ Lh'主点里程dblZH = dblJD ‐ ThdblHY = dblZH + lsdblYH = dblHY + LydblHZ = dblYH + lsdblQZ = dblHZ ‐ Lh / 2If Abs(dblJD ‐ (dblQZ + Dh / 2)) > 0.000001 Then MsgBox "主点里程检核不合格!"'详细测设iZH = dblHY \ 20 ‐ dblZH \ 20: iHY = dblQZ \ 20 ‐ dblHY \ 20iYH = dblYH \ 20 ‐ dblQZ \ 20: iHZ = dblHZ \ 20 ‐ dblYH \ 20ReDim xZH#(iZH), yZH#(iZH), fZH#(iZH), lZH#(iZH), xHY#(iHY), yHY#(iHY), fHY#(iHY), lHY#(iHY)ReDim xYH#(iYH), yYH#(iYH), fYH#(iYH), lYH#(iYH), xHZ#(iHZ), yHZ#(iHZ), fHZ#(iHZ), lHZ#(iHZ)Dim templ#lZH(0) = 0: fZH(0) = 0: xZH(0) = 0: yZH(0) = 0 '直缓点到缓圆点For i = 0 To iZH ‐ 1lZH(i + 1) = ((i + 1) * 20 ‐ (dblZH ‐ (dblZH \ 20) * 20))fZH(i + 1) = lZH(i + 1) / dblRxZH(i + 1) = lZH(i + 1) ‐ lZH(i + 1) ^ 5 / (40 * dblR * dblR * ls * ls)yZH(i + 1) = lZH(i + 1) ^ 3 / (6 * dblR * ls)Next ilHY(0) = 0: fHY(0) = 0: xHY(0) = 0: yHY(0) = 0 '缓圆点到曲中点For i = 0 To iHY ‐ 1lHY(i + 1) = ((i + iZH + 1) * 20 + (dblZH ‐ (dblZH \ 20) * 20))fHY(i + 1) = lHY(i + 1) / dblRxHY(i + 1) = dblR * Sin(fHY(i + 1))yHY(i + 1) = dblR * (1 ‐ Cos(fHY(i + 1)))Next ilYH(0) = 0: fYH(0) = 0: xYH(0) = 0: yYH(0) = 0 '曲中点到圆缓点For i = 0 To iYH ‐ 1lYH(i + 1) = ((iYH ‐ i) * 20 + (dblQZ ‐ (dblQZ \ 20) * 20))fYH(i + 1) = lYH(i + 1) / dblRxYH(i + 1) = dblR * Sin(fYH(i + 1))yYH(i + 1) = dblR * (1 ‐ Cos(fYH(i + 1)))Next ilHZ(0) = 0: fHZ(0) = 0: xHZ(0) = 0: yHZ(0) = 0 '圆缓点到缓直点For i = 0 To iHZ ‐ 1lHZ(i + 1) = ((iHZ ‐ i) * 20 ‐ (dblHZ Mod 20))fHZ(i + 1) = lHZ(i + 1) / dblRxHZ(i + 1) = lHZ(i + 1) ‐ lHZ(i + 1) ^ 5 / (40 * dblR * dblR * ls * ls)yHZ(i + 1) = lHZ(i + 1) ^ 3 / (6 * dblR * ls)Next i'显示结果With MSFlexGrid1.Cols = 5.Rows = iZH + iHY + iYH + iHZ + 6'显示第一行.Row = 0.Col = 0: .Text = "桩号".Col = 1: .Text = "Li".Col = 2: .Text = "圆心角".Col = 3: .Text = "Xi".Col = 4: .Text = "Yi"'显示内容:数值保留2位小数,角度到秒.Row = 1: .Col = 0: .Text = "ZH " & SToZ(dblZH) 'ZH点.Col = 1: .Text = lZH(0): .Col = 2: .Text = fZH(0).Col = 3: .Text = xZH(0): .Col = 4: .Text = yZH(0)For i = 1 To iZH 'ZH‐‐>HY.Row = i + 1: .Col = 0: .Text = "+" & ((dblZH ‐ (dblZH \ 1000) * 1000) \ 20 + i) * 20.Col = 1: .Text = Format(lZH(i), "0.00"): .Col = 2: .Text = Format(HuToDo(fZH(i)), "0.00").Col = 3: .Text = Format(xZH(i), "0.00"): .Col = 4: .Text = Format(yZH(i), "0.00")Next i.Row = iZH + 2: .Col = 0: .Text = "HY " & SToZ(dblHY) 'HY点For i = 1 To iHY 'YH‐‐>QZ.Row = i + iZH + 2: .Col = 0: .Text = "+" & ((dblHY ‐ (dblHY \ 1000) * 1000) \ 20 + i) * 20.Col = 1: .Text = Format(lHY(i), "0.00"): .Col = 2: .Text = Format(HuToDo(fHY(i)), "0.00").Col = 3: .Text = Format(xHY(i), "0.00"): .Col = 4: .Text = Format(yHY(i), "0.00")Next i.Row = iZH + iHY + 3: .Col = 0: .Text = "QZ " & SToZ(dblQZ) 'QZ点For i = 1 To iYH 'QZ‐‐>YH.Row = i + iZH + iHY + 3: .Col = 0: .Text = "+" & ((dblQZ ‐ (dblQZ \ 1000) * 1000) \ 20 + i) * 20 .Col = 1: .Text = Format(lYH(i), "0.00"): .Col = 2: .Text = Format(HuToDo(fYH(i)), "0.00").Col = 3: .Text = Format(xYH(i), "0.00"): .Col = 4: .Text = Format(yYH(i), "0.00")Next i.Row = iZH + iHY + iYH + 4: .Col = 0: .Text = "YH " & SToZ(dblYH) 'YH点For i = 1 To iHZ 'YH‐‐>HZ.Row = i + iZH + iHY + iYH + 4: .Col = 0: .Text = "+" & ((dblYH ‐ (dblYH \ 1000) * 1000) \ 20 + i) * 20 .Col = 1: .Text = Format(lHZ(i), "0.00"): .Col = 2: .Text = Format(HuToDo(fHZ(i)), "0.00").Col = 3: .Text = Format(xHZ(i), "0.00"): .Col = 4: .Text = Format(yHZ(i), "0.00")Next i.Row = iZH + iHY + iYH + iHZ + 5: .Col = 0: .Text = "HZ " & SToZ(dblHZ) 'HZ点.Col = 1: .Text = lHZ(0): .Col = 2: .Text = fHZ(0).Col = 3: .Text = xHZ(0): .Col = 4: .Text = yHZ(0)End WithEnd IfEnd SubPrivate Sub cmdExit_Click()EndEnd Sub'将里程桩号化为里程数值形式Public Function ZToS(s As String) As DoubleDim iPos%iPos = InStr(s, "+")ZToS = Val(Right(Left(s, iPos), iPos ‐ 1) * 1000 + Mid(s, iPos + 1))End Function'里程数值化为里程桩号Public Function SToZ(dbl#) As StringDim k%, m#k = dbl \ 1000m = dbl ‐ k * 1000SToZ = "k" & Trim(Str(k)) & "+" & Trim(Str(m))End Function'弧度化为度.分秒的形式:输入弧度值,输出度.分秒(各占两位)Public Function HuToDo(ByVal Hu As Double) As SingleDim du%, fen%, miao%Hu = Hu * 180 / PIdu = Fix(Hu)Hu = (Hu ‐ du) * 60fen = Fix(Hu)Hu = (Hu ‐ fen) * 60miao = Fix(Hu + 0.5)If miao = 60 Thenfen = fen + 1miao = 0End IfHuToDo = du + fen / 100 + miao / 10000End Function'将度.分秒形式化为弧度:输入为度.分秒形式,输出为弧度Public Function DoToHu(ByVal DoFenMiao As Double) As SingleDim du%, fen%, miao%, angle#du = Fix(DoFenMiao)DoFenMiao = (DoFenMiao ‐ du) * 100fen = Fix(DoFenMiao)miao = (DoFenMiao ‐ fen) * 100angle = du + fen / 60 + miao / 3600DoToHu = angle * PI / 180End FunctionPrivate Sub Command1_Click()txtA.Text = ""txtR.Text = ""txtJD.Text = ""txtV.Text = ""End SubPrivate Sub Command2_Click()frmMain.HideForm1.ShowEnd Subc)运行结果在已有的数据当中,运算结果还算成功,精度也符合一定要求。
测频法和测周法转速测量的课程设计报告
一、任务要求1.性能要求:测量围:5~5000rpm;2.功能要求:采用MCS51系列单片机完成测量,并将测量值显示于数码管上。
分别采用测频法和测周法进行设计,并比较不同速度段的测量精度。
二、方案论证系统组成:图1-1 系统组成框图如图1-1所示,本次设计的系统主要由以下几个部分组成,即:传感器、单片机以及显示部分组成。
各个部分的方案论证如下:2.1传感器的选择目前,可用于测速的传感器有很多,例如:光电传感器,开关型霍尔传感器,电涡流传感器以及光电编码器等。
方案一:采用光电传感器光电传感器是通过光电二极管和光敏三极管把光输入信号转化为磁输入信号的器件。
光电传感器的优点是响应速度快、测量精度高,能够直接输出高低电平,缺点是容易受外来光线、灰尘等的影响,即对周围环境的要求比较高。
方案二:采用开关型霍尔传感器开关型霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。
开关型霍尔的优点是能够直接输出高低电平,属于大信号传感器,对外部的信号调理电路要求不高,缺点是响应速度不如光电传感器。
方案三:采用电涡流传感器电涡流传感器是利用电涡流效应来工作的传感器,具有长期工作稳定性好,抗干扰能力强,但是输出信号比较弱,后续处理电路比较复杂,且一般价格比较高。
在灰尘和粉尘较少而要求频率响应围比较宽的情况下,可以采用光电传感器。
而在灰尘和粉尘比较多的情况下,则选用开关型霍尔传感器。
由于本次设计主要针对自行车和汽车的测速,故选用开关型霍尔传感器。
2.2显示模块的选择方案一:采用LED数码管LED数码管只可以显示数字和简单的字母,其优点是价格便宜,程序编写比较简单,功耗低,缺点是亮度不高,在要显示数字多的场合下,体积较大,比较占空间。
方案二:采用LCD1602液晶显示LCD1602液晶显示模块具有体积小、功耗低,对比度可调且能够显示ASC II 码和简单的汉字等优点,其缺点是成本比数码管高,而且程序编写相对复杂。
方案三:采用LCD12864液晶显示LCD12864液晶显示屏优点是能够显示汉字,且功耗比较低,其确定是软件编程比较复杂。
测绘程序设计(VS2019)实验报告--文件操作word资料6页
《测绘程序设计(VC)》上机实验报告(Visual C++)实验5 文件班级:学号:姓名:序号:二零一零年四月实验5 文件一、实验目的∙掌握文件对话框的使用方法。
∙掌握C++文件操作的一般步骤及实现方法。
∙了解MFC文件操作的特点及使用方法。
二、实验内容1. 编制简单的Cass数据文件进行数据整理的程序。
整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。
要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件要求:a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件名。
b.自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,Hc.用文本框显示原始数据和整理后的数据d..按编程规范进行编码设计思路:1)自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,H2)定义一个分割函数用来分割数据3)打开文件,将测量点的数据值赋给点的结构体数组4)通过比较结构体元素的异同删除重复点,获得新的总点数5)按点号大小的升序排列6)将新排好的数据输出到另一个文本框中,并保存于文件中。
界面设计:共2个文本框、2个Group Box控件、2个命令按钮。
主要代码:FileDlg.cpp//定义点的结构体#define POINT struct pointPOINTint iDotmark;CString strCode;double X;double Y;double Z;void CFileDlg::OnBnClickedOpenfile()// TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeRead)) return;CString strLine;strPriData.Empty();BOOL bEOF=sf.ReadString(strLine);while(bEOF)strPriData+=strLine;bEOF=sf.ReadString(strLine);if(bEOF) strPriData+=_T("\r\n");sf.Close();//整理原始数据并在右边编辑框中输出//UpdateData(TRUE);int iLine;//分行并存入字符串数组CString *pstrLine=SplitString(strPriData,'\n',iLine);int iTotalPoint; //总点数CString *strTmp=NULL;int n;iTotalPoint = _ttoi(pstrLine[0]); //第一行为总点数if(iTotalPoint!=iLine-1)MessageBox(_T("数据格式有误"));POINT *pPoint=new POINT[iTotalPoint]; //结构体指针,指向点结构体//逐行用Split函数分离,给点结构体赋值for(int i=0;i<iTotalPoint;i++)strTmp = SplitString(pstrLine[i+1], ',',n);pPoint[i].iDotmark = _ttoi(strTmp[0]);pPoint[i].strCode = strTmp[1];pPoint[i].X = _tstof(strTmp[2]);pPoint[i].Y = _tstof(strTmp[3]);pPoint[i].Z = _tstof(strTmp[4]);if(strTmp!=NULL)//释放内存delete[] strTmp;strTmp=NULL;if(strTmp!=NULL)//释放内存delete[] strTmp;strTmp=NULL;//删除重复点for(int i=0;i<iTotalPoint;i++)for(int j=i+1;j<iTotalPoint;j++)if(pPoint[i].iDotmark ==pPoint[j].iDotmark)//delete pPoint;for(int k=j;k<iTotalPoint-1;k++)pPoint[k]=pPoint[k+1];iTotalPoint--;//按点号的升序排列/*POINT min=pPoint[0];*/for(int i=0;i<iTotalPoint;i++)for(int j=i+1;j<iTotalPoint;j++)if(pPoint[i].iDotmark>pPoint[j].iDotmark){POINT t=pPoint[i];pPoint[i]=pPoint[j];pPoint[j]=t;} //输出调整后的数据strTidyData.Format(_T("%d\r\n"),iTotalPoint);CString strOutput;for(int i=0;i<iTotalPoint;i++)strOutput.Format(_T("%d,%s,%f,%f,%f\r\n"),pPoint[i]);strTidyData=strTidyData+strOutput;UpdateData(FALSE);//释放内存if(pPoint!=NULL)delete[] pPoint;pPoint=NULL;void CFileDlg::OnBnClickedSavefile()// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CFileDialog dlgFile(FALSE,_T("txt"),NULL,OFN_EXPLORER,_T("(文本文件)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");CStdioFile sf;if(!sf.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;sf.WriteString(strTidyData);sf.Close();CString *CFileDlg::SplitString(CString str, char split, int& iSubStrs) int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1)iPos = strTemp.Find(split);if (iPos == -1)break;strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;if (iNums == 0) //没有找到分割符//子字符串数就是字符串本身iSubStrs = 1;return NULL;//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++)iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());strTemp = strRight;pStrSplit[i] = strLeft;pStrSplit[iNums] = strTemp;return pStrSplit;运行结果:操作过程:单击“打开原始数据”,选择原始数据所在的文本文件,自动输出原始数据及整理后的数据,单击“保存整理后的数据”,选择保存路径,确定文件名,单击保存即可。
测绘程序实验报告
实验1 Visual C++.Net环境和程序设计初步1.掌握 VC++ 语言的基本语法;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)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;界面设计:主要代码:计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。
(提示:用 do…while 迭代,B、H 初始为 0 进行迭代,直到 H 的精度达到米)注意:东经 0~180(Y>0),西经:0~-180(Y<0)式中,B、L、H 为椭球面上的大地纬度、大地经度、大地高;X、Y、Z 为空间直角坐标;N 为卯酉圈曲率半径,e 为椭球的偏心率,a 为椭球的长半径,b 为椭球的短半径。
(WGS84 椭球参数:长半径 a=6378137m,扁率α=1/)设计思路:在按钮下面设置主程序,按照指导书给的思路编辑公式界面设计:主要代码:写一个后方交会计算程序。
基本原理及计算公式若将 Pa、Pb、Pc 看成权,则 P 点的坐标即为三个已知点的加权平均值计算程序设计步骤(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。
第四届全国高等学校大学生测绘技能大赛测量程序设计(样题
第四届全国高等学校大学生测绘技能大赛测量程序设计(样题)组号:____________ 名称:____________一、考试形式1. 采用全封闭进行考试;2. 在规定时间内(6小时)完成,考试开始15分钟后不得入场考试,考试开始后3小时内不能离开考场;3. 试题来自数据库,现场随机抽取;4. 每队参加竞赛选手2人,小组成员之间可以通过网上邻居进行分工协作;5. 指导教师不得进入竞赛现场。
6. 计算机配置:(1)硬件配置:Intel Pentium,内存>2G,硬盘>80G,(2)软件配置:Windows操作系统,Microsoft Visual Studio 2010编程环境(含MSDN 中文版帮助文档),Office2010、中望CAD、记事本等。
二、程序设计要求1. 凭证进入考场,不得携带无关物品(如手机等通信设备、存储设备等),违者取消考试资格;2. 程序设计使用的数据文件在考试题目确定后分发;3. 编程语言限制为VB、VC、C#,不允许使用二次开发平台(如Matlab, AutoCAD、ArcGIS等)。
三、成果要求1. 计算成果文件;2. 程序源代码;3. 可执行文件;4. 图形文件5 开发文档内容6. 以上文件压缩为一个zip文件,文件命名方式为:“组号-参赛队伍名.zip” 。
试题:测角交会定点计算一、数据文件读取编写程序读取数据文件。
基本要求:能够正确读取文件中的所有内容。
数据文件的名称为:Test2016数据.txt。
数据格式说明见附件二。
二、Windows界面数据录入与编辑开发程序,实现windows表格功能模块,实现对读入数据的显示、编辑。
样例表格见附件一的“1. 数据记录表示例“。
三、算法设计(1)前方交会;(2)后方交会。
算法原理见附件一。
四、图形绘制编写一个类,显示测试数据中的点、线等信息,并将显示结果保存为dxf格式的文件。
五、计算报告编写程序,见计算成果保存为xls格式的文件。
测绘程序设计基础实验报告
《测绘程序设计()》上机实验报告(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 ---=,其中2cb 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编程,不过时隔两年,也陌生了不少。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
环境与测绘工程学院Array课程论文学年学期:2016-2017(一)课程名称:测量程序设计论文题目:附合导线平差求解姓名:胡慧茹学号:任课教师:白洪伟目录一实训目的 (3)二实训任务 (3)三实训环境 (4)硬件环境 (4)软件环境 (4)四项目设计与分析 (5)软件基本界面 (6)附合导线平差求解 (7)高差求解 (11)计算方位角 (12)实训内容 (12)实现步骤设计 (12)角度转换 (13)实训内容 (13)实现步骤设计 (13)计算坐标 (14)五调用程序 (15)1.导线 (15)2.将度分秒转换为度 (16)3.将度分秒转换为秒数 (17)4.将弧度转化为度分秒 (17)5.将角度转换为弧度 (17)6.给定俩坐标,坐标正y算方位角,返回的是以弧度为单位的角度 (18)六实验心得 (18)一实训目的(1)掌握C#窗体创建及其常用控件的选用和编程。
进一步提高编程能力,掌握对C#方法的调用,同时学会并运用MicrosoftVisualStudio2010软件编辑C#语言程序。
(2)实训室由学校组织,利用课堂有限的时间掌握专业知识与运用,结合课下空闲时间巩固加强。
学生在实训期间,以个人为单位完成项目,通过自己的不断摸索,实训可以学到课堂上学不到的知识,可以将学到的知识灵活运用起来。
(3)在实训的过程中,可以让学生树立明确的学习态度,拥有良好的职业素养,锻炼扎实的职业技能,塑造坚定的职业人生,也为选择考研深造的同学提供锻炼的机会。
(4)C#是当今社会中发展速度迅猛的一种语言,所以企业公司对于人员的要求也不断提高,与测绘相关的职业也需要具备编程知识的人员,通过实训激发自身潜力,提高自身修养,掌握编程语言,养成良好的编程习惯,为以后的求职生涯添上一块“敲门砖”。
(5)利用MicrosoftVisualStudio2010软件设计窗体应用程序并完成“附合导线平差”程序设计,其中包括登录界面、主界面、角弧转换界面和距离及方位角计算等界面。
二实训任务(1)软件基本界面软件的基本界面包登录界面和主界面,主界面里面为附合导线平差求解,在菜单栏的小工具中包高差求解、角度转换和坐标求解。
(2)附合导线平差求解在一条双定向附合导线中,已知端点四点坐标,若干左角和边长,求其中各点坐标。
(3)高差求解用全站仪在一点观测了另一点斜边和垂直角,求两点的高差。
(4)计算方位角方位角的取值为0-360度。
(5)角度转换将输入的角度转换为弧度或弧度转换为角度。
(6)计算坐标已知两点中一点的坐标、距离及方位角,求另一点的坐标。
三实训环境硬件环境硬件环境是计算机及其外围设备组成的计算机物理系统,即硬件设施,是指由传播活动所需要的那些物质条件、有形条件之和构筑而成的环境。
硬件环境主要是由计算机的硬件组成的,而计算机硬件是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。
这些物理装置系统按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。
简而言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。
从外观上来看,微机由主机箱和外部设备组成。
主机箱内主要包CPU、内存、主板、硬盘驱动器、光盘驱动器、各种扩展卡、连接线、电源;外部设备包鼠标、键盘、显示器、音箱等,这些设备通过接口和连接线与主机相连。
这些都是构成硬件的主要部分。
对于C#面向对象的软件来说,所需的硬件环境,要求其实不是很高,安装VisualStudio2010时的所需的必备条件如表1:表1安装VisualStudio2010所需的必备条件软件环境软件环境是指由传播活动所需要的那些非物质条件、无形条件之和构筑而成的环境。
只要指软件的运行环境以软件运行所需要的周边软件等等,除此之外,还包括目的软件之外的应用层软件,在涉及软件交互的时候,这些应用软件往往影响很大。
实训中,我们使用VS集成环境来实现对于C#程序的运行。
VisualStudio是微软公司推出的开发环境,是目前最流行的Windows平台应用程序开发环境。
VisualStudio2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单和明了。
VisualStudio2010同时带来了、MicrosoftVisualStudio2010CTP,并且支持开发面向windows7的应用程序。
VisualStudio是开发.NET应用程序的一套完整的开发工具集,集设计、编辑、运行和调试等多种功能于一体的集成开发环境(IDE)。
VisualStudio支持四种内置的开发语言:VisualBasic、VisualC++、VisualC#和VisualJ#,他们使用相同的集成开发环境,因而有助于创建混合语言解决方案。
使用VisualStudio可以高效的生成各种应用程序、XMLWebServices,桌面应用程序和移动应用程序。
使用VisualStudio集成开发环境可以快捷高效的开发Windows窗体应用程序。
VisualStudio是我们学习C#必不可少的应用环境,实训时,我们对于VisualStudio的应用更加熟练了,也对VisualStudio有了各方面的了解。
四项目设计与分析软件基本界面图1程序设计本程序名为“程序设计”,登录界面如图1,用户名为“”,密码为“胡慧茹”。
双击“确定”,为了实现账户名密码登录输入一下程序:privatevoid button1_Click(object sender,Eventrgs e){string=;string b=;if(==""&&b=="胡慧茹"){();附合导线平差求解frm2=new附合导线平差求解();();}具体步骤:文件,新建项目,windows应用窗体程序,添加两个label控件,两个textbox控件,两个button,右键属性修改控件的name和text的名称。
主界面如图2,主界面是附合导线平差求解,菜单栏中包“文件(打开、另存为)”、“小工具(角度转换、高差求解、计算坐标和计算方位角)”和“帮助(示意图)”。
图2主界面示意图附合导线平差求解新建windows窗体命名为附和导线平差,添加五个label控件,十一个textbox控件,三个button控件,一个pictureBox控件,一个openFileDialog,一个saveFileDialog右键属性修改控件的name和text的名称。
图3附合导线示意图图4附合导线平差求解在菜单栏中选择“文件”“打开”,导入文件夹中“附合导线实例数据”,点击“平差.txt”,就得出如图4的结果,点击“另存为”,可以将结果以“.txt”格式保存,命名为“附合导线输出数据实例”。
新建一个Windows应用程序命名为“附合导线平差求解”,并设计窗口,双击“平差”,编写如下代码:privatevoid button1_Click(object sender,EventArgs e){double Mx=;double My=;double Ax=;double Ay=;double Nx=;double Ny=;double Bx=;double By=;位角(Mx,My,Ax,Ay);位角(Bx,By,Nx,Ny);List<double>坐标增量X集合=new List<double>(); List<double>坐标增量Y集合=new List<double>(); List<double>水平距离平方集合=new List<double>(); List<double>方位角集合=new List<double>(); double坐标增量X和=0;double坐标增量Y和=0;double坐标增量X绝对值和=0;double坐标增量Y绝对值和=0;double水平距离和=0;double水平距离平方和=0;doubleα=α0;EG(sd1);水平距离平方集合.Add(S*S);水平距离平方和+=S*S;double dx,dy;α=导线.坐标(0,0,β,S,α,out dx,out dy);方位角集合.Add(α);坐标增量X集合.Add(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;坐标增量Y和+=dy;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);pj+=2;spj+=2;EG(LJ);位角(方位角集合[方位角集合.Count-1],βn);ount+1);lear();坐标增量Y集合.Clear();坐标增量X和=0;坐标增量Y和=0;坐标增量X绝对值和=0;坐标增量Y绝对值和=0;for(int j=0;j<方位角集合.Count;j++){方位角集合[j]+=方位角改正数*(j+1);dd(dx);坐标增量Y集合.Add(dy);坐标增量X和+=dx;坐标增量Y和+=dy;坐标增量X绝对值和+=(dx);坐标增量Y绝对值和+=(dy);}ount;j++){X+=坐标增量X集合[j]+X坐标单位长度改正数*(坐标增量X集合[j]);坐标(X));Y+=坐标增量Y集合[j]+Y坐标单位长度改正数*(坐标增量Y集合[j]);坐标(Y));}string JG=坐标x[0]+""+坐标y[0]+""+坐标x[1]+""+坐标y[1]+""+坐标x[2]+""+坐标y[2];=JG;}高差求解新建一个Windows应用程序,命令为“高差求解”,按图5布置控件。
双击“确定”,输入一下程序。
图5高差求解示意图编写如下代码:privatevoid button1_Click(object sender,EventArgs e){double D=;double a=;double i=;double v=;double h=D*(a)+*D/*D/*(a)*(a)/+i-v;=();}计算方位角实训内容方位角的取值为0-360度。
实现步骤设计新建一个Windows应用程序,命名为“计算方位角”,按照如8布置控件。
依次双击两个“确定”,输入以下程序:图6计算方位角编写如下代码:privatevoid button1_Click(object sender,EventArgs e){double后视边方位角=;double左角=;double方位角=后视边方位角+左角+;{if(方位角>=方位角-=;if(方位角<方位角+=;}=(方位角);}角度转换实训内容将输入的角度转换为弧度或弧度转换为角度。