多边形的转换与区域填充.docVIP

  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文档。上传文档
查看更多
多边形的转换与区域填充

多边形的扫描转换与区域填充在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出哪些象素在多边形内,故不能直接用于面着色;点阵表示是用位于多边形内的象素集合来刻画多边形。这种表示丢失了许多几何信息,但便于帧缓冲器表示图形,是面着色所需要的图形表示形式。光栅图形的一个基本问题是把多边形的顶点表示转换为点阵表示,这种转换称为多边形的扫描转换。 区域填充则是指先将在点阵表示的多边形区域内的一点(称为种子点)赋予指定的颜色和灰度,然后将这种颜色和灰度扩展到整个区域内的过程。 多边形的扫描转换多边形扫描转换算法对多边形的形状没有限制,但多边形的边界必须 时封闭的,且不自交。我们可以将多边形分为三种:凸多边形、凹多边 形、含内环的多边形。所谓凸多边形是指任意两顶点间的连线均在多边形 内;凹多边形是指任意两顶点间的连线有不在多边形内的部分;而含内环 的多边形则是指多边形内再套有多边形,多边形内的多边形也叫内环,内 环之间不能相交。 多边形的扫描转换与区域填充扫描线算法扫描线算法是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,完成转换工作。区间的端点可以通过计算扫描线与多边形边界线的交点获得。对于一条扫描线,多边形的扫描转换过程可以分为四个步骤: (1)求交:计算扫描线与多边形各边的交点; (2)排序:把所有交点按x值递增顺序排序; (3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间, (4)着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。 图2.3.2 一个多边形与若干扫描线 为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。我们把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表 AET 。 a 扫描线6的活性边表 b 扫描线7的活性边表 图2.3.3活性边表 AET 假定当前扫描线与多边形某一条边的交点的横坐标为x,则下一条扫描线与该边的交点不必要重计算,只要加一个增量△x即可,下面,我们推导这个结论。 设该边的直线方程为:ax+by+c 0,当前扫描线及下一条扫描线与边的交点分别为 xi,yi 、 xi+1,yi+1 ,则: axi+byi+c 0 axi+1+byi+1+c 0 其中x -b/a 为常数, 另外使用增量法计算时,我们需要知道一条边何时不再与下一条扫描线相交,以便及时把它从活性边表中删除出去。综上所述,活性边表的结点应为对应边保存如下内容:第1项存当前扫描线与边的交点坐标x值;第2项存从当前扫描线到下一条扫描线间x的增量Dx;第3项存该边所交的最高扫描线号ymax。 为了方便活性边表的建立与更新,我们为每一条扫描线建立一个新边表(NET),存放在该扫描线第一次出现的边。也就是说,若某边的较低端点为ymin,则该边就放在扫描线ymin的新边表中。 图2.3.4 上图所示各条扫描线的新边表NET 算法过程: void polyfill polygon, color int color;多边形 polygon; for 各条扫描线i 初始化新边表头指针NET [i]; 把y min i 的边放进边表NET [i]; y 最低扫描线号; 初始化活性边表AET为空; for 各条扫描线i 把新边表NET[i]中的边结点用插入排序法插入AET表,使之按x坐标递增顺序排列; 遍历AET表,把配对交点区间 左闭右开 上的象素 x, y ,用drawpixel x, y, color 改写象素颜色值; 遍历AET表,把y max i 的结点从AET表中删除,并把y max i结点的x值递增D x; 若允许多边形的边自相交,则用冒泡排序法对AET表重新排序; /* polyfill */ 扫描线与多边形顶点相交时,必须正确地取舍交点,如图2.3.5所示。 · ? 扫描线与多边形相交的边分别位于扫描线的两侧,则计一个交点,如点P5,P6。 ·?? 扫描线与多边形相交的边分别位于扫描线同侧,且 yi yi-1,yi yi+1,则计2个交点 填色 ,如P2。若 yi yi-1,yi yi+1,则计0个交点 不填色 ,如P1。 ·?? 扫描线与多边形边界重合 当要区分边界和边界内区域时需特殊处理 ,则计1个交点。 具体实现时,只需检查顶点的两条边的另外两个端点的y值。按这两个y值中大于交点y值的个数是0,1,2来决定。 图2.3.5 扫描线与多边形相交,特殊情况的处理

文档评论(0)

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

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

1亿VIP精品文档

相关文档