网站大量收购独家精品文档,联系QQ:2885784924

(孙一璠)GIS基础算法实习报告电子版.docxVIP

(孙一璠)GIS基础算法实习报告电子版.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(孙一璠)GIS基础算法实习报告电子版

实习一凸壳生成实习目的①通过给定的离散点集,结合矢量的叉积、点积运算,获取对应凸壳。②结合上学期VC实习,了解VC/VS的类及绘图中基本坐标变换知识。实习原理离散点集的凸壳计算是很多运算的基础。凸壳,可以看作是点集合的边界,连接凸壳点所得到的凸多边形完全包含了空间中的所有点。生成凸壳的方法非常多,这里取其中较为简单的一种思路即卷积法:首先找到一个y最小值点,以该点为起始点,做一条射线让射线从从水平方向开始逆时针旋转,该射线触碰到的第一个点即为下一个凸壳点,以该点为新的起始点,重复以上步骤,直到下一个凸壳点和y最小值点重合。值得注意的是从第二个点开始,射线的起始方向不再是水平方向,而是上一凸壳点与当前点连线方向。实习步骤①通过MFC AppWizard创建单文档工程文件②在工程中添加自定义凸壳类(CConvexHull),该类的成员变量主要包括用于存储离散点集坐标串的pts,用于存储凸壳坐标串的Chpts,用于存储点集外接矩形的crWCRect。另外该类有两个方法,一个是用于获取点集凸壳的getConvexHull函数,另一个是用于绘制点集和凸壳的Draw函数。③在view部分添加凸壳类的对象,在doc部分添加数据读取函数,完成数据读取,在读取同时生成坐标范围并付给crWCect。④在view中添加OnPrepareDC实现坐标的变换和映射,并在OnDraw部分添加凸壳的绘制函数。⑤完善凸壳获取和凸壳绘制函数。实习分析这一次实习有两个目的,第一就是了解MFC程序的基本框架,这个是之后所有实习的基础,也是GIS实习能教会我的最重要的东西之一。第二是实现凸壳函数,完善程序。从实习过程和结果来看,本次实习圆满完成了预定的目标。由于基本步骤老师已经给出程序,因此主要难点在于凸壳算法的实现。MFC单文档中主要有CAboutDlg/CCGExeApp/CCGExeDoc/CCGExeView/CMainFrame五个基本类,其中Doc和View是在整个实习中需要较多接触修改的部分,其中Doc部分存有文件读取的函数,而一切需要绘制的内容都需要在View中完成。对于一个空白的工程,要实现我们的目的其核心步骤为“设置坐标变换与映射,实现WC-DC的过程”、“根据具体需求读取文件”、“自定义类并实现核心函数”、“在OnDraw中创建并调用相关对象,实现绘制”。由于对于MFC流程的不熟悉,我在完成这些工作上耗费了大量精力,不过最终掌握了这一套开发流程是值得的。在实习的途中,我还将使用的平台从VC变更为了VS体会到了两种平台的优势。在实现凸壳算法时,我最终选定了卷积法。在实现途中,由于思路的不清晰和C++语法的不熟练,我浪费了大量时间。其中印象最为深刻的部分是:“从第二个点开始,射线的起始方向不再是水平方向,而是上一凸壳点与当前点连线方向。”实习二图形裁切实习目的①通过对给定数据的窗口裁切,深入了解其内部快速排除机制、裁切实现、数据存储等②了解图形表达的主要方法实习原理其核心是剪裁函数的实现。剪裁的目的是“判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分“,剪裁的处理基础是”图元关于窗口内外关系的判别“和”图元与窗口的求交“,剪裁的假定条件是”矩形剪裁窗口“和”待剪裁线段“。这里采用Cohen-Sutherland直线裁剪算法,其基本算法思想是将每条线段P1P2按与窗口的关系,分成完全在、不完全在、完全不在三类。将不完全在线段分成两段,其中一段在窗口外可以丢弃,对另一端重复操作。在判断线段关系的时候,采用区域码。区域码是表示直线端点相对位置的4位二进制代码。四位依次为上下右左,其判别关系如下图所示。若code1=0且 code2=0,P1P2明显在窗口内,则“取”;若code1 code2≠0,P1P2明显在窗口外,则“弃”;对于两个条件都不满足的线段,在必定不完全在窗口内,这时求其余窗口边界的交点即可。实习步骤①创建空间类系列,主要有CGeoMap,CGeoLayer,CGeoPolyline三个类,其从属关系为一个Map包含多个Layer,一个Layer包含多个Polyline,一个Polyline包含多个Point。处理了一些基本的成员变量外,这些类具有用于绘制原图及裁切后图形的draw方法、用于添加下级对象的add方法、和利用给定矩形裁切图形的clip方法。②修改doc中的数据读取方法,读取的数据结构为”前两行为数据区域限制,之后为线段数据,线段数据包括线段组成点数和点坐标两个部分“。③实现clip和draw方法,完善细节。④在view中添加CGeoMap对象,在OnDraw中添加相关代码实现绘制。⑤编译运行并打开clipdata查看效果。实习分析虽然中途出现了不知名错误,但重做后完成了既定目标,实现了指定窗口的剪裁。本次实习的难点有两

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档