- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5讲 多边形区域填充算法.ppt
第5讲 多边形区域填充算法中南大学地学院GIS中心 区域的表示方法 区域的表示方法 顶点表示(几何表示) 用区域的顶点序列来表示区域,经过数学计算可知区域是由什么样的相连直线或曲线构成其轮廓线的 点阵表示(像素表示) 用位于多边形内的像素集合来刻画多边形 区域填充的概念 区域填充即给出一个区域的定义,要求对此区域范围内的所有像素赋予指定的颜色代码 确定哪些像素位于填充区域的内部 用指定颜色绘制这些像素 扫描转换多边形 将多边形顶点表示形式转换成点阵表示形式 逐点判断法 基本原理 判断绘图窗口内的像素是否位于多边形内,若是,则用指定颜色绘制该像素 问题 如何判断点在多边形的内外关系? 射线法 累计角度法 编码法 算法 假设判断点是否在多边形内的函数为IsInside() 射线法 若交点数=偶数(包括0),则点在多边形之外 依顺序取出每一条射线,求其与多边形边界的交点,并对每一对交点中的像素进行填充 射线法的缺陷 填充扩大化问题 若将多边形边界看成是多边形内部,并对它们填充,则该多边形会被放大 解决方法 采取“左闭右开,下闭上开”的方法,即将左、下边界像素视为多边形内部,需填充,而右、上边界则为多边形外部,不予填充 取整问题 射线与多边形边界交点坐标值不为整数 解决方法 当射线与多边形边界交点坐标为小数值时,如果多边形在此边界右侧,则将该小数值进1作为边界点,否则舍去小数部分并进行填充,这样可使多边形不扩大 奇点取舍问题 当射线与多边形顶点相交时,称该交点为奇点。如果奇点的计数不正确,会导致填充错误 解决方法 当奇点在多边形两边之下时,该点计2次,如A、D、H点 当奇点在多边形两边之上时,该点计0次,如B、F、I点 当奇点在多边形两边中间时,该点计1次,如C、E、G点 具体实现方法 检查顶点的两条边的另外两个端点的y值,由这两个y值中大于交点y值的个数是0、1、2来决定 水平边问题 射线与多边形的水平边相交时,交点理论上是无穷多个 解决方法 对于多边形的水平边,不计它与射线的交点 逐点判断法的特点 特点 程序简单 测试点是否在多边形内的算法速度太慢,效率低 改进 逐点判断法孤立考虑各个像素与多边形的内外关系 利用内部点的连续性 扫描线多边形填充算法 目标 利用相邻像素之间的连贯性,提高算法效率 处理对象:简单多边形 非自交多边形 (边与边之间除了顶点外无其它交点) 扫描线(Scanning Line) 平行于坐标轴的直线 一般取平行于X轴 区间:扫描线与边的交点间的线段 连贯性(Coherence) 边的连贯性(Edge Coherence) 某条边与当前扫描线相交,也可能与下一条扫描线相交 扫描线的连贯性(Scan-line Coherence) 当前扫描线与各边的交点顺序与 下一条扫描线与各边的交点顺序可能相同或类似 区间的连贯性(Span Coherence) 同一区间上的像素取同一颜色属性 基本原理 将整个绘图窗口内扫描多边形的问题分解到一条条扫描线,只要完成每条扫描线的绘制就实现了多边形的扫描转换 一条扫描线与多边形的边有偶数个交点,每2个点形成一区间 多边形的填充过程可以分为四个步骤: 求交:计算扫描线与多边形各边的交点 排序:把所有交点按x值递增顺序排序 配对:第一个与第二个,第三个与第四个等,每对交点代表扫描线与多边形的一个相交区间 填色:把相交区间内的像素置成多边形颜色,把相交区间外的像素置成背景色 计算交点 分类 第一类交点:位于同一条边上的后继交点--(P2, P4) 第二类交点:新出现的边与扫描线的交点--(P3) 计算:由扫描线y=e与多边形的交点递推计算扫描线 y=e+1的交点 第一类交点: x’=x+1/k 第二类交点: 线段的下端点即为交点 排序、配对与填色 排序 扫描线连贯性 采用插入排序 交点两两配对与填色 区间连续性 连续绘制区间上的像素 算法数据结构 边的分类表ET (Edge Table)(又称新边表) 按照边的下端点 y 坐标,对非水平边进行分类的链表 下端点 y 坐标值等于i 的边属于第i类,同类中有多条边时按x从小到大排序 作用:避免盲目求交;计算第二类交点坐标 ET的建立 先按下端点的y坐标值对所有的边进行分组 若某边的下低端点y值为ymin,则该边就放在ymin所对应的桶中 然后用排序方法,按下端点的x坐标值递增的顺序将同一组中的边排列成行 ET定义 每条扫描线,对应一个链表 链表中每个结点的结构 假设从下到上扫描,多边形的某边与当前扫描线的交点坐标为(xi,yi),该边的直线方程为ax+by+c=0,则下一条扫描线与该边的交点不需重新计算,只要加上1/k 其中,x的增量-b/a即为
文档评论(0)