- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4区域填充
第四讲 区域填充 有关概念 逐点判断填充算法 3. 种子填充算法 4. 区域填充图案 5. 扫描线多边形填充算法 6. 边填充算法 2.逐点判断填充算法 区域填充的基本(初级)方法:逐点判断填充算法 逐点判断绘图窗口内的每一个像素; 若在区域的内部:用指定的属性设置该点; 否则不予处理; 取矩形R(x1≤x≤x2,y1≤y≤y2),使R包围D, 则逐点判断填充算法如下: for(y=y1;y=y2;y++) for(x=x1;x=x2;x++) if(inside(D,x,y)) drawpixel(x,y,color); 上述算法原理简单、实用,但效率低; 效率低的原因是没有考虑各象素之间的联系,孤立地考察象素与区域的关系,使得几十万甚至几百万个象素都要一一判别,每次判别又要多次求交点,需要做大量的乘除运算,花费很多时间。 如何判断点在多边形的内或外?(包含性检查的方法) 1)射线法; 2)累计角度法; 3)编码法; 4)…….. 这些内容在本书第八章几何造型中有专门介绍。 3.种子填充算法 1)深度递归的种子填充算法 2)扫描线种子填充算法 1)深度递归的种子填充算法(漫水法) 从已知种子点出发,每填充一点,在其周围寻找新种子点,重复进行,直到再无未填充的点为止。 针对内点表示的4连通区域的递归填充具体步骤: 1.种子入栈. 2.当栈非空时,进行下面的操作,否则结束. 3.栈顶元素出栈,如果是未填充的内部点,则将其填充. 继续考察与其连通的点,若是未填充的内部点,则该点入栈.返回2. VC++程序实现 可以直接利用函数的递归调用来实现. 设(x,y)为内点表示的4连通区域内的一点,oldcolor为区域的原色,要将整个区域填充为新的颜色newcolor。 内点表示的4连通区域的递归填充算法: 边界表示的4连通区域的递归填充算法: void BoundaryFill4(int x,int y,int boundarycolor,int newcolor) { int color= Getpixel(x,y); ? if(color!=newcolor color!=boundarycolor) ? { drawpixel(x,y,newcolor); ??? BoundaryFill4 (x,y+1, boundarycolor,newcolor); ??? BoundaryFill4 (x,y-1, boundarycolor,newcolor); ??? BoundaryFill4 (x-1,y, boundarycolor,newcolor); ??? BoundaryFill4 (x+1,y, boundarycolor,newcolor); ? } } 对于内点表示和边界表示的8连通区域的填充,只要将上述相应代码中递归填充相邻的4个象素增加到递归填充8个象素即可。 2)扫描线种子填充算法 种子填充的递归算法原理和程序都很简单,但由于多次递归,费时、费内存,效率不高。为了减少递归次数,提高效率可以采用采用扫描线算法。 算法的基本过程如下:当给定种子点(x,y)时,首先填充种子点所在扫描线上的位于给定区域的一个区段,然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,确定新种子点,并依次保存下来。反复这个过程,直到填充结束。 扫描线区域填充算法可由下列四个步骤实现: (1)初始化:堆栈置空。将种子点(x,y)入栈。 (2)出栈:若栈空则结束。否则取栈顶元素(x,y),以y作为当前扫描线。 (3)填充并确定种子点所在区段:从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到非内部。分别标记区段的左、右端点坐标为xl和xr。 (4)并确定新的种子点:在区间[xl,xr]中检查与当前扫描线y上、下相邻的两条扫描线上的象素。若存在非边界、未填充的象素,则把每一区间的最右象素作为种子点压入堆栈,返回第(2)步。 VC++程序实现 4.区域填充图案 前面介绍的区域填充算法,把区域内部的全部的象素设置为同一种颜色。但在实际应用中,有时需要用一种图案来填充平面区域。 可以通过对前述算法中写象素的那部分内容稍作修改来实现:在确定了区域内一象素之后,不是马上往该象素填色,而是先查询图案位图的对应位置。若以透明方式填充图案,则当图案表的对应位置为1时,用前景色写象素,否则,不改变该象素的值。而以不透明方式填充图案,则当图案表的对应位置为1时,用前景色写象素,否则,用背景色写象素。 进行图案填充时,在不考虑图案旋转的情况下,必
您可能关注的文档
- 3D地震图像.doc
- 3M发明新薄膜.pdf
- 3.2教科版五下科学太阳钟.ppt
- 3x5机房图纸.pdf
- 3、销售话术.pdf
- 3、分析程序表(用作风险评估程序)2120.doc
- 3r习题.doc
- 3、梭梭林.ppt
- 3季报-东阿阿胶.pdf
- 3月水平考摸底测试讲评.ppt
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
最近下载
- 2024山东职业学院招聘笔试真题及答案详解一套.docx VIP
- 人教版2025四年级上册英语unit1 Unit 1 Helping at home A Let’s talk 课件.pptx
- 软件六性分析报告.docx
- 党委书记巡察整改专题生活会个人对照检查材料.docx VIP
- 市政调蓄池施工组织设计要点.doc
- csc-306gz数字式发电机转子接地保护装置说明书0sf.450.v1.pdf VIP
- 2016款一汽丰田荣放RAV4_汽车使用手册用户操作图解驾驶车主车辆说明书电子版.pdf
- 小儿遗传性疾病.ppt
- 第三课 卖辣椒的女孩儿.pptx VIP
- F420002【复试】2024年青海师范大学077501计算机系统结构《复试数据结构和操作系统之计算.pdf VIP
文档评论(0)