计算机图形学 CG04-3填充-4-5 .ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机图形学 CG04-3填充-4-5 .ppt》由用户(hyngb9260)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机图形学 CG04_3填充_4_5 计算机 图形学 CG04_3 填充 _4_5
- 资源描述:
-
1、4.3 区域区域填充填充多边形有两种重要的表示方法:多边形有两种重要的表示方法:顶点表示和点阵表示顶点表示和点阵表示 把多边形的顶点表示转换为点把多边形的顶点表示转换为点阵表示。这种转换称为多边形阵表示。这种转换称为多边形的扫描转换。的扫描转换。4.3 区域填充在这一节中将讨论图形系统中新的图元多边形研究有关多边形的概念以及如何表示多边形学习逐点判断算法、扫描线算法、边填充算法,种子填充算法等多边形填充的方法,及区域填充图案算法。1.多边形 所谓多边形就是用一系列首尾相连的线段构成的图形,这些组成多边形边界的线段称为多边形的多边形的边边,多边形的边的端点称为多边形的顶点多边形的顶点,一般来说一
2、个多边形应是封闭封闭的。多边形又可以分成两大类:凸多边形和凹多边形。所谓凸多边形是指这样一类多边形:如果在多所谓凸多边形是指这样一类多边形:如果在多边形内任选两个点,将这两个点用线段连接后,此边形内任选两个点,将这两个点用线段连接后,此线段上所有的点都在多边形内,这就是凸多边形。线段上所有的点都在多边形内,这就是凸多边形。而凹多边形就是非凸多边形。而凹多边形就是非凸多边形。凸凹多边形2.点是否在多边形内部的检验 为了对多边形内部的象素点赋值,首先要解决如何判断一个点是否在多边形内部。判断的方法是,先在多边形外部找一个点,然后用线段连接此点和有疑问的点,计算出此线段与多边形边界相交的次数,如果交
3、点的数目为奇奇数数,则疑问点在多边形内部;如果为偶数偶数,此点在多边形外部。图示PP2324图示P11332问题 在计算交点时,如果交点恰恰就是多边形的顶点,必须小心处理。此时要观察在此顶点相遇的两条边,如果这两条边的其余二个顶点在新构成线段的:同一侧同一侧,应认为此线段与多边形相交二次二次;异侧异侧,则认为此线段与多边形相交一次一次。解决PP23242解决P11332 13.连贯性原理1)边的连贯性的连贯性 当某条边与当前扫描线相交时,它很可能也与下一条扫描线相交。2)扫描线的连贯性扫描线的连贯性 当前线与各边的交点顺序与下 一条扫描线与各边的交点很可能相同或非常类似。3)区间的连贯性区间的
4、连贯性Yk+1yk4.填充算法 1)扫描线算法扫描线算法 充分利用了扫描线连贯性原理,避免了针对于象素点的逐点判别,有效地选择象素点来进行多边形的填充。4.填充算法-扫描线算法扫描线算法 扫描线算法扫描线算法的基本思想基本思想:对给定的多边形,用一组水平(垂直)的扫描线进行扫描扫描线进行扫描,对每一条扫描线均可求求出与多边形边的交点;交点;这些交点将扫描线分割成落在多边形内部内部和落在多边形外部外部的线段,二者相间排列;将落在多边形内部的扫描线段上的所有象素点赋以给定的色彩值。可见,算法中不需要检验每一个象素点,而只考可见,算法中不需要检验每一个象素点,而只考虑与多边形边相交的交点分割后的扫描
5、线段。虑与多边形边相交的交点分割后的扫描线段。多边形与若干扫描线A03421123456781011x5678y9P3(11,3)P4(11,8)P2(5,1)P1(2,2)P5(5,5)P6(2,7)BCDGFE返回算法求解算法求解对于一条扫描线的处理,可以分为四个步骤:(1)求交点求交点:首先求出扫描线与多边形各边的交点(2)交点排序交点排序:将这些交点按X坐标递增顺序排序(3)交点匹配交点匹配:即从左到右确定落在多边形内部的那些线段;(4)区间填充区间填充:填充落在多边形内部的线段。两个特殊问题两个特殊问题:一是当扫描线与多边形顶点相交时,交点的取舍问题;二是多边形边界上像素的取舍问题。
6、问题一的解决n扫描线交于一个顶点,而共享顶点的二条边分别落在扫描线的两边。这时交点只算一个;当共享交点的二条边在扫描线的同一边,这时交点作为0个或者2个(取决于该点是多边形的局部最高点还是局部的最低点)。n具体实现时,只需检查顶点两条边的另外两个端点的y值。按这两个y值中大于顶/交点y值的个数是0、1或2来决定是取零个、一个、还是二个。问题二的解决问题二的解决n规定落在右/上边界的像素不予以填充,而落在左/下边界的像素予以填充。问题一的解决用于保证的交点正确配对,而问题二的解决用于避免填充扩大化。y321x412340算法求解02468102468XYP1P2P3P4P5P6求扫描线与多边形边
7、交点的方法最简单的方法是将多边形的所有边放在一个表中,在处理每条扫描线时,从表中顺序取出所有的边,分别求这些边与扫描线的交点。这样做的结果将做一些无益的求交点无益的求交点动作,因为扫描线并不一定与多边形的边相交,扫描线只与部分甚至较少的边相交,因此在进行扫描在进行扫描线与多边形边求交点时,应只求那些与扫描线线与多边形边求交点时,应只求那些与扫描线相交的边的交点相交的边的交点。活性边表活性边表(AEL-Active Edge List)把与当前扫描线相交的边称活化边活化边并把它们按与扫描线交点X坐标递增的顺序存放在一个链表中,称此链表为活性边表活性边表。活性边表每个节点存放对应边的有关信息。活性
8、边表(AEL-Active Edge List)根据边和扫描线的连贯性更新AEL:假定当前扫描线与多边形某一条边的交点的X坐标为x,则下一条扫描线与该边的交点只要加一个增量x。设该边的直线方程为:ax+by+c=0,当前若yyi,x=xi;则当y=yi+1时,xi+1=xi-b/a=xi+x (其中x=-b/a 为常数)活性边表(AEL-Active Edge List)使用增量法计算时,我们需要知道一条边何时何时不再与下一条扫描线相交,以便及时把它从活性边表中删除出去:边的最大Y值(最高扫描线号)扫描线号活性边表活性边表建立AEL,每个结点结构至少如下:x:当前扫描线与边交点的x坐标;x:从
9、当前扫描线到下一条扫描线之间的x增量;ymax:边的最大Y值(最高扫描线号)。若规定多边形的边不自交,则从当前扫描线延续若规定多边形的边不自交,则从当前扫描线延续到下一扫描线的边与下一扫描线的交点顺序保持到下一扫描线的边与下一扫描线的交点顺序保持不变,否则重新排序不变,否则重新排序(交点采用冒泡排序法,活交点采用冒泡排序法,活性边表采用插入排序性边表采用插入排序)。扫描线的活性边表示例扫描线的活性边表示例20 7P6P13.5-1.57P5P67281108A x ymaxB x ymaxC x ymaxD x ymax928P4P61108P3P4F x ymaxG x ymax扫描线扫描线
10、6的活性边表的活性边表扫描线扫描线7的活性边表的活性边表P3P4P4P5图扫描线的新边表扫描线的新边表8 7 6 54 3210 5 2 8P4P55-1.5 7 P5P65-3 2P1P25 33 P2P32 0 7 P3P411 0 8 存放某扫描线第一次出现的边图具体求解步骤:具体求解步骤:处理扫描线步骤为:(1)对于扫描线Y=yc,是否有新边加入AEL,若对应的AEL中非空,并对AEL中各边按X递增排序;(2)若相对于当前扫描线的活化边表AEL非空,则将 AEL中的边两两依次配对,即第1,2边为一对,第3,4 边为一对,依次类推,每一对边与当前扫描线的交点 所构成的区段位于多边形内,依
11、次将这些区段上的点 进行着色;(3)将边的活化链表AEL中满足Y=ymax的边删去;(4)将边的活化链表AEL中剩下的每一条边的X域累加 X,即X=X+X;(5)将当前的扫描线的纵坐标Y累加1,即Y=Y+1,重复执行(1)。void polyfill(polygon,color)int color;多边形 polygon;for(各条扫描线i)初始化新边表头指针NET i;把y min=i 的边放进边表NET i;y=最低扫描线号;初始化活性边表AEL为空;for(各条扫描线i)把新边表NETi中的边结点用插入排序法插入AEL表,使之按x坐标递增顺序排列;遍历AEL表,把y max=i 的结点
12、从AEL表中删除,并把y max i结点的x值递增D x;若允许多边形的边自相交,则用冒泡排序法对AEL表重新排序;遍历AEL表,把配对交点区间(左闭右开)上的象素(x,y),用Putpixel(x,y,color)改写象素颜色值;/*polyfill*/示例扫描线Y=1时,建立的活化边表:(5,-3,2)-(5,3,11)得到交点为(5,1),(5,1)扫描线Y=Y+1=2时,有边退出,有新边加入,修改后的活化边表为:(5-3,-3,2)-(2,0,7)-(5+3,3,11)(2,-3,2)-(2,0,7)-(8,3,11)(2,0,7)-(8,3,11)得到交点为(2,2),(2,2),(
13、2,8)示例扫描线Y=3时,没有新边加入,修改后的AEL为:(2,0,7)-(8+3,3,11)-(11,0,8)(2,0,7)-(11,3,11)-(11,0,8)(2,0,7)-(11,0,8)得到交点为(2,3),(11,3),(11,3)依次类推,直到边表EL和活化边表均为空为止。2)边填充算法)边填充算法基本思想是:针对每一条扫描线和每条多边形边的交点(x,y),将该扫描线上交交点右方的所有象素取补点右方的所有象素取补。2)边填充算法)边填充算法 P5P4P3P2P1P2P3P3P4P4P5P5P1边填边填充算充算法示法示意图意图2)边填充算法特点)边填充算法特点 简单简单 但是对于
展开阅读全文