摄影测量学空间后交-前交实验报告
- 格式:doc
- 大小:290.00 KB
- 文档页数:23
河南理工大学测绘学院
《数字摄影测量学》教学实验报告
(专业必修课)
姓名:专业班级:
学号:序号:
指导教师:
2011年月日
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
实验成绩:
评语:
指导老师签名:
2011年月日
实习报告一:点特征提取
专业班姓名:学号:日期:
一、实验的目的与要求
通过实习掌握点特征提取的原理、方法和过程,并能用计算机编程实现。
二、实验设备
1、计算机一台
2、立体数字图像
3、VC 开发平台
三、实验步骤
1.软件编写与调试
2.点特征提取
3.提取结果分析
四、实验结果与体会
实习报告二:影像匹配
专业班姓名:学号:日期:
一、实验目的
掌握相关系数影像匹配的原理和基本过程,并能编程实现。
二、实验设备
1、计算机一台
2、立体数字图像
3、VC 开发平台
三、实验步骤
1.软件编写与调试
2.影像匹配
3.匹配结果分析
四、实验结果与体会。
测量学实验结果分析与总结(精选5篇)测量学实验结果分析与总结 总结是对某⼀特定时间段内的学习和⼯作⽣活等表现情况加以回顾和分析的⼀种书⾯材料,通过它可以全⾯地、系统地了解以往的学习和⼯作情况,让我们好好写⼀份总结吧。
下⾯是⼩编为⼤家整理的测量学实验结果分析与总结(精选5篇),希望对⼤家有所帮助。
测量学实验结果分析与总结1 为期17天的测量学实习已经结束,回顾这将近三周的实习⽣活,虽然确实体会到了学长们所描述的精疲⼒竭和酷暑炎热,可是我们也在收获⼀种技能的同收获了⼀段值得回味的经历。
由于测量学是⼀门技术性与实践性很强的专业基础课,既有丰富的测绘理论,⼜有⼤量的实际操作技术。
测量学实习作为《测量学》教学的⼀个重要组成部分对培养我们的思维和动⼿能⼒、掌握具体⼯作程序和内容都起着相当重要的作⽤。
也是我们通过现场实际操作巩固课堂知识,查漏补缺的最佳⽅式。
这⼗⼏天来,我们每天早晨都坚决地克服了赖床的⽑病,踩着朝露,扛着仪器,在安静的校园道路上⼤⼑阔斧的向实习地迈进。
在实习过程中我们克服天⽓的炎热,挥洒青春的汗⽔;在烈⽇的照射下,挑战我们的极限。
⼩组内⼤家亲如⼀家,相互关⼼,相互体谅,众志成城团结⼀致,⼤家分⼯合理并不断交换⼯作,因此我们六个⼈每⼈都能参与到每份⼯作中,得到相同并且全⾯的实习机会。
在对平顶⼭市会议中⼼进⾏地形图测绘的⼯作中我们遇到了很多问题和困难,⼤家耐⼼讨论并寻求问题的答案以及困难的最佳解决⽅法,对于⽆法组内解决的问题我们虚⼼向其他组同学请教,或者查阅资料询问⽼师。
总之在这次实习中,⼤家对于知识的那种渴望、积极和谦逊似乎都是空前的。
求学⼗⼏载,我们似乎⼀直都在为了考试⽽拼命死记课本中的条条框框;为了分数⽽对课堂上⽼师的⼀⾔⼀⾏唯命是从,却从没能在实际中运⽤到这些知识,从⽽不能发现知识的漏洞所在,更不能体会到知识的价值和重要性。
实习第⼀天,领取了实习所需的包括经纬仪,⾃动安平⽔准仪等仪器之后,⼤家开始进⾏第⼀项⼯作,检校仪器。
测量工作报告模板6篇测量工作报告篇1一、实习目的与要求:测量学教学实习是测量学的重要组成部分,其目的是巩固、扩大和加深学生从课堂所学的理论知识,获得测量实际工作的初步经验和基本技能,着重培养学生的独立工作能力,进一步熟练掌握测量仪器的操作技能,提高计算和绘图能力,并对测绘小区域大比例尺地形图的全过程有一个全面和系统的认识,为今后解决实际工作中的有关测量问题打下坚实的基础。
通过教学实习学生应达到以下要求:(1)掌握主要仪器(水准仪及经纬仪、全站仪)的性能和使用。
(2)掌握地形测图的基本方法,具有初步测绘小区域大比例尺地形图的工作能力。
(3)能了解地形册归的内外业组织工作。
在教学实习中,要注意使每个学生都能参加各项工作的练习。
注意培养学生独立工作的能力,加强劳动观点、集体主义精神和爱护仪器的教育,使学生得到比较全面的锻炼和提高。
二、实习任务及内容:(一)大比例尺地形测图1.任务:每小组测绘一幅比例尺1∶1000、等高距为0.5m的地形图。
2.内容:1)平面控制。
敷设独立导线网。
1)准备工作:仪器的检验校正、工具与用品准备。
2)外业工作:踏勘测区、拟定布网方案、选点、标志点号、角度观测和距离丈量(导线边长)、定向。
3)内业工作:外业手簿的检查和整理、绘制控制网略图、坐标计算、编制平面控制成果表、绘制坐标格网与控制点展绘。
2)高程控制。
1)准备工作:水准仪检校、工具与用品准备。
2)外业工作:踏勘、选点、水准观测。
3)内业工作:手簿检查、水准测量成果整理、编制水准测量成果表。
实习地点:长江工程职业技术学院武汉校区我们要掌握工程建设在勘测、设计、施工和管理阶段进行的各种测量工作相关知识。
达到以下要求,具体要作到:1.熟悉各种测量仪器的结构原理和用途,熟练使用水准仪、经纬仪的各种使用方法,掌握仪器的检验和校正方法。
2.明白各种测量误差的来源是主要有三个方面:(1)仪器误差:这是仪器本身在制造的过程过程中它的精度所决定的,属于客观误差来源。
学习摄影测量调绘实习心得体会摄影是一种艺术,在摄影中也有人会写工作心得体会。
下面是给大家的摄影测量调绘实习心得内容,供你参考!我于9月2日参加了管理处党办室组织的摄影培训学习,为了提高大家的摄影水平,杨科长特地请来了省厅有名的摄影师李英军老师为这次的培训老师。
这次学习让我受益非浅,基本了解了摄影的历史,照相机的基本构造和基本常识、以及在今后摄影中需要注意的小的细节。
在李老师的精心指导下,使我对摄影有了深入的了解,同时也逐渐的提高了自己的审美意识,并让我意识到要想拍出好相片,拥有一部好的相机并非关键之处,更重要的是利用好自己手中的相机,提高自己摄影能力,当然提高个人的审美意识也是学好摄影的要点之一。
对摄影有了深入的了解,并深深的体会到了摄影带给我的乐趣。
以下是我学习的心得体会:一、理论结合实践学摄影是一门需要理论和实践相结合的过程,上午老师讲了摄影的种类,对焦的方式,摄影画面的对比,清晰图像的自动获取,各种镜头的运用,曝光控制等许多理论知识。
,通过上午老师对摄影知识的一些理论讲解之后,下午便对上午的理论知识进行实践操作,让我们学以致用,以便加深映像,这样更有助于我们的学习。
二、多拍多看下午带我们去西柏坡纪念馆、水库周边等地实践学习。
让我了解到光与影的合作,光圈与速度的配合,可以是千变万化的,同一个画面用不同的拍摄方法及角度,可以是完全不同风格的作品。
要多拍多看,多积累经验,多提高自己的审美意识。
李老师告诉我们:“训练拍摄的时候尽量不要吝啬相机的快门,我们要多进行一些旁拍,抓取一些精彩的瞬间,往往效果会令你意想不到,平时要多去记录一些生活中无意间遇到的美好的画面”。
摄影艺术是源于生活而高于生活,很多精彩的画面都是从生活中提取出来的。
我们平时尽量多看一些好的作品,多去分析、总结其作品的独特之处,从中获取一些启发。
其实不光是摄影,对待我们工作的任何一件事情,都是一样,只有多做多总结才能把事情做好。
三、注重细节俗话说细节决定成败,摄影也是如此。
测量是一项精确的工作,通过测量学的学习和实习是我在脑海中形成了一个基本的测量学轮廓。
测量学是研究地球的形状和大小以及地面点位的科学,它的内容主要包括测定和测设两个部分,测量学要完成的任务在宏观上是进行精密控制,测量和建立国家控制网,提供地形测绘图和大型工程测量所需要的基本控制;为空间科技和军事工作提供精确的坐标资料;做为技术手段参与对地球形状、大小、地壳形变,及地震预报等方面的科学研究。
从微观方面讲,测量学的任务为按照要求测绘各种比例尺地形图;为各个领域提供定位和定向服务;管理开发土地,建立工程控制网,进行施工放样,辅助设备安装,监测建筑物变形的任务以及为工程竣工服务等。
从本质上讲,测量学主要完成的任务就是确定地面目标在三维空间的位置以及随时间的变化。
而这一任务是是有测量学的三个基本元素的测量实现的:角度测量、距离测量、高程测量。
在信息社会里,测量学的作用日益重要,测量成果做为地球信息系统的基础,提供了最基本的空间位置信息。
过件信息高速公路,基础地理信息系统及各种专题的和专业的地理信息系统均迫切要求建立具有统一标准,可共享的测量数据库和测量成果信息系统。
因此测量成为获取和更新基础地理信息最可靠,最准确的手段。
测量学的分类有很多种如:普通测量学、大地测量学、摄影测量学、工程测量学,和水运测量学等多种分支学科。
作为装饰设计专业的学生,我们要重点学习的是普通测量学和工程测量学。
普通测量学是基础,工程测量学是专业分支。
我们要掌握工程建设在勘测、设计、施工和管理阶段进行的各种测量工作相关知识。
一、实习目的与要求:测量学教学实习是测量学的重要组成部分,其目的是巩固、扩大和加深学生从课堂所学的理论知识,获得测量实际工作的初步经验和基本技能,着重培养学生的独立工作能力,进一步熟练掌握测量仪器的操作技能,提高计算和绘图能力,并对测绘小区域大比例尺地形图的全过程有一个全面和系统的认识,为今后解决实际工作中的有关测量问题打下坚实的基础。
测绘实习报告范文汇总八篇测绘实习报告篇1测量是一项精确的工作,通过测量学的学习和实习是我在脑海中形成了一个基本的测量学轮廓。
测量学是研究地球的形状和大小以及地面点位的科学,它的内容主要包括测定和测设两个部分,测量学要完成的任务在宏观上是进行精密控制,测量和建立国家控制网,提供地形测绘图和大型工程测量所需要的基本控制;为空间科技和军事工作提供精确的坐标资料;作为技术手段参与对地球形状、大小、地壳形变,及地震预报等方面的科学研究。
从微观方面讲,测量学的任务为按照要求测绘各种比例尺地形图;为各个领域提供定位和定向服务;管理开发土地,建立工程控制网,进行施工放样,辅助设备安装,监测建筑物变形的任务以及为工程竣工服务等。
从本质上讲,测量学主要完成的任务就是确定地面目标在三维空间的位置以及随时间的变化。
而这一任务是是有测量学的三个基本元素的测量实现的:角度测量、距离测量、高程测量。
在信息社会里,测量学的作用日益重要,测量成果作为地球信息系统的基础,提供了最基本的空间位置信息。
过件信息高速公路,基础地理信息系统及各种专题的和专业的地理信息系统均迫切要求建立具有统一标准,可共享的测量数据库和测量成果信息系统。
因此测量成为获取和更新基础地理信息最可靠,最准确的手段。
测量学的分类有很多种如:普通测量学、大地测量学、摄影测量学、工程测量学,和水运测量学等多种分支学科。
作为装饰设计专业的学生,我们要重点学习的是普通测量学和工程测量学。
普通测量学是基础,工程测量学是专业分支。
我们要掌握工程建设在勘测、设计、施工和管理阶段进行的各种测量工作相关知识。
一、实习目的与要求:测量学教学实习是测量学的重要组成部分,其目的是巩固、扩大和加深学生从课堂所学的理论知识,获得测量实际工作的初步经验和基本技能,着重培养学生的独立工作能力,进一步熟练掌握测量仪器的操作技能,提高计算和绘图能力,并对测绘小区域大比例尺地形图的全过程有一个全面和系统的认识,为今后解决实际工作中的有关测量问题打下坚实的基础。
测量学实验报告总结1、进一步巩固和加深测量基本理论和技术方法的理解和掌握并使之系统化、整体化;2、通过实习的全过程,提升使用测绘仪器的操作能力、测量计算能力和绘图能力,掌握测量基本技术工作的原则和步骤;3、掌握路线工程测量基本工作:中线测量和纵断面测量。
4、在各个施行性环节培养应用测量基本理论综合分析问题和解决问题的能力,训练严谨的科学态度和工作作风。
二、实训内容及步骤:本次实习共计一周,实习的主要地点主要是学校周边地区和校园内。
本次实习采纳教学与实习相结合的方式进行,也就是先由老师教授实习的内容和应注意的要求,然后同学们出去实习,完成当天安排的实习内容。
本次实习的安排主要有:〔1〕一般水准测量〔2〕四等水准测量〔3〕纵断面测量及绘图〔4〕场地抄平测量及绘图〔5〕闭合导线测量及绘图。
步骤简要:1〕拟定施测路线。
选一已知水准点作为高程起始点,记为BMi,选择有一定长度、一定高差的路线作为施测路线。
然后开始施测第一站。
以已知高程点BMi作后视,在其上立尺,在施测路线的前进方向上选择适当位置为第一个立尺点〔转点1〕作为前视点,在转点1处放置尺垫,立尺〔前视尺〕。
将水准仪安排在前后视距大致相等的位置〔常用步测〕,读数a1,记录;再转动望远镜瞄前尺读数b1,并记录2〕计算高差。
h1=后视读数一前视读数=a1-b1,将结果记入高差栏中。
然后将仪器迁至第二站,第一站的前视尺不动变为第二站的后视尺,第一站的后视尺移到转点2上,变为第二站的前视尺,按与第一站相同的方法进行观测、记录、计算。
按以上程序依选定的水准路线方向继续施测,直至回到起始水准点BM1为止,完成最后一个测站的观测记录。
3〕成果检核。
计算闭合水准路线的高差闭合差;假设高差闭合差超限,应先进行计算校核,假设非计算问题,则应进行返工重测。
我们按时完成了实习计划,而且完成状况很好。
实习过程中控制点的选取很重要,控制点应选在土质坚实、便于储存和安排水准仪的地方,相邻导线点间应通视合格,便于测角量距,边长约60米至100米左右。
第1篇一、引言随着科技的飞速发展,测绘学在我国国民经济和社会发展中扮演着越来越重要的角色。
为了提高测绘专业学生的实践能力,增强就业竞争力,我国高校普遍开展了测绘学实训课程。
本报告以某高校测绘学实训课程为例,详细介绍了实训过程、成果及心得体会。
二、实训目的与意义1. 实训目的(1)掌握测绘基本理论、基本方法和基本技能;(2)提高学生的实际操作能力,培养动手能力;(3)培养学生的团队合作精神和创新意识;(4)为后续专业课程的学习打下坚实基础。
2. 实训意义(1)有助于提高学生的综合素质,增强就业竞争力;(2)有助于培养学生的实际操作能力,提高教学质量;(3)有助于推动测绘行业的发展,为我国测绘事业贡献力量。
三、实训内容与过程1. 实训内容本次实训主要包括以下内容:(1)野外地形测量;(2)室内数字化成图;(3)遥感图像处理;(4)GPS定位技术;(5)测绘数据处理与分析。
2. 实训过程(1)野外地形测量实训过程中,学生分组进行野外地形测量。
首先,了解地形测量基本原理和操作流程;然后,利用全站仪、水准仪等仪器进行实地测量;最后,对测量数据进行整理和分析。
(2)室内数字化成图学生利用数字化成图软件进行室内数字化成图实训。
实训内容包括:地形图绘制、地形图编辑、地形图属性管理等。
通过实训,学生掌握了数字化成图的基本操作。
(3)遥感图像处理遥感图像处理实训旨在让学生了解遥感图像处理的基本原理和方法。
实训内容包括:遥感图像预处理、图像增强、图像分类等。
通过实训,学生掌握了遥感图像处理的基本技能。
(4)GPS定位技术GPS定位技术实训让学生了解GPS定位原理和操作方法。
实训内容包括:GPS接收机操作、数据采集与处理、定位精度分析等。
通过实训,学生掌握了GPS定位技术的基本操作。
(5)测绘数据处理与分析测绘数据处理与分析实训旨在培养学生对测绘数据的处理和分析能力。
实训内容包括:数据质量评估、数据预处理、数据分析与建模等。
中南大学本科生课程设计(实践)任务书、设计报告(摄影测量与遥感概论)题目:空间后方交会-前交院系:地球科学与信息物理学院班级:测绘1201班********学号:***********名:***二零一四年十一月一、实验目的通过对数字影像空间后交前交的程序设计实验,要求我们进一步理解和掌握影像外方位元素的有关理论、原理和方法。
利用计算机程序设计语言编写摄影测量空间交会软件进行快速确定影响的外方位元素及其精度,然后通过求得的外方位元素求解位置点的地面摄影测量坐标,达到通过摄影测量量测地面地理坐标的目的。
二、实验要求1.用C、VB、C++或MA TLAB语言编写空间后方交会-空间前方交会程序2.提交实习报告:程序框图、程序源代码、计算结果、体会3.计算结果:像点坐标、地面坐标、单位权中误差、外方位元素及其精度4.完成时间:11月11日前完成三、实验数据四、实验思路➢利用后方交会得出两张相片各自的外方位元素1)获取已知数据影响比例尺m,,内方位元素x0 、y0 、f ,控制点的地面摄影测量坐标Xtp, Ytp, Ztp2)量测控制点左片和右片的像点坐标 x,y3)确定未知数初值 Xs0, Ys0, Zs0, ω,φ,κ(线元素可用控制点均值代替,角元素可用0初始化),即:∑=Xtp X 41s0,∑=Ytp Y 41s0,f Z *m s =ω=0,φ=0,κ=0 4)计算旋转矩阵R5)利用共线方程逐点计算像点坐标的近似值 6)组成误差方程式并法化 7)解求外方位元素改正数8)检查迭代是否收敛(改正值是否小于某一特定常数) ➢ 利用解出的外方位元素进行前方交会1)获取已知数据x0 , y0 , f, XS1, YS1, ZS1,φ1,ω1,κ1 , XS2, YS2, ZS2,φ2,ω2,κ22)量测像点坐标 x1,y1 ,x2,y23)由外方位线元素计算基线分量BX, BY, BZ4)由外方位角元素计算像空间辅助坐标 X1, Y1, Z1 , X2, Y2, Z2 5)计算点投影系数 N1 , N2 6)计算地面坐标 XA, YA, ZA五、实验过程➢ 程序流程图此过程完成空间后方交会求解像片的外方位元素,其中改正数小于限差(0.00003,相当于0.1的角度值)为止。
在这个过程中采用迭代的方法,是外方位元素逐渐收敛于理论值,每次迭代所得的改正数都应加到上一次的初始值之中。
➢程序中的类与其主要成员、主要函数设计ControlPointData类:控制点、未知点的点名、地面摄影测量坐标、左右像片坐标Photo类:左右片的内方位元素、外方位元素及其精度Fileheader类:相片对象、控制点个数、未知点个数、控制点数组、未知点数组Adjustment类:头文件对象、控制点数组、未知点数组、控制点个数、未知点个数、bool LoadData(const CString& strFileName,CString& strData);//读取已知函数CString* SplitString(CString str,char split, int& iSubStrs);//分割函数void adjustment1(CString &OutData);//后方交会函数void adjustment2(CString &OutData);//前方交会函数void SaveData(CString &OutData);//保存结果➢读取数据文件格式(.txt)elements of interior orientation,0,0,150.000GivenControlPoint,4GCP1,16.012,79.963,-73.93,78.706,5083.205,5852.099,527. 925GCP2,88.56,81.134,-5.252,78.184,5780.02,5906.365,571.54 9GCP3,13.362,-79.37,-79.122,-78.879,5210.879,4258.446,46 1.81GCP4,82.24,-80.027,-9.887,-80.089,5909.264,4314.283,455 .484UnKnownPoint,51,51.758,80.555,-39.953,78.4632,14.618,-0.231,-76.006,0.0363,49.88,-0.782,-42.201,-1.0224,86.14,-1.346,-7.706,-2.1125,48.035,-79.962,-44.438,-79.736End Data➢程序代码ControlPointData.hclass ControlPointData : public CDialog{public:CString strID;//控制点名double x1,y1,x2,y2;//左片、右片像点坐标double Xtp,Ytp,Ztp;//地面摄影测量坐标double Xs,Ys,Zs;//物方空间坐标doubleσ;//单位权中误差bool state;};class Photos{public:int x0,y0,f,m;//内方位元素doubleφ,ω,κ,φ,ω,κ,Xs1,Xs2,Ys1,Ys2,Zs1,Zs2;//外方位元素doubleσ;//单位权中误差doubleσXs1,σXs2,σYs1,σYs2,σZs1,σZs2;doubleσφ,σω,σκ,σφ,σω,σκ;//协因数Photos(void){x0=0;y0=0;f=0;}};class fileheader{public:Photos photo;//内方位元素int StationCount;//控制点个数int OriAngleCount;//测站个数int UnKnownPointCount;//待定点个数ControlPointData *StationCoor;//控制点坐标信息ControlPointData *StationCoorJ;//控制点坐标信息ControlPointData *UnKnownPoint;//待定点坐标信息};Adjustment.h#pragma once#include"ontrolPointData.h"#include<locale.h>#include"math.h"#include"Matrix.h"class Adjustment{public:fileheader header;//头文件ControlPointData *KnownPoint;//已知点int KnownPointCount;//已知点个数int UnKnownPointCount;//待定点个数public:Adjustment(void);~Adjustment(void);public:bool LoadData(const CString& strFileName,CString& strData);//读取已知函数CString* SplitString(CString str,char split, int& iSubStrs);//分割函数public:void adjustment1(CString &OutData);//后方交会函数void adjustment2(CString &OutData);//前方交会函数void SaveData(CString &OutData);//保存结果};Adjustment.cpp#include"StdAfx.h"#include"Adjustment.h"#include"ontrolPointData.h"#include"Space resection and forward intersection.h"#include"Space resection and forward intersectionDlg.h"#include"Adjustment.h"#include<locale.h>#include"math.h"#include"Matrix.h"#define pai 3.1415926CString* Adjustment::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;}bool Adjustment::LoadData(const CString& strFileName,CString& strData) {CStdioFile sf;if(!sf.Open(strFileName, CFile::modeRead)) return false;CString strLine;int n1;CString *strTmp=NULL;while(strLine!=_T("End Data"))//读取文件头{sf.ReadString (strLine);strData+=strLine;strData+=_T("\r\n");if(strLine!=_T("End Data")){strTmp = SplitString(strLine, ',',n1);}elsebreak;if(strTmp[0]=="elements of interior orientation"){header.photo.x0=_tstof(strTmp[1]);header.photo.y0=_tstof(strTmp[2]);header.photo.f=_tstof(strTmp[3]);}else if(strTmp[0]=="GivenControlPoint"){header.StationCount =_ttoi(strTmp[1]);header.StationCoor =newControlPointData[header.StationCount];if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}for(int i=0;i<header.StationCount;i++){sf.ReadString (strLine);strData+=strLine;strData+=_T("\r\n");strTmp = SplitString(strLine, ',',n1);header.StationCoor[i].strID=strTmp[0];header.StationCoor[i].x1 =_tstof(strTmp[1]);header.StationCoor[i].y1=_tstof(strTmp[2]);header.StationCoor[i].x2 =_tstof(strTmp[3]);header.StationCoor[i].y2 =_tstof(strTmp[4]);header.StationCoor[i].Xtp=_tstof(strTmp[5]);header.StationCoor[i].Ytp =_tstof(strTmp[6]);header.StationCoor[i].Ztp=_tstof(strTmp[7]);if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}}else if(strTmp[0]=="UnKnownPoint"){header.UnKnownPointCount =_ttoi(strTmp[1]);header.UnKnownPoint=newControlPointData[header.UnKnownPointCount];if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}for(int i=0;i<header.UnKnownPointCount;i++) {sf.ReadString (strLine);strData+=strLine;strData+=_T("\r\n");strTmp = SplitString(strLine, ',',n1);header.UnKnownPoint[i].strID=strTmp[0];header.UnKnownPoint[i].x1 =_tstof(strTmp[1]);header.UnKnownPoint[i].y1=_tstof(strTmp[2]);header.UnKnownPoint[i].x2 =_tstof(strTmp[3]);header.UnKnownPoint[i].y2 =_tstof(strTmp[4]);header.UnKnownPoint[i].Xtp=0;header.UnKnownPoint[i].Ytp =0;header.UnKnownPoint[i].Ztp=0;if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}}}if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}sf.Close();//关闭文件return true;}const double pi=3.1415926;void Adjustment::adjustment1(CString &OutData)//单片后交{CMatrix B,L,X;B.SetSize(2*header.StationCount,6);//系数阵L.SetSize(2*header.StationCount,1);//常数项阵X.SetSize(6,1);//未知数改正数之和的阵CMatrix R(3,3),Xb(3,1),bb(3,1);//R为旋转矩阵,Xb为X-Xs,Y-Ys,Z-Zs的矩阵,bb为X-,Y-,Z-的矩阵CMatrix Dx(6,1),Nbb,Nvv;//Dx为改正数阵header.photo.m=10000;double Xs0,Ys0,Zs0,φ,ω,κ;//未知数初值//确定未知数初值double x=0,y=0,z=0;for(int i=0;i<header.StationCount;i++){x+=header.StationCoor[i].Xtp;y+=header.StationCoor[i].Ytp;z+=header.StationCoor[i].Ztp;}Xs0=x/header.StationCount;Ys0=y/header.StationCount;Zs0=header.photo.m*header.photo.f/1000;φ=0;ω=0;κ=0;double n=0;//计算左片外方位元素***************************************************************// //***************************************************************** ****************//do{n++;//计算旋转矩阵Rdouble a1,a2,a3,b1,b2,b3,c1,c2,c3;a1=cos(φ)*cos(κ)-sin(φ)*sin(ω)*sin(κ); R(0,0)=a1;a2=-cos(φ)*sin(κ)-sin(φ)*sin(ω)*cos(κ); R(0,1)=a2;a3=-sin(φ)*cos(ω); R(0,2)=a3;b1=cos(ω)*sin(κ); R(1,0)=b1;b2=cos(ω)*cos(κ); R(1,1)=b2;b3=-sin(ω); R(1,2)=b3;c1=sin(φ)*cos(κ)+cos(φ)*sin(ω)*sin(κ); R(2,0)=c1;c2=-sin(φ)*sin(κ)+cos(φ)*sin(ω)*cos(κ); R(2,1)=c2;c3=cos(φ)*cos(ω); R(2,2)=c3;//计算像点坐标的近似值,构建B,L矩阵for(int i=0; i<header.StationCount;i++){bb(0,0)=a1*(header.StationCoor[i].Xtp-Xs0)+b1*(header.StationCoor[i].Yt p-Ys0)+c1*(header.StationCoor[i].Ztp-Zs0);bb(1,0)=a2*(header.StationCoor[i].Xtp-Xs0)+b2*(header.StationCoor[i].Yt p-Ys0) //单位为m+c2*(header.StationCoor[i].Ztp-Zs0);bb(2,0)=a3*(header.StationCoor[i].Xtp-Xs0)+b3*(header.StationCoor[i].Yt p-Ys0)+c3*(header.StationCoor[i].Ztp-Zs0);double t1=header.StationCoor[i].x1;//(X-X0)(Y-Y0)的值,单位为mmdouble t2=header.StationCoor[i].y1;L(2*i,0)=(header.StationCoor[i].x1+header.photo.f*bb(0,0)/bb(2,0))/1000 ;L(2*i+1,0)=(header.StationCoor[i].y1+header.photo.f*bb(1,0)/bb(2,0) )/1000;B(2*i,0)=(a1*header.photo.f+a3*t1)/bb(2,0)/1000;B(2*i,1)=(b1*header.photo.f+b3*t1)/bb(2,0)/1000;B(2*i,2)=(c1*header.photo.f+c3*t1)/bb(2,0)/1000;B(2*i,3)=(t2*sin(ω)-(t1/header.photo.f*(t1*cos(κ)-t2*sin(κ))+hea der.photo.f*cos(κ))*cos(ω))/1000;B(2*i,4)=(-header.photo.f*sin(κ)-t1/header.photo.f*(t1*sin(κ)+t2* cos(κ)))/1000;B(2*i,5)=t2/1000;B(2*i+1,0)=(a2*header.photo.f+a3*t2)/bb(2,0)/1000;B(2*i+1,1)=(b2*header.photo.f+b3*t2)/bb(2,0)/1000;B(2*i+1,2)=(c2*header.photo.f+c3*t2)/bb(2,0)/1000;B(2*i+1,3)=(-t1*sin(ω)-(t2/header.photo.f*(t1*cos(κ)-t2*sin(κ))-header.photo.f*sin(κ))*cos(ω))/1000;B(2*i+1,4)=(-header.photo.f*cos(κ)-t2/header.photo.f*(t1*sin(κ)+t 2*cos(κ)))/1000;B(2*i+1,5)=-t1/1000;}//平差计算Nbb=(~B)*B;Nvv=(~B)*L;Dx=(Nbb.Inv())*Nvv;Xs0+=Dx(0,0);Ys0+=Dx(1,0);Zs0+=Dx(2,0);φ+=Dx(3,0);ω+=Dx(4,0);κ+=Dx(5,0);}while((fabs(Dx(0,0))>0.001)||(fabs(Dx(1,0))>0.001)||(fabs(Dx(2,0)) >0.001)||(fabs(Dx(3,0)*206265)>1)||(fabs(Dx(4,0)*206265)>1)||(fabs(Dx(5,0)*206265)>1));header.photo.Xs1=Xs0;header.photo.Ys1=Ys0;header.photo.Zs1=Zs0;header.photo.φ=φ;header.photo.ω=ω;header.photo.κ=κ;CMatrix V=B*Dx-L;CMatrix Vt=(~V)*V;//改正数转置double m0=sqrt(Vt(0,0)/(2*header.StationCount-6));CMatrix Q=Nbb.Inv();//协因数阵//求解点位误差header.photo.σXs1=sqrt(Q(0,0))*m0;header.photo.σYs1=sqrt(Q(1,1))*m0;header.photo.σZs1=sqrt(Q(2,2))*m0;header.photo.σφ=sqrt(Q(3,3))*m0;header.photo.σω=sqrt(Q(4,4))*m0;header.photo.σκ=sqrt(Q(5,5))*m0;CString data;data.Format(_T("%s\r\n"),_T("后方交会成果"));OutData+=data;OutData+="\r\n";data.Format(_T("%s %s %.f"),_T("左片"),_T("迭代次数"),n);OutData+=data;OutData+=("\r\n\r\n");data.Format(_T(" %s\r\n %s %s %s %s %s %s\r\n"), _T("左片外方位元素(线元素为m,角元素为度)"),_T("Xs"),_T("Ys"),_T("Zs"),_T("φ"),_T("ω"),_T("κ"));OutData+=data;data.Format(_T("%.4f %.4f %.4f %.4f %.4f %.4f\r\n\r\n"),header.photo.Xs1,header.photo.Ys1,header.photo.Zs1,header.photo.φ*180/pai,header.photo.ω*180/pai,header.photo.κ*180/pai);OutData+=data;data.Format(_T("%s\r\n%s %.3f\r\n\r\n %s %s%s %s %s %s\r\n"),_T("左片精度(线元素精度为m,角元素精度为″)"),_T("单位权中误差m0"),m0,_T("σXs"),_T("σYs"),_T("σZs"),_T("σφ"),_T("σω"),_T("σκ"));OutData+=data;data.Format(_T(" %.4f %.4f %.4f %.4f %.4f%.4f\r\n"),header.photo.σXs1,header.photo.σYs1,header.photo.σZs1,header.photo.σφ*180/pai*3600,header.photo.σω*206265,header.photo.σκ*206265);OutData+=data;OutData+=("\r\n\r\n");//计算右片外方位元素****************************************************************// //************************************************************************************//Xs0=x/header.StationCount;Ys0=y/header.StationCount;Zs0=header.photo.m*header.photo.f/1000;φ=0;ω=0;κ=0;n=0;do{n++;//计算旋转矩阵Rdouble a1,a2,a3,b1,b2,b3,c1,c2,c3;a1=cos(φ)*cos(κ)-sin(φ)*sin(ω)*sin(κ); R(0,0)=a1;a2=-cos(φ)*sin(κ)-sin(φ)*sin(ω)*cos(κ); R(0,1)=a2;a3=-sin(φ)*cos(ω); R(0,2)=a3;b1=cos(ω)*sin(κ); R(1,0)=b1;b2=cos(ω)*cos(κ); R(1,1)=b2;b3=-sin(ω); R(1,2)=b3;c1=sin(φ)*cos(κ)+cos(φ)*sin(ω)*sin(κ); R(2,0)=c1;c2=-sin(φ)*sin(κ)+cos(φ)*sin(ω)*cos(κ); R(2,1)=c2;c3=cos(φ)*cos(ω); R(2,2)=c3;//计算像点坐标的近似值,构建B,L矩阵for(int i=0; i<header.StationCount;i++){bb(0,0)=a1*(header.StationCoor[i].Xtp-Xs0)+b1*(header.StationCoor[i].Yt p-Ys0)+c1*(header.StationCoor[i].Ztp-Zs0);bb(1,0)=a2*(header.StationCoor[i].Xtp-Xs0)+b2*(header.StationCoor[i].Yt p-Ys0) //单位为m+c2*(header.StationCoor[i].Ztp-Zs0);bb(2,0)=a3*(header.StationCoor[i].Xtp-Xs0)+b3*(header.StationCoor[i].Yt p-Ys0)+c3*(header.StationCoor[i].Ztp-Zs0);double t1=header.StationCoor[i].x2;//(X-X0)(Y-Y0)的值,单位为mmdouble t2=header.StationCoor[i].y2;L(2*i,0)=(header.StationCoor[i].x2+header.photo.f*bb(0,0)/bb(2,0))/1000 ;L(2*i+1,0)=(header.StationCoor[i].y2+header.photo.f*bb(1,0)/bb(2,0))/10 00;B(2*i,0)=(a1*header.photo.f+a3*t1)/bb(2,0)/1000;B(2*i,1)=(b1*header.photo.f+b3*t1)/bb(2,0)/1000;B(2*i,2)=(c1*header.photo.f+c3*t1)/bb(2,0)/1000;B(2*i,3)=(t2*sin(ω)-(t1/header.photo.f*(t1*cos(κ)-t2*sin(κ))+header. photo.f*cos(κ))*cos(ω))/1000;B(2*i,4)=(-header.photo.f*sin(κ)-t1/header.photo.f*(t1*sin(κ)+t2*cos(κ)))/1000;B(2*i,5)=t2/1000;B(2*i+1,0)=(a2*header.photo.f+a3*t2)/bb(2,0)/1000;B(2*i+1,1)=(b2*header.photo.f+b3*t2)/bb(2,0)/1000;B(2*i+1,2)=(c2*header.photo.f+c3*t2)/bb(2,0)/1000;B(2*i+1,3)=(-t1*sin(ω)-(t2/header.photo.f*(t1*cos(κ)-t2*sin(κ))-head er.photo.f*sin(κ))*cos(ω))/1000;B(2*i+1,4)=(-header.photo.f*cos(κ)-t2/header.photo.f*(t1*sin(κ)+t2*co s(κ)))/1000;B(2*i+1,5)=-t1/1000;}//平差计算Nbb=(~B)*B;Nvv=(~B)*L;Dx=(Nbb.Inv())*Nvv;Xs0+=Dx(0,0);Ys0+=Dx(1,0);Zs0+=Dx(2,0);φ+=Dx(3,0);ω+=Dx(4,0);κ+=Dx(5,0);}while((fabs(Dx(0,0))>0.001)||(fabs(Dx(1,0))>0.001)||(fabs(Dx(2,0)) >0.001)||(fabs(Dx(3,0)*206265)>1)||(fabs(Dx(4,0)*206265)>1)||(fabs(Dx(5,0)*206265)>1));header.photo.Xs2=Xs0;header.photo.Ys2=Ys0;header.photo.Zs2=Zs0;header.photo.φ=φ;header.photo.ω=ω;header.photo.κ=κ;V=B*Dx-L;Vt=(~V)*V;//改正数转置m0=sqrt(Vt(0,0)/(2*header.StationCount-6));Q=Nbb.Inv();//协因数阵//求解点位误差header.photo.σXs2=sqrt(Q(0,0))*m0;header.photo.σYs2=sqrt(Q(1,1))*m0;header.photo.σZs2=sqrt(Q(2,2))*m0;header.photo.σφ=sqrt(Q(3,3))*m0;header.photo.σω=sqrt(Q(4,4))*m0;header.photo.σκ=sqrt(Q(5,5))*m0;data.Format(_T("%s %s %.f"),_T("右片"),_T("迭代次数"),n);OutData+=data;OutData+=("\r\n\r\n");data.Format(_T(" %s\r\n %s %s %s %s %s %s\r\n"), _T("右片外方位元素(线元素为m,角元素为度)"),_T("Xs"),_T("Ys"),_T("Zs"),_T("φ"),_T("ω"),_T("κ"));OutData+=data;data.Format(_T("%.4f %.4f %.4f %.4f %.4f%.4f\r\n\r\n"),header.photo.Xs2,header.photo.Ys2,header.photo.Zs2,header.photo.φ*180/pai,header.photo.ω*180/pai,header.photo.κ*180/pai);OutData+=data;data.Format(_T("%s\r\n%s %.4f"),_T("右片精度(线元素精度为m,角元素精度为″)"),_T("单位权中误差m0(单位为um)"),m0);OutData+=data;OutData+=("\r\n\r\n");data.Format(_T(" %s %s %s %s%s %s\r\n"),_T("σXs"),_T("σYs"),_T("σZs"),_T("σφ"),_T("σω"),_T("σκ"));OutData+=data;data.Format(_T(" %.4f %.4f %.4f %.4f %.4f%.4f\r\n\r\n\r\n"),header.photo.σXs2,header.photo.σYs2,header.photo.σZs2,header.photo.σφ*180/pai*3600,header.photo.σω*206265,header.photo.σκ*206265);OutData+=data;}void Adjustment::adjustment2(CString &OutData)//空间前交{//由外方位线元素计算基线分量BX, BY, BZdouble BX=header.photo.Xs2-header.photo.Xs1;double BY=header.photo.Ys2-header.photo.Ys1;double BZ=header.photo.Zs2-header.photo.Zs1;//计算旋转矩阵RCMatrix R1(3,3),R2(3,3),XYZ1(3,1),XYZ2(3,1);double a1,a2,a3,b1,b2,b3,c1,c2,c3;a1=cos(header.photo.φ)*cos(header.photo.κ)-sin(header.photo.φ)*sin(header.photo.ω)*sin(header.photo.κ); R1(0,0)=a1;a2=-cos(header.photo.φ)*sin(header.photo.κ)-sin(header.photo.φ)*sin(header.photo.ω)*cos(header.photo.κ); R1(0,1)=a2;a3=-sin(header.photo.φ)*cos(header.photo.ω); R1(0,2)=a3;b1=cos(header.photo.ω)*sin(header.photo.κ); R1(1,0)=b1;b2=cos(header.photo.ω)*cos(header.photo.κ); R1(1,1)=b2;b3=-sin(header.photo.ω); R1(1,2)=b3;c1=sin(header.photo.φ)*cos(header.photo.κ)+cos(header.photo.φ)*sin(header.photo.ω)*sin(header.photo.κ); R1(2,0)=c1;c2=-sin(header.photo.φ)*sin(header.photo.κ)+cos(header.photo.φ)*sin(header.photo.ω)*cos(header.photo.κ); R1(2,1)=c2;c3=cos(header.photo.φ)*cos(header.photo.ω); R1(2,2)=c3;a1=cos(header.photo.φ)*cos(header.photo.κ)-sin(header.photo.φ)*sin(header.photo.ω)*sin(header.photo.κ); R2(0,0)=a1;a2=-cos(header.photo.φ)*sin(header.photo.κ)-sin(header.photo.φ)*sin(header.photo.ω)*cos(header.photo.κ); R2(0,1)=a2;a3=-sin(header.photo.φ)*cos(header.photo.ω); R2(0,2)=a3;b1=cos(header.photo.ω)*sin(header.photo.κ); R2(1,0)=b1;b2=cos(header.photo.ω)*cos(header.photo.κ); R2(1,1)=b2;b3=-sin(header.photo.ω); R2(1,2)=b3;c1=sin(header.photo.φ)*cos(header.photo.κ)+cos(header.photo.φ)*sin(header.photo.ω)*sin(header.photo.κ); R2(2,0)=c1;c2=-sin(header.photo.φ)*sin(header.photo.κ)+cos(header.photo.φ)*sin(header.photo.ω)*cos(header.photo.κ); R2(2,1)=c2;c3=cos(header.photo.φ)*cos(header.photo.ω); R2(2,2)=c3;CMatrix NEI1(3,1),NEI2(3,1);CString data;data.Format(_T("%s\r\n"),_T("前方交会成果"));OutData+=data;OutData+="\r\n";data.Format(_T("%s\r\n%s %s %s %s\r\n"),_T("未知点"),_T("点名"),_T("Xtp/m"),_T("Ytp/m"),_T("Ztp/m"));OutData+=data;OutData+="\r\n";for(int i=0;i<header.UnKnownPointCount;i++){NEI1(0,0)=header.UnKnownPoint[i].x1;NEI1(1,0)=header.UnKnownPoint[i].y1;NEI1(2,0)=-header.photo.f;NEI2(0,0)=header.UnKnownPoint[i].x2;NEI2(1,0)=header.UnKnownPoint[i].y2;NEI2(2,0)=-header.photo.f;XYZ1=R1*NEI1;XYZ2=R2*NEI2;doubleN1=(BX*XYZ2(2,0)-BZ*XYZ2(0,0))/(XYZ1(0,0)*XYZ2(2,0)-XYZ1(2,0)*XYZ2(0,0));doubleN2=(BX*XYZ1(2,0)-BZ*XYZ1(0,0))/(XYZ1(0,0)*XYZ2(2,0)-XYZ1(2,0)*XYZ2(0,0));header.UnKnownPoint[i].Xtp=header.photo.Xs1+N1*XYZ1(0,0);header.UnKnownPoint[i].Ytp=header.photo.Ys1+N1*XYZ1(1,0);header.UnKnownPoint[i].Ztp=header.photo.Zs1+N1*XYZ1(2,0);data.Format(_T("%s %.4f %.4f %.4f\r\n"),header.UnKnownPo int[i].strID,header.UnKnownPoint[i].Xtp,header.UnKnownPoint[i].Ytp,header.UnKnownPoint[i].Ztp);OutData+=data;OutData+="\r\n";}//检核点header.StationCoorJ =new ControlPointData[header.StationCount];data.Format(_T("%s\r\n%s %s %s %s\r\n"),_T("检核点"),_T("点名"),_T("Xtp差值/m"),_T("Ys差值/m"),_T("Zs差值/m"));OutData+=data;OutData+="\r\n";for(int i=0;i<header.StationCount;i++){NEI1(0,0)=header.StationCoor[i].x1;NEI1(1,0)=header.StationCoor[i].y1;NEI1(2,0)=-header.photo.f;NEI2(0,0)=header.StationCoor[i].x2;NEI2(1,0)=header.StationCoor[i].y2;NEI2(2,0)=-header.photo.f;XYZ1=R1*NEI1;XYZ2=R2*NEI2;doubleN1=(BX*XYZ2(2,0)-BZ*XYZ2(0,0))/(XYZ1(0,0)*XYZ2(2,0)-XYZ1(2,0)*XYZ2(0,0));doubleN2=(BX*XYZ1(2,0)-BZ*XYZ1(0,0))/(XYZ1(0,0)*XYZ2(2,0)-XYZ1(2,0)*XYZ2(0,0));header.StationCoorJ[i].Xtp=header.photo.Xs1+N1*XYZ1(0,0);header.StationCoorJ[i].Ytp=header.photo.Ys1+N1*XYZ1(1,0);header.StationCoorJ[i].Ztp=header.photo.Zs1+N1*XYZ1(2,0);data.Format(_T("%s %.4f %.4f %.4f\r\n"),header.StationCoor[i].strID,(header.StationCoorJ[i].Xtp-header.StationCoor[i].Xtp),(header.StationC oorJ[i].Ytp-header.StationCoor[i].Ytp),(header.StationCoorJ[i].Ztp-header.StationCoor[i].Ztp));OutData+=data;OutData+="\r\n";}}void Adjustment::SaveData(CString &OutData) //文件保存平差信息{CFileDialog dlgfile(FALSE,_T("txt"));if(dlgfile.DoModal()==IDCANCEL)return;CString strfilename=dlgfile.GetPathName();CStdioFile wfile;wfile.Open (strfilename,CFile::modeWrite |CFile::modeCreate|CFile::modeNoTruncate );wfile.WriteString (OutData);wfile.Close ();}Space resection and forward intersectionDlg.cpp#include"ontrolPointData.h"#include"Adjustment.h"#include<locale.h>#include"math.h"#include"Matrix.h"Adjustment ST;void CSpaceresectionandforwardintersectionDlg::OnBnClickedButton1()//读取文本{// TODO: 在此添加控件通知处理程序代码CFileDialogdlgFile(TRUE,_T("txt"),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T("(文本文件)|*.txt"));if(dlgFile.DoModal()==IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,"");ST.LoadData(strFileName,strData);UpdateData(FALSE);}void CSpaceresectionandforwardintersectionDlg::OnBnClickedButton2()//单片后交{// TODO: 在此添加控件通知处理程序代码OutData=_T("");//清空OutDataST.adjustment1(OutData);UpdateData(FALSE);}void CSpaceresectionandforwardintersectionDlg::OnBnClickedOk()//空间前交{// TODO: 在此添加控件通知处理程序代码ST.adjustment2(OutData);UpdateData(FALSE);}void CSpaceresectionandforwardintersectionDlg::OnBnClickedButton3()//保存结果{// TODO: 在此添加控件通知处理程序代码ST.SaveData(OutData);}五、实验结果后方交会成果左片迭代次数 5左片外方位元素(线元素为m,角元素为度)Xs Ys Zs φωκ4999.7702 4999.7289 2000.0023 0.0123 1.6653 5.4573左片精度(线元素精度为m,角元素精度为″)单位权中误差m0 6.5779σXs σYs σZs σφσωσκ0.2445 0.3183 0.1073 32.0400 31.638011.9838右片迭代次数 5右片外方位元素(线元素为m,角元素为度)Xs Ys Zs φωκ5896.8286 5070.2443 2030.4432 0.8270 2.63676.3294右片精度(线元素精度为m,角元素精度为″)单位权中误差m0(单位为um) 6.5779σXs σYs σZs σφσωσκ0.3046 0.3988 0.1124 39.2588 40.1172 13.4085前方交会成果未知点点名 Xtp/m Ytp/m Ztp/m1 5431.4894 5879.3682 549.72332 5147.3889 5055.5063 485.00103 5495.7867 5082.6898 506.67734 5844.1737 5109.8962 528.42005 5559.9409 4286.1586 463.5233检核点点名 Xtp差值/m Ys差值/m Zs差值/mGCP1 0.0147 -0.0812 0.0902GCP2 0.0143 0.0208 -0.0094GCP3 -0.0496 -0.0409 -0.0043GCP4 0.0681 0.0172 -0.0800六、心得体会从编写思路及步骤,然后是梳理框架,要用到的子函数,子函数参数,怎么编写,又不懂得东西网上参考资料;再是自己动手编程,发现编程要求很细腻,出不得一点错误,程序编写出来后,有很多的错误,要求注意进行改正,修改;最后才得以运行。