测绘程序实验报告.docx
- 文档编号:27789472
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:13
- 大小:19.78KB
测绘程序实验报告.docx
《测绘程序实验报告.docx》由会员分享,可在线阅读,更多相关《测绘程序实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
测绘程序实验报告
实验1VisualC++.Net环境和程序设计初步
1.掌握VC++语言的基本语法;
2.理解顺序结构、选择结构和循环结构程序设计的特点及应用;
3.掌握对基于对话框的MFC应用程序设计方法;
4.掌握一些简单算法。
5.编写一个方位角计算程序。
提示:
先使用反正切函数计算,然后利用坐标增量
的符号来判断所在的象限。
设计思路:
在按钮下面添加程序。
XY同时大于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。
界面要求:
三个坐标输入框,两个角度输入框
一个坐标结果输出框
一个计算按钮,一个清除按钮,一个退出按钮。
2.由三角形三个边长求内角函数
计算公式:
设计思路:
通过示例编辑框添加变量,在按钮下面添加程序。
先将α、β、的度分秒之转换成度利用三角形内角和等于180算出γ并将γ转换成弧度。
接着计算三角形的内角,判断P点是否在危险圆上若不在则计算P点坐标若在则弹出“该点在危险圆上”。
界面设计:
主要代码:
protected:
HICONm_hIcon;
写一个求任意多边形面积的程序。
提示:
通过界面输入数据,并把数据保存
在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。
要
求计算部分写成函数的形式,使计算程序与界面无关。
动态数组
创建动态数组
结构体的定义
多边形面积计算原理及算法
计算原理:
面积计算的算法:
提示:
显示框用Cedit控件变量
对每个输入的坐标用CStringstr临时变量格式化,然后用CEdit的控件变量插入
设计思路:
将实现写在按钮在下面。
添加顶点下面实现创建动态数组,确认按钮实现返回数组大小值并将添加的数据显示到显示框中去,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据,退出按钮退出程序。
界面设计:
主要代码:
"
#include"05(3)"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
d%lf%lf\r\n"),t,x,y);
(str);
px[t-1]=x;
py[t-1]=y;
UpdateData(FALSE);
}
voidCMy073Dlg:
:
OnBnClickedButton5()
{
掌握面向对象编程基本思想
2.掌握VC++中创建类
3.掌握建立和使用对象
4.掌握运算符号重载
5.理解类的继承和多态性
二、实验内容
1.设计一个角度类。
要求该类具有度分秒至度的换算、度至度分秒的换算、度与
弧度的换算等功能。
提示:
设置一个角度大小属性,并设定该属性为缺省属性;
另设一个状态属性,表示当前设置的角度大小的形式;度分秒、度、弧度间的相
互转换的方法;定义运算符号(加、减)方法,使得角度类能够像一种普通的数
据类型样的方便使用。
设计思路:
设计一个角度类在类的头文件里申明度到度分秒的转换、度分秒到度的转换、度到弧度的转换、运算符的重载,在类的.cpp文件中写出具体的函数实现,在按钮下面调用类的各个函数来实现角度的转换。
界面设计:
主要代码:
DECLARE_MESSAGE_MAP()
public:
doubledmstodgree(doubledmg);编制简单的Cass数据文件进行数据整理的程序。
整理后的数据文件中要求无
重复点数据,且数据按点号大小的升序进行排序。
要求整理后的数据按与原始数
据文件同样的格式保存为另外一个文件
示例数据“民用园燃气.dat”文件数据格式:
总点数
点号,编码,X,Y,H
…
例如:
要求:
a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件
名。
b.自定义一个测量点数据结构体,其元素包括:
点号,编码,X,Y,H
c.用文本框显示原始数据和整理后的数据
d..按编程规范进行编码
a.读数据、保存数据、判断一个点数据是否已经存在、排序、在文本框中
显示文件内容等可以分别定义成一个子过程或函数。
c.编程技巧
打开文件
获得总点数根据点数调整数组的大
逐行读取数据,判断该点是否已经存在数组
中,若不存在,则把该数据存放在数组中
根据删除重复点后的总点
数,重新调整数组大小
按点号大小的升序排序
按原数据格式输出到另外一个文件
设计思路:
在按钮下面设置主程序。
通过打开文件按钮将原文件打开并显示到示例编辑框内,通过保存文件按钮实现对文件分行、删除重复点、排序、保存更改后的文件并把它显示到示例编辑框中等操作。
界面设计:
主要代码:
xt"));at"));umber=_ttoi(strTmp[0]);oder=strTmp[1];
pPoint[i].X=_tstof(strTmp[2]);
pPoint[i].Y=_tstof(strTmp[3]);
pPoint[i].H=_tstof(strTmp[4]);
}
if(strTmp!
=NULL)umber=pPoint[j].number)
delete[]pPoint;
umber>pPoint[j].number)
{
t=pPoint[i].number;pPoint[j].number=t;pPoint[i].number=pPoint[j].number;
}
}
}
umber,pPoint[i].coder,pPoint[i].X,pPoint[i].Y,pPoint[i].H);
}
xiugai=xiugai+strOutPut;列数据为一变形监测点的24期位移监测结果(分别为X,Y,H),编制程序绘
制出该点的变形曲线图,每个方向一个位移序列图。
设计思路:
用类DeformationCurve实现原始文件的读入、文件的拆分、画图等功能,调用类的相关函数来实现相应的功能。
界面设计:
因为是基于当文本的所以没有界面
主要代码:
classDeformationCurve:
publicCWnd
{
DECLARE_DYNAMIC(DeformationCurve)
public:
DeformationCurve();
virtual~DeformationCurve();
protected:
DECLARE_MESSAGE_MAP()
public:
CString*DeformationCurve:
:
Splitstring(CStringstr,charsplit,int&isubstr);
voidDeformationCurve:
:
ReadData(double*&X,double*&Y,double*&H);
voidDeformationCurve:
:
Draw(CDC*pDC,CRect&rect);
};
xt"));f"),pDC->TextOutW(dOrgX-60,dEndY+i*dy,str);
}
for(inti=0;i<=3;i++)
{
(_T("%.3f"),pDC->TextOutW(dOrgX-120,dEndY+i*dy,str);
}
for(inti=0;i<=3;i++)
{
(_T("%.3f"),pDC->TextOutW(dOrgX=180,dEndY+i*dy,str);
}
();
=dOrgX+i*dx;
ptX[i].y=dOrgY-int((X[i]/*3*dy);
}
pDC->Polyline(ptX,24);=dOrgX+i*dx;
ptY[i].y=dOrgY-int((Y[i]+/*3*dy);
}
pDC->Polyline(ptY,24);
=dOrgX+i*dx;
ptH[i].y=dOrgY-int((H[i]*3*dy));
}
pDC->Polyline(ptH,24);
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=SearchPointUsingID(pstrData[1]);ObsValue=_tstof(pstrData[2]);ist=_tstof(pstrData[3]);trID==ID)
{return&m_pKnownPoint[i];}
}
returnNULL;
}
trID==ID)
{return&m_pUnknownPoint[i];}
}
returnNULL;
}
LevelControlPoint*AdjustLevel:
:
SearchPointUsingID(CStringID)
{
LevelControlPoint*cp;
cp=SearchKnownPointUsingID(ID);
if(cp==NULL)
cp=SearchUnknownPointUsingID(ID);
returncp;
}
voidAdjustLevel:
:
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;
}
returnp;
}
voidAdjustLevel:
:
FormErrorEquation(CMatrix&B,CMatrix&L)
{
(m_iDhObsCount,m_iUnknownPointCount);
(m_iDhObsCount,1);
for(inti=0;i
tmpFront=SearchPointUsingID(m_pDhObs[i].cpFrontObj->strID);
trID==tmpBack->strID)trID==tmpFront->strID)bsValue-(m_pDhObs[i].cpBackObj->H-m_pDhObs[i].cpFrontObj->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;
CStringstrFileName=();
setlocale(LC_ALL,"");
CStdioFilesf;
if(!
(strFileName,CFile:
:
modeCreate|CFile:
:
modeWrite))return;
(LevleContent);
();
UpdateData(FALSE);
}
voidCIndircLelveDlg:
:
OnBnClickedComputelevel()
{
f\r\n"),[i].strID,[i].H);
LevleContent+=Temp;
}
(_T("单位权中误差:
%.1fmm\r\n"),r0*1000);
LevleContent+=Temp;
LevleContent+=_T("未知点高程中误差(mm):
\r\n");
for(inti=0;i<;i++)
{
();
(_T("%s,%.1f\r\n"),[i].strName,Qx[i]*1000);
LevleContent+=Temp;
}
UpdateData(false);
}
voidCIndircLelveDlg:
:
OnBnClickedSavelevleresult()
{
xt"));
if()==IDCANCEL)return;
CStringstrFileName=();
setlocale(LC_ALL,"");
CStdioFilesf;
if(!
(strFileName,CFile:
:
modeCreate|CFile:
:
modeWrite))return;
(LevleContent);
();
UpdateData(FALSE);
}
二、实验结果
打开文件数据:
平差结果:
四、实验心得
这从实验是我们测绘程序设计的最后一次实验,虽然这个学期我们做了好几次相关的实验,但是我却发现自己学的东西也越来越模糊,感觉很多内容都不理解。
这次的实验很大程度上我都是按照《测绘程序设计》上面单导线简易计算来编的,在加上后面的关于水准网间接平差的误差方程和法方程,以及精度评定的相关函数,来完成的。
而自己主要完成的就是水准网的数据读取,保存的操作,由于这部分主要用的知识是文件的读取的,因为前面做过,所以不是太难。
但是这并不意味着这次实验很简单,至少在我心中这的确比较难,因为里面很多东西不是纯粹的把代码写上去就可以完成,还要靠自己做相应的代码对应,才能够真正的得到想要的结果。
但学好编程并扎实的为自己所用是需要更多的学习和练习的,我知道在掌握课堂知识的同时,主动的去寻找吸收相关的知识,希望通过本门课程的学习,掌握学习编程的方法,使自己的水平能够更进一步,循序渐进的掌握更多。
虽然这门课的实验已经结束,但是我却深深地知道,我们专业对编程的要求很高,而且必须具备较好的编程能力,或许这些日子下来,我学到的不是很多,但是我或多或少明白,编程是一个循序渐进的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测绘 程序 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)