还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《测绘程序设计(VC.net)》上机实验报告(VisualC++.Net)班级学号姓名序号二零一三年三月目录TOC\o1-3\h\z\u实验1VisualBasic环境和程序设计初步1总结5TOC\o1-3\h\z\u实验
2、控制结构程序设计(方位角计算、坐标转换、后方交会)6总结……………………………………………………………………………………………………16实验1VisualC++.Net环境和程序设计初步
一、实验内容
1.启动与退出VC++.net,熟悉VC++.net的__环境,通过向导生成基于对话框的应用程序使用MSDN查看命令按钮、标签和文本框的主要属性和方法
2.打开Microsoftvisualstudio2008文档,浏览“Visualstudio文档”目录下的内容,并从“Visualstudio文档-VisualC++-示例”目录下下载一个程序,编译并运行之
3.设计一个已知三边边长计算三角形__的程序计算模型如下海伦公式,其中
二、设计思路
1、首先,设计一个窗体,上面有三个静态框和三个文本框用于提示和输入三边abc还要有一个静态框加一个文本框用于输出__,还要加三个命令按钮,用于计算,清除和退出;
2、然后要对输入的三边进行判断是否合法(即是否可以组成三角形),用if语句实现,不合法则清零;
3、最后将海伦公式写成代码的形式即可
三、界面设计如下
四、主要代码如下#include__th.hvoidCMy006Dlg::OnBnClickedButton1{//TODO:在此添加控件通知处理程序代码//判断输入是否有误并计算UpdateDataTRUE;ifa+bca+cbb+ca{doublet;t=a+b+c/2;s=sqrtt*t-a*t-b*t-c;}elseCMy006Dlg::OnBnClickedButton2;//输入的三边不能构成三角形时则清零UpdateDataFALSE;}voidCMy006Dlg::OnBnClickedButton2{//TODO:在此添加控件通知处理程序代码//清除功能a=0;b=0;c=0;s=0;UpdateDataFALSE;}voidCMy006Dlg::OnBnClickedButton3{exit0;//退出功能//TODO:在此添加控件通知处理程序代码}
五、运行结果如下
六、实验总结本次实验比较简单,主要是熟悉一下VirsualStudio2008的MFC编程环境,了解编译MFC项目的整个流程总的来说问题不大,只是有时候因为搞错顺序而导致程序无法运行,,如先添加了代码才发现没有绑定变量尔后才绑定,或者变量属性搞错等等,都会是程序运行出错,还好有老师____另外一点就是,在实现了上述内容以后,如何去优化、美化界面的问题,还有程序的__性问题也是值得考虑的因为是面向对象的程序,所以程序运行中可能会出现的问题都要考虑周全了,如题中,如果输入的三边不能构成一个三角形要如何等等总的来说实验比较成功,收获很大实验二控制结构程序设计(方位角计算、坐标转换、后方交会)
1、实验内容
1、编写一个方位角计算程序;
2、设计同一参考椭球下的三维地心坐标(笛卡尔坐标系)与大地坐标系转换的程序;式中,BLH为椭球面上的大地维度,大地经度,大地高;X、Y、Z为空间直角坐标;N为卯酉圈曲率半径,e为椭球的偏心率,a为椭球的长半径,b为椭球的短半径(WGS84椭球参数长半径a-6378137m扁率α=
1、
298.257223563)
3、编写一个后方交会计算程序基本原理及计算公式若将PaPbPc看成权,则P点的坐标即为三个已知点的加权平均值
2、设计思路
1、方位角计算A、窗体上应有四个静态框加文本框用于输入已知点的坐标,还要一个静态框加文本框用于输出方位角,还要三个命令按钮用于计算、清除和退出;B、已知两点坐标,求所在线段的方位角,可以用正弦、余弦和正切公式,在这里我选择用正切公式;C、求出dx和dy之后,求可以求出角度,但是在不同的象限里的方位角有可能得到相同的正切值,所以要加以判断,用if语句,然后就可以求出确切的方位角了
2、坐标转换A、窗体上要有六个静态框加文本框用于输入或输出大地坐标或者空间坐标,还有三个命令按钮用于计算、清除和退出,可以加两个静态提示框;B、笛卡尔坐标转换成大地坐标,用到的是一个迭代公式,当精度达到要求时跳出循环,所以用dowhile循环,将H的初始值设为0;大地坐标转化笛卡尔坐标比较简单,将公式写成代码就可以了;两个转换须注意度分秒和弧度的转换;
3、后方交会A、窗体上应有六个静态框加文本框用以输入已知点坐标,三个静态框加文本框用以输入测得的角度,两个静态框加文本框用以输出待定点坐标,三个按钮用于计算、清除和退出;B、已知三点坐标求待定点坐标,根据赫尔默特公式,要知道三角形三个内角,内角可以根据方位角来求,方位角可用正切公式求得故分为三步,第一先求各边方位角,第二步根据方位角和内角的关系求三个内角,第三步根据内角和测量得到的α,β,γ求权,接下来就可以根据公式求出待定点坐标了;要注意三个已知点是否位于危险圆上;须注意度分秒和弧度的转换;C、在文本框中绑定相应的变量,在按钮中输入相应的代码,调试并运行
3、界面设计如下方位角计算界面坐标转换界面后方交会界面
4、主要代码如下
1、方位角计算#include__th.h#definePI
3.1415926535__79323846voidCMy007Dlg::OnBnClickedButton2{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;doubledxdyA;dx=x2-x1;dy=y2-y1;A=atandy/dx;ifdx0{ifdy0fang=A;elseifdy0fang=2*PI+A;elsefang=0;}elseifdx0{ifdy0fang=PI-A;elseifdy0fang=PI+A;elsefang=PI;}else{ifdy0fang=PI/2;elsefang=PI*3/2;}fang=fang*180/PI;UpdateDataFALSE;}voidCMy007Dlg::OnBnClickedButton1{//TODO:在此添加控件通知处理程序代码x1=0;y1=0;x2=0;y2=0;fang=0;UpdateDatafalse;}voidCMy007Dlg::OnBnClickedButton3{//TODO:在此添加控件通知处理程序代码exit0;}
2、坐标转换voidCMy007Dlg::OnBnClickedButton3{//TODO:在此添加控件通知处理程序代码exit0;}#include__th.h#definePI
3.1415926535__79323846constdoublef=1/
298.257223563;doubleNe=sqrt2*f-f*f;//扁率f第一偏心率e卯酉圈半径Ndoublea=6378137;voidCMy007Dlg::OnBnClickedButton1{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;//笛卡尔坐标转换为大地坐标doubledHH0;doubleB2L2SS1;intDMD1M1;iffabsx=1e-5L=atany/x*180/PI;elseL=0;ifx0{L=L;}elseifx0y0//计算经度{L=L+180;}else{L=L-180;}iffabsx=1e-5||fabsy=1e-5{B=atanz/sqrtx*x+y*y;H=0;do{N=a/sqrt1-e*e*sinB*sinB;H0=sqrtx*x+y*y/cosB-N;B=atanz/sqrtx*x+y*y*1-e*e*N/N+H;//迭代运算得到H,BdH=H0-H;H=H0;}whilefabsdH=1e-5;//当H的精度达到.00001时跳出循环}else{B=0;N=a/sqrt1-e*e*sinB*sinB;H=sqrtx*x+y*y/cosB-N;}B=B*180/PI;B=B+1e-10;L=L+1e-10;D=intB;D1=intL;B2=B-D*60;//弧度转换成度分秒格式L2=L-D1*60;M=intB2;M1=intL2;S=B2-M*60;S1=L2-M1*60;B=D+M/100+S/1e4;L=D1+M1/100+S1/1e4;UpdateDataFALSE;}voidCMy007Dlg::OnBnClickedButton2{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;doubleblb1l1;intDMD1M1;doubleSS1;D=intB;D1=intL;M=intB-D*100;M1=intL-D1*100;S=B-D*100-M*100;S1=L-D1*100-M1*100;b1=D+M/60+S/3600;//度分秒转化为弧度l1=D1+M/60+S1/3600;b=b1/180*PI;l=l1/180*PI;N=a/sqrt1-e*e*sinb*sinb;x=N+H*cosb*cosl;//大地测量坐标转化为笛卡尔坐标y=N+H*cosb*sinl;z=N*1-e*e+H*sinb;UpdateDataFALSE;}voidCMy007Dlg::OnBnClickedButton4{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;x=0;y=0;z=0;L=0;B=0;H=0;UpdateDataFALSE;}后方交会voidCMy23Dlg::OnBnClickedButton2{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;XA=0;YA=0;XB=0;YB=0;XC=0;YC=0;a=0;be=0;ga=0;XP=0;YP=0;UpdateDataFALSE;}voidCMy23Dlg::OnBnClickedButton3{//TODO:在此添加控件通知处理程序代码exit0;}#include__th.h#definePI
3.1415926535__79323846voidCMy23Dlg::OnBnClickedButton1{//TODO:在此添加控件通知处理程序代码UpdateDataTRUE;//后方交会intDM;doubledS;doublea1be1ga1;doublea2be2ga2;doubleaABaACaBCaBAaCAaCBABCPAPBPC;D=inta;M=inta-D*100;dS=a-D*100-M*100;a1=D+M/60+dS/3600;a2=a1*PI/180;D=intbe;M=intbe-D*100;dS=be-D*100-M*100;be1=D+M/60+dS/3600;be2=be1*PI/180;D=intga;M=intga-D*100;dS=ga-D*100-M*100;ga1=D+M/60+dS/3600;ga2=ga*PI/180;aAB=atanYB-YA/XB-XA;aAC=atanYC-YA/XC-XA;//计算各边方位角aBC=atanYC-YB/XC-XB;aBA=aAB180aAB-180:aAB+180;aCA=aAC180aAC-180:aAC+180;aCB=aBC180aBC-180:aBC+180;A=aAB-aAC;B=aBC-aBA;//计算各内角C=aCA-aCB;ifa+be+C170||a+be+C190//判断是否危险园,否则进行计算{PA=tana2*tanA/tana2-tanA;PB=tanbe2*tanB/tanbe2-tanB;PC=tanga2*tanC/tanga2-tanC;XP=PA*XA+PB*XB+PC*XC/PA+PB+PC;YP=PA*YA+PB*YB+PC*YC/PA+PB+PC;}elseMessageBox_T该点位于危险圆上;UpdateDataFALSE;}
5、运行结果
1、方位角计算
2、坐标转换
3、后方交会
6、实验总结本次实验有三个小实验,现在做完了,也不觉得是很难的事有了上一次实验的经验,MFC制作流程是很熟悉了主要是计算按钮里的代码写代码也不是难事,把公式写出来就是了,注意一下该注意的,比如不同象限里的方位角会有一样的正切值,度分秒与弧度的相互转换,危险圆等等,也不是很困难难就难在将代码码进去调试我算是比较粗心的一个人,总有一些小问题没有被发现,跌跌撞撞调试到现在才算完成可能装的软件有些问题,0错误0警告的时候还是要运行第二遍才成功,第一遍可是直接停止工作了实验中用得比较多的语句是if语句,这次用了一次dowhile循环,对于我这种基础不甚牢靠的人来说,又是一个挑战再请教了各路高手之后,我终于还是完成了,有种柳暗花明的感觉。