




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、测绘程序设计(vc.net)上机实验报告(visual c+. net)班级:测绘1001学号:0405100111姓名:李佳霖序号:二零一三年三月目录实验3数组、指针与函数的使用实验3实验4 类的创建和使用实验2实验3数组、指针与函数的使用实验一、实验目的掌握数组的定义、引用及应用方法。掌握指针与动态数组。掌握函数的定义、引用及应用方法。二、实验内容:(一) 、多边形面积的计算程序设计思路:由于计算多边形面积当中多边形的边数不确定,如果采用一股的编辑框作为输入数据的方式很 难达到动态改变输入数据个数的要求,因此可借用单一水准测量程序当中利用multi_line屈性的编 辑框來输入和输出数据。
2、(1) 在对话框中布设两个编辑框,分别用于输入和输出数据。布设两个按钮控件,用于操作。(2) 分别为控件修改屈性中的id以及名称,再将两个编辑框添加变量,均为cstring类型的变量, strobsdata 和 strresulto(3) 双击calculate按钮控件,为onbnclickedbuttoncomputeo函数添加代码。(4) 在添加calculate按钮的代码之前,为满足实验要求应先定义一个实现多边形面积计算的函数cstring cmythirdexd 1 g:compute(cstring strobsdata) o 函数的算法如卜: 利用spl i tstri ng函数将
3、输入的cstri ng类型的strobsdata分行并存入字符串数组pstrli ne中; 判断数据的完整性,如果所分得的行数即多边形的边数小于3则弹出提示对话框,若数据完整则 继续进行; 再利用splitstring函数分别将每一行的数据以“,”來分割并存入字符数组,根据数组中元素的 位置分别进行类型转换,并将实型数据存入到定义的xobs, yobs这两个用于存放多边形定点坐标的 动态数组; 利用所给公式和以上步骤得出的各个顶点坐标数据,使用一个for循坏即可求出多边形的面积,£ thearca再将area格式化显示为strresult并返回即nj'; 在使用完动态数组变量
4、时,要及时释放内存; 利用编好的函数,在calculate按钮的消息函数 中计算面积。界面设计:设计时的界面如右图主要代码:列出程序的代码,按文件依次列出。注意代码的书写格式和注释/ mythi rdexdlg. cpp :实现文件/include "stdafx. h"#include "mythirdex. h"rtinclude "mythirdexdig. h"sinclude <math. h>bool cmythirdexdlg:0ninitdialogocdialog: :0ntni tdialogo ;/将
5、“关于菜单项添加到系统菜单屮。/ 1dm aboutbox必须在系统命令范围内。assert(tdm aboutbox & oxfffo) = tdm aboutbox);assert(1 dm aboutbox < oxeooo);cmenu* psysmenu = getsystemmenu(false);if (psysmenu != null)cstring straboutmenu;s traboutmenu. loads11' ing (ids_aboutbox);if (!straboutmenu. isemptr0)psysmenu-appendmenu(
6、mf separator);psysmenu->appendmenu(mf string, idm aboutbox, straboutmenu);)/设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/执行此操作/设置大图标/设置小图标set icon(m_hlcon, true);set i con(m_hicon, false);/ todo:在此添加额外的初始化代码/对话框屮数据的初始化数据格式/第一行:已知数据,"点号,x坐标,y坐标"第二行:strobsdcita. format ( tc%srn%srn%srn%sz/),_t("1,
7、o. 0, 0. 0"),_t("2, 2. 0, 0. 0"),_t("3, 1.0, 1.0"),_t("4,0 0, 1.0);updatedcita (false);return true; /除非将焦点设置到控件,否则返回truevoid cmythirdexdlg:onsyscommand(uint nid, lparam 1param)if (nld & oxfffo) = idm_aboutbox)caboutdlg dlgabout;dlgabout. domodal ();elsecdialog:onsys
8、commtind(ntd, 1 param);/如果向对话框添加最小化按钮,则需要下血的代码/来绘制该图标。对于使用文档/视图模型的mfc应用程序,/这将由框架自动完成。void cmythirdexdlg:0npaint()if (tstconico)cpaintdc de (this) ; /用于绘制的设备上下文sendmessage (wm 1c0nerasebkgnd, reinterpret cast<wparam> (de. getsafelldc 0), 0);/使图标在工作区矩形中居中ini cxlcon 二 gctsystcmmetrics(smcxicon);i
9、nt cylcon = getsystemmetrics(sm_cyic0n);crect rect;getclientrect(&rect);ini x = (reel.width() - cxlcon +1)/2; int y = (rect. height() - cylcon + 1)/2;/绘制图标de. drawteon(x, y, m htcon);elsecdialog:0npaint();当用户拖动最小化窗口时系统调用此函数取得光标/显示。hcursor cmythi rdexdlg:onquerydragtcon 0i'ctui'n stat ic_
10、cast<hcursor> (m hlcon);/定义函数splitstring用来分割字符串cstring *cmrthirdexd 1 g:sp 1 itstring(cstring str, char split, int& isubstrs) int ipos = 0; /分割符位置int inums = 0; /分割符的总数cstring strtcmp 二 str;cstring strright;/先计算子字符串的数量while (ipos != -1)ipos = strtcmp. find(split);if gpos - -1)break;strrigh
11、t = sti'tcmp. mid (ipos + 1, str. getlengtho);strtcmp = strright;inums+;if (inums = 0) /没有找到分割符/子字符串数就是字符串木身isubstrs = 1:return null;/子字符串数组isubstrs = inums + 1; /子串的数量=分割符数量+ 1cstring* pstrspli t;pstrspli t = new cstringisubstrs;strtemp = str;cstring strleft;for (int i = 0; i < inums; i+)ipo
12、s = strtemp. find(split):/左子串strleft = sti'tcmp. left (ipos);/右子串strright = strtemp. mid(ipos + 1, strtemp. getlengtho);strtemp = strright;pstrspliti = strleft;pstrsplitinums = strtemp;return pstrsplit;/定义函数compute来计算多边形的面积cstring cmrthirdexd 1 g:compute (cstring strobsdata)int iline;/定义总行数iline
13、cstring strresul t;7定义用于输出的cstring类型的变量strresul t分行并存入字符串数组cstring *pstrline=splitstring(strobsdata,13, iline);判断数据的完整性if (iline<3)messageboxgk输入的数据不完整!");int iobscount=iline;/已知值的个数doub 1 e *x0bs=new doubleiobscount;/己知的x坐标double *y0bs=new doubleiobscount;/己知的y坐标cstring *strtmp=null;int n ;
14、/将每一行分割为儿个部分运用splits数逐行分割己知数据,并将其进行类型转换后存放在动态数组中 for (int i=0;i<iobscount;i+)strtmp=spl it str in g(pstrl, in ei,',', n);xobsi=_tstof(strtmptl);yobs 订二_ tstof (strtm讥2);/释放strtmp的内存if (strtmp!=null)delete strtmp;strtmp=null;/释放pstrline的内存i f (pstrline!=null)delete pstrlinc;pstrline=null;/
15、根据所给公式和各定点坐标数据计算多边形的而积double area二0.0;int i;double j;for (i_0;i<iobscount-l;i+)area=area+(fabs(xobsi+l)+fabs(xobsi)*(fabs(yobsi+1)-fabs(yobsi)*0.5;area=area+(xobsi+xobs0)*(yobs0-yobsi)*0.5;释放内存if(xobs!=null)delete xobs;xobs=null;if(yobs!=null)delete xobs;yobs 二 nui 丄;格式化显示并输出结果strresult. format (
16、_t("%s%f"),_t(该多边形面积为,z), area):return strresult;/定义按钮calculate的消息函数void cmythirdexdlg:onbnclickedbuttoncomputc 0 / todo:在此添加控件通知处理程序代码 updatedata (true);strresult=computo(strobsdata);updatedata (false);运行结果:列出程序运行时的界面;有数据输入输出的,要求至少输入一组数据,并列岀输出的结 果,対较为复杂的程序简要叙述程序的使用说明。设计技巧:若在程序设计屮总结出了一些技巧或
17、经验,可以在这里列出。如果没有,不必列出该项。a. 对于一些输入数据数量不确定的程序设计问题,可利用多行的编辑框来输入,并使用 splitstring函数分割输入数据,经类型转换后用于计算b. 对于一些输入数据较多的问题,为程序调试的方便,可以在bool cmythirdexdlg: :ontnitdialog() 函数当中,对编辑框中的数据进行初始化。实验总结经过本次实验,我掌握了数组,指针和函数的定义和使用方法,尤其是动态数组和指针的 使用,这是我之前很少用到的。而且本次实验是我在参考老师简单水准测量实例的基础下独立 完成的实验,在实验中我主要遇到并解决了一下儿个问题:1、cstring类
18、的理解和使用,因为 z前没有用过这个类型的数据,所以木次实验屮在读简单水准测暈实例代码的时候遇到了一些 问题,splitstring函数的定义屮有很多函数都不了解其功能,上网查找相应的用法z后将 splitstring函数的实现方法全部搞懂;2、代码编写完运行之后发现输入编辑框中的数据都在 同一行中显示,即编辑框不能换行。在属性当中将multiling和want return均改为true之后 便可以换行了; 3、程序运行计算的结果始终为零。利用老师教的调试方法,设置断点,逐语句运行发现公式计算出來的址閃为零,然后我注意到1/2中两个操作数均为整形,运算的结果収 证后为零才导致错误结果的出现,
19、因此将其改为0. 5即可。本次实验自己发现问题,并独立解决问题,培养了实践能力和动手能力,并通过本次实验 加深了课堂理论知识的理解,并对数组指针和函数的定义和使用方法更加熟悉了。(二)、三角形三边长计算内角、外接圆三点坐标计算圆心坐标、极坐标法求待定点坐标的函数本实验中由于三个函数的验证均放在同一个对话框中,虽然我已经整理了控件的布局,但是仍然略显复杂,还请老师见谅设计思路 由于这三个函数的设计方法相似,在本次试验当中,将相关的空间均布设在同一个对话框当中。1、分别布设静态文本控件、编辑框控件 和按钮控件,如图所示,并修改文本和属 性id,使其与相应的功能相联系;2、分别为对话框中的16个编辑
20、框控件 添加变量,均为double型,且命名时要 与其含义相对应;3、分别利用实验指导书中所给出公式,定义三角形三边长计算内角、外接圆三点 坐标计算圆心坐标、极坐标法求待定点坐 标的函数;4、分别为3个按钮控件innerangle,circlecenter, pointcoord定义消息函数,添加的代码即分别利用所定义的三个函数,和编辑框中输入的数据来完成相应的操作;5、利用蚀刻风格的picture控件和组合框來装饰整理界面设计。界面设计如上图主要代码:j本次实验中由于忘记设置按钮控件的1d所以消息函数开头均用注释做详细说处ii mythirdex3dlg. cpp :实现文件/#inelud
21、e zzstdafx h"#include "mythirdex3. h" ttinclude *mythirdex3dlg. h" sinclude <math. h> const double pi= 4.0*atan (1 0);const double ep=l. 0e-006;/定义函数由三角形三个边长计算第一个形参所代表的边所对的内角double getinncrang(consl double &a,consl double &b,consl double &c)double a;/=acos (b*b+
22、c*c-a*a) / (2*b*c);return a;只有一个返回值,在应用时可根据参数位置的不同分别求出三个内角)/定义函数由已知平面外接圆上三点坐标计算圆心坐标void gctcircenlcr(consl double &xl,consl double &y1,const double &x2,const double &y2,const double&x3,const doub1e &y3,double &xo, double &y0)/xo, yo两个变量均为引用形式,形参的改变可使实参发生改变,可利用此特性用于需耍多
23、个返回值的问题/定义基本变量,并赋初值double a, b, c, g;a=xl*xl+yl*yl;b=x2*x2+y2*y2:c=x3*x3+y3*y3:g=(y3-y2)*xl+(yl-y3)*x2+(y2-yl)*x3;/计算圆心坐标x0=(b-c)*yl+(c-a)*y2+ (ab)*y3)/(2*g);y0_-(b-c)*xl+(c-a)*x2+(a-b)*x3)/(2*g);)/定义函数transf将度分秒形式化为度的形式doub1e transf(double ang)int ideg, imin;double dsec,ddeg;/ddcg为十进制的度/ang为度分秒形式的形
24、参ideg=int(ang+ep);imin=int(ang-ideg)*100+ep);dsec二(ang-ideg)*100-imin) *100;ddeg=ideg+double(imin)/60+dsec/3600;return ddeg;)/定义函数tens将度的形式转换为度分秒的形式double trans (double ddeg)int ideg, imin;double dsec, ddms;/ddcg为十进制的度/ddms为度分秒形式的形参double dtmp;ideg=int(ddeg+ep);dtmp-(ddeg-idcg)*60;imin=int(dtmp+ep);
25、dsec=(dtmp-imin)*60;ddms二ideg+double(i m i n)/100+dsec/l0000;return ddms;)/定义1 nnerang 1 e按钮控件的消息两数void cmythirdex3dlg:0nbnclickedtnnerang()/ todo:在此添加控件通知处理程序代码updatedata (true):a=gettnnerang(a, b, c)/pi*180;b=getinnerang(b, a, c)/pi*180;c=getinnerang(c, a, b)/pi*180;a=trans (a);b=trans(b);c=t rtin
26、s (c);updatedata (false);)/定义circlccentcr按钮控件的消息函数void cmythirdex3dlg:onbnc1iekedinnerang2()/ todo:在此添加控件通知处理程序代码updcitedatci(true);getcircenter (xa, ya, xb, yb, xc, yc, xp, yp):updatedata (false);)/定义极坐标法求待定点坐标的函数void cmythirdex3dlg:pointcoord (double x0,double yo,double theta,double rho,double &am
27、p;xp,double &yp)theta=theta*pi/180. 0; xp=x0卜rho*cos(lhela); yp=yo+rho*sin(theta);/格式化显示结果,显示至小数点后三位cstring strxp,stryp;strxp. format (_t("%. 3"),xp);stryp. format ( t ("%. 3f"), yp);用格式化的坐标值设置对话框项目的文本setdlgltemtext(idceditxp,strxp);setdlgttemtext(tdc edttyp,stryp);/定义pointco
28、ord按钮控件的消息函数void cmythirdex3dlg:onbnclickedtnnerang3()/ todo:在此添加控件通知处理程序代码updatedcitci(true);pointcoord (xa, ya, theta, rho, xp, yp);/此处无updatodata (false),因为setdlgltemtext已经在pointcoord(xa, ya, theta, rho, xp, yp)函数屮调用运行结果:列出程序运行时的界面;有数据输入输出的,要求至少输入一组数据,并列出输出的结果,对较为复杂的程序简要叙述程序的使用说明。i lythirdex3冈由三介
29、形三边长求内*d)巾innerangiexc-yc-衿定朋生标264.2857 皿巾271.428571.(:portcoordext设计技巧1、本实验内容主要为定义和使用函数,程序中相同的功能调用函数来实现可极大地简化代码,达 到结构化程序设计的要求;2、若有些函数经常使用,可将其定义在.h头文件和.cpp源文件中,在使用吋将文件用include命令 包含即可,另外一些常用的常量如const double pi=4.0*atan( 1.0); const double ep=1.0e-006;也可定 义在.h文件中,方便使用。总结通过本次实验,我常握了函数的定义和使用,对于程序中相同的功能可
30、调用函数来实现极大地 简化代码,并且在函数使用的过程中更深地理解了课上所讲过的结构化程序设计的含义。在本实验内容屮,我主要遇到了这样一个问题:在编写了极坐标法求待定点坐标函数之后,运 行程序,计算出的待定点坐标显示十几位小数,非常不直观,因此我参照老师所给的例子中格式化 输出的方法想要使输出的结果为三位小数,/格式化显示结果,显示至小数点后三位cstring strxp,stryp;strxp.format ( t("%. 3f"), xp);stryp. format (_t ("%. 3f"), yp);用格式化的坐标值设置对话框项h的文本setdl
31、gltemtext(!dc_edltxp,strxp);setdlgltemtext(idcedityp,stryp);但是我加入上面的语句之后结果并没有什么变化,在我自己检查之后没有发现什么错误,让同学帮 我检查也没有发现什么错误,就发邮件给老师,老师的答复让我知道了setdlgltemtext函数就已经将 文本内容输出了,不需要updatedata(false)0(三) 交会定点计算函数设计本实验中由于四个函数的验证均放在同一个对话框中实现,虽然我已经整理了控件的布局,但是仍然略显复杂,在结果显示的图片中可以看出每个功能用到的空间,还请戴老师见谅设计思路由于这四个函数的设计方法相似,在本次
32、试验当中,将相关的空间均布设在同一个对话框当中。1、分别布设静态文木控件、编辑框控件和按钮控件,如图所示,性id,使其与相应的功能相联系;2、分别为对话框屮的13个编辑框控件添加变暈,均为double型,且命名时要与其含义相对应;3、分别利用实验指导书屮所给出公式,定义三角形三边长计算内角、坐标计算圆心坐标、标的函数;4、分别为4个按钮控件前方交会,侧方交会,后方交会和测边交会定义消息函数,添加的代码即分别利用所定义的四个函数,和编辑框屮输入的数据来完成相应的操作;5、为clear按钮控件定义消息函数,即分别将编辑框控件变量置为零;6、利用组合框来装饰整理界面设计。界面设计:如上图主要代码:本
33、次实验中由于忘记设置按钮控件的id所以消息函数开头均用注释做详细说明#include "stdafx.h"#includc "mythirdex2. h"#include "mythirdex2dlg. h"include <math. h> ttifdef debugdefine new debug_newttendif const double pi=4. 0*atan(l. 0);const double ep=1.0e006;/定义函数transf将度分秒形式化为度的形式doub1e transf(double a
34、ng)int ideg, imin;double dsec, ddeg;/ddeg为十进制的度/ang为度分秒形式的形参ideg=int(ang+ep);imin=int(ang-ideg)*100+ep);dsec=(ang-ideg)* 100-imin)*100; ddeg=ideg+clouble(imin)/60+dsec/3600; return ddeg;定义函数tnms将度的形式转换为度分秒的形式 double trans (double ddeg)int ideg, imin;double dsec,ddms;/ddeg为十进制的度/ddms为度分秒形式的形参double d
35、tmp;ideg=int(ddeg+ep);dtmp=(ddeg-ideg)*60;i m i n= i n t(dtmp+ep);dscc- (dtmp-imin)*60;ddms=ideg+double(imin)/l00+dsec/10000;return ddms:/定义前方交会的函数void i?ore (double xa, double ya, double xb, double yb, double al fa, double beita, double & xp, double & yp)/将输入的观测角度由度分秒的形式转换为弧度的形式以备运算使用alfa=t
36、ransf(al fa)/180*p i;bcita-transf (bcita)/180*pi;/利用公式计算待定点血积double temp;temp=l. 0/tan (al fa) + l. 0/tcin(bei ta);xp二(xa/tan(bcita)+xb/tan(alfa)+(yb-ya)/temp;yp=(ya/tan(bei ta)+yb/tan(a1 fa) + (xb-xa)/temp;/定义侧方交会的窗数void leftright(double xa,double ya,double xb, double yb,double alfa,double beita,do
37、uble &xp,double &yp) 将输入的观测角度由度分秒的形式转换为弧度的形式以备运算使用beita=180-alfa-beita;alfa=transf(alfa)/180*pi;be i ta=transf(be i ta)/180*p i;/利用公式计算待定点面积double temp;temp=l. 0/tan(alfa)+l. 0/tan(beita);xp=(xa/tan(bei ta)+xb/tan(al fa) + (yb-ya)/temp;yp= (ya/tcin (be i ta) +yb/tan (a 1 fa) + (xb-xa)/temp;/
38、定义前方交会按钮控件的消息函数void cmythirdex2dlg:0nbnclicked0k()/ todo:在此添加控件通知处理程序代码/0n0k ();updatedata (true);fore(xa, ya, xb, yb, al fa, bei ta, xp, yp);updatcdata(false);定义c 1 ear按钮控件的消息函数void cmythirdex2dlg:0nbnclicked0k2()/ todo:在此添加控件通知处理程序代码/将编辑框所添加的变量的值置零xa=0;xb二0;ya=0;yb=o;xc 二0;yc=0;alfa=0;bei ta=0;gci
39、ma=0;da-0;db=o;xp=0;yp=o;updatedcita(fa 1 se);/定义侧方交会按钮控件的消息函数void cmythirdex2dlg:0nbnclickedleftright()/ todo:在此添加控件通知处理程序代码updatedata (true);leftright (xa, ya, xb, yb, alfa, beita, xp, yp);/调用侧方交会的函数用于计算updatedata(false);/定义窗数求两点间的距离double di st (double xl,double yl,double x2,double y2)double dist
40、;dis t=sqrt(y2-y1)*(y2-y1) + (x2-x1)*(x2-x1);return dist;/根据三边长计算三角形内角double ang(double a,double b,double c)double a;a=acos(b*b+c*c-a*a)/ (2*b*c);return a;/定义后方交会的函数void resection( doub1e xa,double ya,double xb,double yb,double xc,double yc,double al fa,doublebeita,double gama, double &xp,double
41、 &yp)double di st (double xl,double yl,double x2,double y2);double ang(double a,double b,double c);double pa, pb, pc;/定义三个权值pl, p2, p3double a, b, c;/分别定义三个己知点构成三角形的三边长/利用dist函数求三角形的三边长a-dist (xb, yb, xc, yc);b=dist(xa, ya, xc,yc);c=dist (xa, ya, xb, yb);/根据三边长和余弦定理利用函数ang ()求三角形三个内角的值,且求出的abc均为
42、弧度形式doub 1 e a, b, c;a=ang(a, b, c);b=ang(b, a, c);c=ang(c, a, b);/将观测角al fa, beita, /ma的度分秒形式先转换为度的形式再转换为弧度的形式double alfal, bcital, gamal;/定义中间变量alfal, bcital, gamalalfa=transf (alfa);beita=transf (beita);gama=transf(gama);alfal=alfa/180*pi;bcital=bcita/180*pi;gama1=gama/180*p i;/根据输入的dlfa, beita,
43、gdma的不同的值选择合适的操作if (alfa-f-beita+gama!=360)/按照后方交会的方法,三个观测值之和应为度afxmessagebox (_t("请先将观测水平角平差");else if (fabs(alfal+beital+c-pi)<(pi/18) |fabs(a1fa1+gama1+b-pi)<(pi/18) |fabs(gamal+beital+a-pi)<(pi/18)/ 危险岡的判定afxmessagebox ( t("请远离危险圆");else/若满足条件则可按照公式进行求值pa=tan(alfal)*
44、tan(a)/(tan(alfal)-tan (a);pb=tan(beital)*tan(b)/(tan(beital)-tan(b);pc=tan (gamal)*tan (c)/(tan (gamal)-tan (0);xp-(pa*xa+pb*xb+pc*xc)/(pa+pb+pc);yp=(pa*ya+pb*yb+pc*yc)/(pa+pb+pc);/定义前方交会的函数void cmythirdex2dlg:onbnclickedbehind()/ todo:在此添加控件通知处理程序代码updatcdata(truc);resection(xa, ya, xb, yb, xc, yc
45、, alfa, beita, gama, xp, yp); /调用后方交会的函数用于计算updatedata(false);定义函数求两点所构成线的坐标方位角double angle (double xl,double yl,double x2,double y2)/定义变量dx, dy, z,其中z为dy/dx的商double dx, dy, z;dx=x2-xl;dy=y2-yl;z=dy/dx;/定义变量a,为两点所构成頁线的象限角double a;a=atan(fabs(z);doub 1 e emg;/用一个if语句來分别判断两点所连成直线所在的彖限并求出相应的方位角/其中xx为象限
46、,值为零的时候说明两点所构成的向量在坐标轴上if (dx>0&&dy>0)ang=a;else if (dx<0&&dy>0)ang二pi-a;else if (dx<0&&dy<0)ang=pi+a;else if (dx>0&&dy<0)ang=2*pi-a;else if (dx=-0&&dy>0)ango. 5*pi;else i f (dx<o&&dy=o)ang=pi;else if (dx=0&&dy<0
47、)ang二 1. 5*pi;else if (dx>o&&dy=o)ang=o;elseafxmessagebox( t ("两点坐标相同");将方位角从弧度形式化为角度形式,并以度分秒的形式输出 ang=ang/pi*180;/用丁存放度分秒三个值的变量int ideg, imin;doub1e dsec;double dtmp; 临时变量ideg=int (ang+ep);dtmp=(ang-ideg)*60;imin二int (dtmp+ep);dscc- (dtmp-imin)*60;ang=i deg+doub1e(i m i n)/100+
48、dsec/10000;return ang;/定义后方交会的函数void meature(double xa,double ya,double xb,double yb,double da,double db,double &xp,double &yp) double p,alfa_ab;/定义点p所对边的边长为p, ab的坐标方位角al 5 abp-dist (xa, ya, xb, yb);/alfa_ab=angle(xa, ya, xb, yb);double a,b;/定义ab两点所在的角/利用函数ang求出三角形的两内角aba=ang (da, db, p);ban
49、g(db, da, p);/将算出的八b两角山弧度形式改为角度形式,再化为度分秒的形式a=trans(a*180/pi);b=trans(b*180/pi);fore (xa, ya, xb, yb, a, b, xp, yp);/求出ab两角之后调用前方交会的fore函数来计算待定点的坐标adouble alfa_ap, alfa.bp;/定义ap, bp两条待定边的坐标方位角al fa ap=alfa ab-a;alfa_bp=alfa_ap+b;xp=xa+db*cos(al fa ap);yp=ya+db*sin(alfa_ap);*/定义测边交会按钮控件的消息函数voi d cmyt
50、hi rdex2dlg:0nbnclickedmeatureo/ todo:在此添加控件通知处理程序代码updatedata(true);meature(xa, ya, xb, yb, da, db, xp, yp) ;/调用测边交会函数来进行计算updatedata(false);)运行结果:列出程序运行时的界面;有数据输入输出的,要求至少输入一组数据,并列出输出的结 果,对较为复杂的程序简要叙述程序的使用说明。设计技巧通过本次实验我发现在我们测绘中编写的程序中输入输出的角度均为度分秒的形式,可是在计 算当中用到的数据其实是弧度的形式,因此会经常用到角度形式的转换函数,因此可将以前泄义的 角
51、度形式转换函数定义在一个文件当中,然后每次调用相应的角度形式转化函数时只需要include 该文件并在解决方案资源管理器的相应位置添加文件即可。总结此实验内容当中不停的定义函数和调用函数,使我对于函数的定义和使用更加熟悉了,而且对 于这些常用的函数,最好能建立一个常用函数的文件来定义常用函数,在使用的时候方便调用,节 省相同函数代码的编写时间,而h能够极大地简化代码。实验四类的创建和使用实验一、实验目的1. 掌握面向对象编程基本思想2. 掌握vc+. net中创建类3. 掌握建立和使用对象4. 掌握运算符号重载5. 理解类的继承和多态性二、实验内容1、设计一个角度类并用后方交会定点程序检验正确
52、性要求该类具有度分秒至度的换算、度至度分秒的换算、度与弧度的换算等功能。提 示:设置一个角度大小属性,并设定该屈性为缺省屈性;另设一个状态属性,表示当前 设置的角度大小的形式;度分秒、度、弧度间的相互转换的方法;定义运算符号(加、 减)方法,使得角度类能够像一种普通的数据类型样的方便使用。用设计好的角度类重 新编写后方交会定点程序。设计思路(本实验内容中控件的布设,属性修改和添加变量的方法前面已多次提到,不再赘述)1、在已经建立好的基于对话框的项目屮添加一个o+类cangle,系统自动生成一个angle, cpp文 件和angle, h文件,前者用于类小函数的实现,后者用于类的定义和类小函数的
53、声明;2、分别定义类的私有成员和公有成员,私有成员屮的state表示状态的变量,为方便使用,将其 定义为枚举类型 enum state raid, dms, deg:3、由于重载了 ()运算符,用其可进行类型的转换,所以将角度形式转换的函数定义为私有成员 函数,公有成员中定义构造函数和+运算符-运算符()运算符的重载函数;其屮()运算符的重载函数的算法为,根据括号屮state类型的数据,来判断该角度类的对象当 前的state值与其是否相等,若相等则直接返回当前的angle值,若不等则进行判断,由选择结 构决定调用哪种角度形式转换函数,然后令state的值为()屮的值,最后返回转换后的angle
54、 值;4、利用对话框检验所编类是否正确,定义确定按钮控件的消息函数,使用重载的()运算符对初 始化过的对象进行形式的转换并messagebox输出转换后的结果;5、使用角度类编写后方交会的函数,在该函数当屮的一切角度量均使用定义的角度类,在对话框 中compute按钮控件的消息函数中调用,并利用对话框检验。界面设计:如下图悬 lyfourthexl主要代码angle.h#pragmci once#inelude <math. h> const double ep=l. 0e-006;const double pi二40*atcm( 1.0);enum statercid, dms,
55、 deg) ;/定义枚举类型state,用于cangle类当中私冇成员“状态"的表示class cangle/定义类的私冇成员,angle为表示角度大小的成员变量,state为表示角度形式的成员变量 double angle;state state;/分别声明三种角度形式转换的函数double dtodms(void):double dmstod(void);double dtoll(void);double htod(void);double dmstoii(void):double htodms(void):public:cangle(void);cangle(double ang, state sta);/重载的构造函数/*double getangle(void)return angle;)state getstate(void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能机器人遥控器行业深度调研及发展战略咨询报告
- 熟食文化传媒行业深度调研及发展战略咨询报告
- 烘焙设备租赁店行业深度调研及发展战略咨询报告
- 滑雪装备租赁与回收企业制定与实施新质生产力战略研究报告
- 智能手表紧急呼叫功能企业制定与实施新质生产力战略研究报告
- 基于深度学习的医学图像分割与分析技术-洞察阐释
- 大数据分析在矿井排水中的应用-洞察阐释
- 大数据场景下的可视化与交互设计-洞察阐释
- 法拍房交易中权利瑕疵责任分担合同
- 人工智能驱动的用户体验提升方法-洞察阐释
- 2024年山西杏花村汾酒集团有限责任公司招聘笔试真题
- 2025衡水市武强县辅警考试试卷真题
- 《行政法与行政诉讼法》课件各章节内容-第一章 行政法概述
- 山西省太原市2025年高三年级模拟考试(二)语文试题及答案
- 2025年广东广州中物储国际货运代理有限公司招聘笔试参考题库含答案解析
- 湖北省武汉市2025届高中毕业生二月调研考试数学试题及答案
- 愚公移山英文 -中国故事英文版课件
- 管道工技师理论知识题库及答案(完整版)
- JCP-200磁控溅射蒸发镀膜机 使用说明书
- 各类安全事故案例图片合集
- 通信原理1抽样定理课件
评论
0/150
提交评论