计算机图形学5多边形扫描转换和区域填充.ppt

计算机图形学5多边形扫描转换和区域填充.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多边形的扫描转换与区域填充;一、多边形的扫描转换; 顶点表示是用多边形的顶点序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出哪些象素在多边形内,故不能直接用于面着色。; 众所周知,在计算机上画图形,实际上就是写帧缓存(frame buffer)。如果知道多边形哪些像素在里面,就直接写到帧缓存里即可。; 多边形分为凸多边形、凹多边形、含内环的多边形等:; 有关概念;逐点判断填充算法;取矩形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)…….. ;1)射线法;;逐点判断法; 现在的问题是,知道多边形的边界,如何找到多边形内部的点,即把多边形内部填上颜色。 ; X-扫描线算法填充多边形的基本思想是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,即完成填充工作。; 对于每条穿越多边形的扫描线,X-扫描线算法确定扫描线与多边形边相交区间的像素点位置。; 从该例可以看出,算法的核心是需按x递增顺序排列交点的x坐标序列。由此,可得到X-扫描线算法步骤如下:;c、交点配对:第一个与第二个,第三个与第四个 等等,每对交点就代表扫描线与多边形的一个相交区间;;x;具体实现方式是:; 但这个算法效率比较低,因为这个算法的关键问题是求交!而求交是很可怕的,求交的计算量是非常大的。; 扫描转换算法重要意义是提出了图形学里两个重要的思想:第一个思想是扫描线的思想,当处理图形图像时按一条条扫描线处理;第二个思想是增量的思想。;可以从三方面考虑加以改进:;数据结构:; 即△x=1/k为常量。则下一条扫描线与该边的交点不要重新计算,只要加一个增量△x。;一个多边形与若干扫描线; 为了方便有效边表的建立与更新,需构造一个新边表(NET),用来存放多边形的边的信息,分为4个步骤:;一个多边形与若干扫描线; 从上面这个指针数组里面就知道多边形是从哪里开始的。在这个指针数组里只有1、2、3、5处有边,因此当从下往上进行扫描转换的时候,从y=1开始做,而在1这条线上有两条边进来了,然后就把这两条边放进活性边表来处理。; 即每做一次新的扫描线时,要对已有的边进行三个处理:一是否被去除掉;如果不被去除,第二就要对它的数据进行更新,。所谓更新数据就是要更新它的x值,即x+△x;最后,就是有没有新的边进来,新的边在NET里,可以插入排序插进来。;void polyfill (polygon, color) int color; 多边形 polygon; { for (各条扫描线i ) { 初始化新边表头指针NET[i]; 把ymin = i 的边放进边表NET[i]; } y = 最低扫描线号; 初始化活性边表AET为空; for (各条扫描线i ) { 把新边表NET[i] 中的边结点用插入排序法插入AET表, 使之按x坐标递增顺序排列; 遍历AET表,把配对交点区间(左闭右开)上的象素(x,y) ,用putpixel(x,y,color) 改写象素颜色值; 遍历AET表,把ymax= i 的结点从AET表中删除,并把ymaxi 结点的x值递增?x; 若允许多边形的边自相交,则用冒泡排序法对AET表重新排序; } } /* polyfill */;3、边缘填充算法;逐边向右取;;边缘填充算法缺点:每一个象素可能被访问多次 引入栅栏,以减少填充算法访问象素的次数。 栅栏:与扫描线垂直的直线,通常过一顶点,且把多边形分为左右二半。 基本思想:扫描线与多边形的边求交,将交点与栅栏之间的象素取补。若交点位于栅栏左边,则将交点之右,栅栏之左的所有象素取补;若交点位于栅栏右边,则将交点之左,栅栏之右的所有象素取补。 减少了象素重复访问数目,但不彻底。;6、边界标志算法;void edgemark_fill(polydef

文档评论(0)

清风老月 + 关注
官方认证
内容提供者

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

认证主体阳春市惠兴图文设计有限公司
IP属地广东
统一社会信用代码/组织机构代码
91441781MA53BEWA2D

1亿VIP精品文档

相关文档