测绘程序设计实验报告word文档.docx

上传人:b****1 文档编号:15240154 上传时间:2023-07-02 格式:DOCX 页数:20 大小:334.31KB
下载 相关 举报
测绘程序设计实验报告word文档.docx_第1页
第1页 / 共20页
测绘程序设计实验报告word文档.docx_第2页
第2页 / 共20页
测绘程序设计实验报告word文档.docx_第3页
第3页 / 共20页
测绘程序设计实验报告word文档.docx_第4页
第4页 / 共20页
测绘程序设计实验报告word文档.docx_第5页
第5页 / 共20页
测绘程序设计实验报告word文档.docx_第6页
第6页 / 共20页
测绘程序设计实验报告word文档.docx_第7页
第7页 / 共20页
测绘程序设计实验报告word文档.docx_第8页
第8页 / 共20页
测绘程序设计实验报告word文档.docx_第9页
第9页 / 共20页
测绘程序设计实验报告word文档.docx_第10页
第10页 / 共20页
测绘程序设计实验报告word文档.docx_第11页
第11页 / 共20页
测绘程序设计实验报告word文档.docx_第12页
第12页 / 共20页
测绘程序设计实验报告word文档.docx_第13页
第13页 / 共20页
测绘程序设计实验报告word文档.docx_第14页
第14页 / 共20页
测绘程序设计实验报告word文档.docx_第15页
第15页 / 共20页
测绘程序设计实验报告word文档.docx_第16页
第16页 / 共20页
测绘程序设计实验报告word文档.docx_第17页
第17页 / 共20页
测绘程序设计实验报告word文档.docx_第18页
第18页 / 共20页
测绘程序设计实验报告word文档.docx_第19页
第19页 / 共20页
测绘程序设计实验报告word文档.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

测绘程序设计实验报告word文档.docx

《测绘程序设计实验报告word文档.docx》由会员分享,可在线阅读,更多相关《测绘程序设计实验报告word文档.docx(20页珍藏版)》请在冰点文库上搜索。

测绘程序设计实验报告word文档.docx

测绘程序设计实验报告word文档

《测绘程序设计(VC.net)》

上机实验报告

(VisualC++.Net)

 

班级:

学号:

姓名:

序号:

二零一三年三月

 

实验1VisualBasic环境和程序设计初步1

总结5

实验2、控制结构程序设计(方位角计算、坐标转换、后方交会)6

总结……………………………………………………………………………………………………16

 

实验1VisualC++.Net环境和程序设计初步

一、实验内容

1.启动与退出VC++.net,熟悉VC++.net的开发环境,通过向导生成基于对话框的应用程序。

使用MSDN查看命令按钮、标签和文本框的主要属性和方法。

2.打开Microsoftvisualstudio2008文档,浏览“Visualstudio文档”目录下的内容,并从“Visualstudio文档->VisualC++->示例”目录下下载一个程序,编译并运行之。

3.设计一个已知三边边长计算三角形面积的程序。

计算模型如下:

海伦公式:

,其中

二、设计思路

1、首先,设计一个窗体,上面有三个静态框和三个文本框用于提示和输入三边a,b,c,还要有一个静态框加一个文本框用于输出面积,还要加三个命令按钮,用于计算,清除和退出;

2、然后要对输入的三边进行判断是否合法(即是否可以组成三角形),用if语句实现,不合法则清零;

3、最后将海伦公式写成代码的形式即可。

三、界面设计如下:

四、主要代码如下:

#include

voidCMy006Dlg:

:

OnBnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

//判断输入是否有误并计算

UpdateData(TRUE);

if(a+b>c&&a+c>b&&b+c>a)

{

doublet;

t=(a+b+c)/2;

s=sqrt(t*(t-a)*(t-b)*(t-c));

}

elseCMy006Dlg:

:

OnBnClickedButton2();//输入的三边不能构成三角形时则清零

UpdateData(FALSE);

}

voidCMy006Dlg:

:

OnBnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

//清除功能

a=0;

b=0;

c=0;

s=0;

UpdateData(FALSE);

}

voidCMy006Dlg:

:

OnBnClickedButton3()

{

exit(0);//退出功能

//TODO:

在此添加控件通知处理程序代码

}

五、运行结果如下:

六、实验总结

本次实验比较简单,主要是熟悉一下VirsualStudio2008的MFC编程环境,了解编译MFC项目的整个流程。

总的来说问题不大,只是有时候因为搞错顺序而导致程序无法运行,,如先添加了代码才发现没有绑定变量尔后才绑定,或者变量属性搞错等等,都会是程序运行出错,还好有老师指点迷津。

另外一点就是,在实现了上述内容以后,如何去优化、美化界面的问题,还有程序的完美性问题也是值得考虑的。

因为是面向对象的程序,所以程序运行中可能会出现的问题都要考虑周全了,如题中,如果输入的三边不能构成一个三角形要如何等等。

总的来说实验比较成功,收获很大。

 

实验二控制结构程序设计(方位角计算、坐标转换、后方交会)

一、实验内容

1、编写一个方位角计算程序;

2、设计同一参考椭球下的三维地心坐标(笛卡尔坐标系)与大地坐标系转换的程序;

式中,B,L,H为椭球面上的大地维度,大地经度,大地高;X、Y、Z为空间直角坐标;N为卯酉圈曲率半径,e为椭球的偏心率,a为椭球的长半径,b为椭球的短半径。

(WGS84椭球参数:

长半径a-6378137m,扁率α=1、298.257223563)

3、编写一个后方交会计算程序:

基本原理及计算公式:

若将Pa,Pb,Pc看成权,则P点的坐标即为三个已知点的加权平均值

二、设计思路

1、方位角计算:

A、窗体上应有四个静态框加文本框用于输入已知点的坐标,还要一个静态框加文本框用于输出方位角,还要三个命令按钮用于计算、清除和退出;

B、已知两点坐标,求所在线段的方位角,可以用正弦、余弦和正切公式,在这里我选择用正切公式;

C、求出dx和dy之后,求可以求出角度,但是在不同的象限里的方位角有可能得到相同的正切值,所以要加以判断,用if语句,然后就可以求出确切的方位角了。

2、坐标转换:

A、窗体上要有六个静态框加文本框用于输入或输出大地坐标或者空间坐标,还有三个命令按钮用于计算、清除和退出,可以加两个静态提示框;

B、笛卡尔坐标转换成大地坐标,用到的是一个迭代公式,当精度达到要求时跳出循环,所以用dowhile循环,将H的初始值设为0;大地坐标转化笛卡尔坐标比较简单,将公式写成代码就可以了;两个转换须注意度分秒和弧度的转换;

3、后方交会:

A、窗体上应有六个静态框加文本框用以输入已知点坐标,三个静态框加文本框用以输入测得的角度,两个静态框加文本框用以输出待定点坐标,三个按钮用于计算、清除和退出;

B、已知三点坐标求待定点坐标,根据赫尔默特公式,要知道三角形三个内角,内角可以根据方位角来求,方位角可用正切公式求得。

故分为三步,第一先求各边方位角,第二步根据方位角和内角的关系求三个内角,第三步根据内角和测量得到的α,β,γ求权,接下来就可以根据公式求出待定点坐标了;要注意三个已知点是否位于危险圆上;须注意度分秒和弧度的转换;

C、在文本框中绑定相应的变量,在按钮中输入相应的代码,调试并运行。

三、界面设计如下:

方位角计算界面:

坐标转换界面:

后方交会界面:

四、主要代码如下:

1、方位角计算:

#include

#definePI3.14159265358979323846

voidCMy007Dlg:

:

OnBnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubledx,dy,A;

dx=x2-x1;

dy=y2-y1;

A=atan(dy/dx);

if(dx>0)

{

if(dy>0)

fang=A;

elseif(dy<0)

fang=2*PI+A;

else

fang=0;

}

elseif(dx<0)

{

if(dy>0)

fang=PI-A;

elseif(dy<0)

fang=PI+A;

else

fang=PI;

}

else

{

if(dy>0)

fang=PI/2;

else

fang=PI*3/2;

}

fang=fang*180/PI;

UpdateData(FALSE);

}

voidCMy007Dlg:

:

OnBnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

x1=0;

y1=0;

x2=0;

y2=0;

fang=0;

UpdateData(false);

}

voidCMy007Dlg:

:

OnBnClickedButton3()

{

//TODO:

在此添加控件通知处理程序代码

exit(0);

}

2、坐标转换:

voidCMy007Dlg:

:

OnBnClickedButton3()

{

//TODO:

在此添加控件通知处理程序代码

exit(0);

}

#include

#definePI3.14159265358979323846

constdoublef=1/298.257223563;

doubleN,e=sqrt(2*f-f*f);//扁率f,第一偏心率e,卯酉圈半径N

doublea=6378137;

voidCMy007Dlg:

:

OnBnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//笛卡尔坐标转换为大地坐标

doubledH,H0;

doubleB2,L2,S,S1;

intD,M,D1,M1;

if(fabs(x)>=1e-5)

L=atan(y/x)*180/PI;

elseL=0;

if(x>0)

{

L=L;

}

elseif(x<0&&y>0)//计算经度

{

L=L+180;

}

else

{

L=L-180;

}

if((fabs(x)>=(1e-5))||(fabs(y)>=(1e-5)))

{

B=atan(z/sqrt(x*x+y*y));

H=0;

do

{

N=a/sqrt(1-e*e*sin(B)*sin(B));

H0=sqrt(x*x+y*y)/cos(B)-N;

B=atan(z/(sqrt(x*x+y*y)*(1-e*e*N/(N+H))));//迭代运算得到H,B

dH=H0-H;

H=H0;

}

while(fabs(dH)>=(1e-5));//当H的精度达到.00001时跳出循环

}

else

{

B=0;

N=a/sqrt(1-e*e*sin(B)*sin(B));

H=sqrt(x*x+y*y)/cos(B)-N;

}

B=B*180/PI;

B=B+(1e-10);

L=L+(1e-10);

D=int(B);

D1=int(L);

B2=(B-D)*60;//弧度转换成度分秒格式

L2=(L-D1)*60;

M=int(B2);

M1=int(L2);

S=(B2-M)*60;

S1=(L2-M1)*60;

B=D+M/100+S/(1e4);

L=D1+M1/100+S1/(1e4);

UpdateData(FALSE);

}

voidCMy007Dlg:

:

OnBnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

doubleb,l,b1,l1;

intD,M,D1,M1;

doubleS,S1;

D=int(B);

D1=int(L);

M=int((B-D)*100);

M1=int((L-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/sqrt(1-e*e*sin(b)*sin(b));

x=(N+H)*cos(b)*cos(l);//大地测量坐标转化为笛卡尔坐标

y=(N+H)*cos(b)*sin(l);

z=(N*(1-e*e)+H)*sin(b);

UpdateData(FALSE);

}

voidCMy007Dlg:

:

OnBnClickedButton4()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

x=0;

y=0;

z=0;

L=0;

B=0;

H=0;

UpdateData(FALSE);

}

后方交会:

voidCMy23Dlg:

:

OnBnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);

XA=0;

YA=0;

XB=0;

YB=0;

XC=0;

YC=0;

a=0;

be=0;

ga=0;

XP=0;

YP=0;

UpdateData(FALSE);

}

voidCMy23Dlg:

:

OnBnClickedButton3()

{

//TODO:

在此添加控件通知处理程序代码

exit(0);

}

#include

#definePI3.14159265358979323846

voidCMy23Dlg:

:

OnBnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData(TRUE);//后方交会

intD,M;

doubledS;

doublea1,be1,ga1;

doublea2,be2,ga2;

doubleaAB,aAC,aBC,aBA,aCA,aCB,A,B,C,PA,PB,PC;

D=int(a);

M=int((a-D)*100);

dS=((a-D)*100-M)*100;

a1=D+M/60+dS/3600;

a2=a1*PI/180;

D=int(be);

M=int((be-D)*100);

dS=((be-D)*100-M)*100;

be1=D+M/60+dS/3600;

be2=be1*PI/180;

D=int(ga);

M=int((ga-D)*100);

dS=((ga-D)*100-M)*100;

ga1=D+M/60+dS/3600;

ga2=ga*PI/180;

aAB=atan((YB-YA)/(XB-XA));

aAC=atan((YC-YA)/(XC-XA));//计算各边方位角

aBC=atan((YC-YB)/(XC-XB));

aBA=(aAB>180?

aAB-180:

aAB+180);

aCA=(aAC>180?

aAC-180:

aAC+180);

aCB=(aBC>180?

aBC-180:

aBC+180);

A=aAB-aAC;

B=aBC-aBA;//计算各内角

C=aCA-aCB;

if((a+be+C)<170||(a+be+C)>190)//判断是否危险园,否则进行计算

{

PA=(tan(a2)*tan(A))/(tan(a2)-tan(A));

PB=(tan(be2)*tan(B))/(tan(be2)-tan(B));

PC=(tan(ga2)*tan(C))/(tan(ga2)-tan(C));

XP=(PA*XA+PB*XB+PC*XC)/(PA+PB+PC);

YP=(PA*YA+PB*YB+PC*YC)/(PA+PB+PC);

}

elseMessageBox(_T("该点位于危险圆上"));

UpdateData(FALSE);

}

五、运行结果

1、方位角计算:

2、坐标转换:

3、后方交会:

六、实验总结

本次实验有三个小实验,现在做完了,也不觉得是很难的事。

有了上一次实验的经验,MFC制作流程是很熟悉了。

主要是计算按钮里的代码。

写代码也不是难事,把公式写出来就是了,注意一下该注意的,比如不同象限里的方位角会有一样的正切值,度分秒与弧度的相互转换,危险圆等等,也不是很困难。

难就难在将代码码进去调试。

我算是比较粗心的一个人,总有一些小问题没有被发现,跌跌撞撞调试到现在才算完成。

可能装的软件有些问题,0错误0警告的时候还是要运行第二遍才成功,第一遍可是直接停止工作了。

实验中用得比较多的语句是if语句,这次用了一次dowhile循环,对于我这种基础不甚牢靠的人来说,又是一个挑战。

再请教了各路高手之后,我终于还是完成了,有种柳暗花明的感觉。

(注:

素材和资料部分来自网络,供参考。

请预览后才下载,期待你的好评与关注!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2