北京工业大学计算机图形学课件4-3 多边形填充.pptVIP

北京工业大学计算机图形学课件4-3 多边形填充.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2000年3月 第三节 区域填充 区域填充是指:在一个封闭的二维图形内部象素上着色(纹理、图案)。也称为:多边形的扫描转换。 本节内容: 矩形的扫描转换 多边形区域填充 图案填充 矩形的扫描转换 可利用矩形的简单性提高扫描转换的效率。 多边形填充—直线的扫描转换算法 注:多边形上的区间 实现区间填充的三个步骤 计算扫描线与多边形边界线段的交点 按照x升序排列交点 填充多边形内交点对之间的所有像素 区间填充策略 排序后的交点x坐标列表:(2,4.5,8.5,13) 4舍?还是5入? 当交点的 x 坐标值是分数时需进行舍入运算。 内?或者外? 当交点的x 坐标值是整数时,需确定该店是内点拟或是外点。 交点为尖点 交点为尖点时,可计数为:1,2或者0。 如图中P1所示。 续: 在具体实现时,对交点的后处理过程可以转化为对边界线段进行的预处理。 扫描线与多边形边界线段交点的计算(1) 交点特点: 扫描线与多边形边界线段交点的计算(2) 记前一扫描线与边界线段交点为 交点计算公式: 效率的改进(1) 考虑到 交点计算公式: 效率的改进(2) 计算下一个交点时: 活性边表 AET (active-edge table) 直线的扫描转换填充算法 生成初始边表 ET; 把扫描线的y值设为ET的最小y坐标; AET 初始化为空; 循环直至满足终止条件: AET 和 ET 为空 从ET 取值(满足ymin=y的线段)放到AET; 从AET中删除满足 y=ymax的线段,然后按照x坐标排序; 填充既定区间; y 增加 1; 针对新的y值刷新AET中各项的 x 值. 算法伪代码 Polygongfill(polydef,color) Point polydef[]; int color; { for(各条扫描线i) 建立初始化活性边表EdgeTable[i]; i=0; ActiveEdgeList=0;//当前扫描线对应的活性边表初始化 for(各条扫描线i){ 把EdgeTable[i]插入ActiveEdgeList中,并排序; 遍历ActiveEdgeList,把配对交点构成半开半闭区间; 填充各区间; 从ActiveEdgeList中删除假交点; 刷新ActiveEdgeList中交点的X坐标值; }//for } 曲线边界区域填充应用举例(1) 可用类似方法(扫描转换确定出交点)实现曲线边界区域的填充,但所需运算量显然比多边形更大。 例:圆域的活性边表填充算法。 仍假设圆心在坐标原点; 每条扫描线与圆周有两个交点,填充两个交点构成的区间即可; 扫描线与圆周的交点的计算,可利用圆的扫描转换结果。 曲线边界区域填充应用举例(2) 圆区域的活性边表填充算法: 第一步初始化:扫描线从y=r开始与圆周相交; x=0; y=r; d=1-r; deltax=3; deltay=2-2r; 第二步:确定出y扫描线上的填充区间,并进行着色; //计算圆弧的下一象素点,直到其纵坐标减1为止。 If(d0){d+=deltax; deltax+=2; x++} else{d+=deltax+deltay; deltax+=2;deltay+=2;x++;y--;} /*此时(x,y)是下一扫描线上的点,则当前扫描线为y+1*/ 填充区间应为[-(x-1),(x-1)]或[-(x-2),(x-2)]; 曲线边界区域填充应用举例(3) //如右图所示 曲线边界区域填充应用举例(4) 第三步:若xy(仍在1/8圆弧上),则重复第二步。否则结束 算法伪代码: if((x-1,y+1)在圆内){ 填充y+1扫描线上的[-(x-1),(x-1)]区间; 填充x-1扫描线上的[-y-1,y+1]区间; 填充1-x扫描线上的[-y-1,y+1]区间; 填充-y-1扫描线上的[1-x,x-1]区间 }// if((x-1,y+1)在圆内) else{//(x-1,y+1)不在圆内 填充对应的区间; } }//else:y-- }//while(xy) }//end 算法特点 利用了多边形边界的连贯性加速与扫描线交点的计算: 算法及数据结构复杂 计算效率高 对每个象素只访问一次,对硬件的访问量最小,且与设备无关。 引入活性边表结构,增加了维持边表及进行交点排序的开销,不适合硬件实现。 其它填充算法 边缘填充算法 种子填充算法:从区

文档评论(0)

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

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

1亿VIP精品文档

相关文档