光栅图形的转换与区域填充.pptVIP

  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文档。上传文档
查看更多

当扫描线与多边形P的交点是P的顶点时,则称该交点为奇点。以上所述多边形的三种形式的连贯性都基于这样的几何事实:每一条扫描线与多边形P的边界的交点个数都是偶数。但是如果把每一奇点简单地计为一个交点或者简单地计为两个交点,都可能出现奇数个交点。那么如何保证交点数为偶数呢?奇点的处理奇点的处理若奇点做两个交点处理,则情况B,交点个数不是偶数。02若奇点做一个交点处理,则情况A,交点个数不是偶数。01奇点的处理多边形P的顶点可分为两类:极值奇点和非极值奇点。如果(yi-1-yi)(yi+1-yi)≥0,则称顶点Pi为极值点;否则称Pi为非极值点。规定:奇点是极值点时,该点按两个交点计算,否则按一个交点计算。奇点的预处理:由yin的交点序列开始,根据多边形的边的连贯性,按从上到下的顺序求得各条扫描线的交点序列;根据扫描线的连贯性,可确定各条扫描线上位于多边形P内的区段,并表示成点阵形式。02算法基本思想:首先取d=yin。容易求得扫描线y=d上的交点序列为xdj1,xdj2,…xdjn,这一序列由位于扫描线y=d上的多边形P的顶点组成。01数据结构与实现步骤所有的边和扫描线求交,效率很低。因为一条扫描线往往只和少数几条边相交。如何判断多边形的一条边与扫描线是否相交?与当前扫描线相交的边称为活性边(activeedge),把它们按与扫描线交点x坐标递增的顺序存入一个链表中,称为活化边表(AEL,Activeedgetable)。它记录了多边形边沿扫描线的交点序列。只需对当前扫描线的活动边表作更新,即可得到下一条扫描线的活动边表。1234数据结构与实现步骤数据结构与实现步骤如何计算下一条扫描线与边的交点?直线方程:ax+by+c=0当前交点坐标:(xi,yi)下一交点坐标:(xi+1,yi+1)xi+1=((-byi+1)-c)/a=((-byi+1)-c)/a=xi-b/a活化边表中需要存放的信息:x:当前扫描线与边的交点dx=-b/a:从当前扫描线到下一条扫描线之间的x增量ymax:边所交的最高扫描线增加哪一条边呢?01为了方便边的活化链表的更新,建立另一个表-边表,存放在该扫描线第一次出现的边。02存放的信息:03x:扫描线与该边的初始交点04dx:x的增量05ymax:该边的最大y值06数据结构与实现步骤算法中采用较灵活的数据结构。它由边的分类表ET(EdgeTable)和活化边表AEL(ActiveEdgeList)两部分组成。表结构ET和AEL中的基本元素为多边形的边。边的结构由以下四个域组成:ymax边的上端点的y坐标;x在ET中表示边的下端点的x坐标,在AEL中则表示边与扫描线的交点的坐标;Δx边的斜率的倒数;next指向下一条边的指针。数据结构与实现步骤0102边的分类表ET是按边的下端点的y坐标对非水平边进行分类的指针数组。下端点的y坐标的值等于i的边归入第i类。有多少条扫描线,就设多少类。同一类中,各边按x值(x值相等时,按Δx的值)递增的顺序排列成行。typedefstruct{intymax;floatx,deltax;Edge*nextEdge;}Edge;数据结构与实现步骤取扫描线纵坐标y的初始值为ET中非空元素的最小序号。将边的活化链表AEL设置为空。按从下到上的顺序对纵坐标值为y的扫描线(当前扫描线)执行下列步骤,直到边的分类表ET和边的活化链表都变成空为止。这样,当建立了边的分类表ET后,扫描线算法可按下列步骤进行:算法实现步骤将当前的扫描线的纵坐标值y累加1,即y:=y+1。04将边的活化链表AEL剩下的每一条边的x域累加Δx,即x:=x+Δx。05如边分类表ET中的第y类元素非空,则将属于该类的所有边从ET中取出并插入边的活化链表中,AEL中的各边按照x值(当x值相等时,按Δx值)递增方向排序。01将边的活化链表AEL中满足y=ymax的边删去。03若相对于当前扫描线,边的活化链表AEL非空,则将AEL中的边两两依次配对,即1,2边为一对,3,4边为一对,依次类推。每一对边与当前扫描线的交点所构成的区段位于多边形内,依次对这些区段上的点(象素)按多边形属性着色。02算法实现步骤1特点:算法效率比逐点填充法高很多。2缺点:对各种表的维持和排序开销太大,适合软件实现而不适合硬件实现。扫描线算法问题:如何修改扫描线算法,使它能处理边自交的多边形?扫描线算法求余运算:假定A为一个正整数,则正整数M的余定义为A–M,记为。计算机中

文档评论(0)

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

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

1亿VIP精品文档

相关文档