[2018年最新整理]chapter3-2.pptVIP

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[2018年最新整理]chapter3-2

2005秋 GDUT / 计算机学院 上节回顾 1 直线段的扫描转换 -DDA -Bresenham 2 圆弧的扫描转换 -中点画圆法 Bresenham算法 中点画圆法 考虑中心在原点,半径为R的第2个 八分圆,按顺时针方向。 构造函数F(x,y)=x2+y2-R2。 光栅图形学 直线段的扫描转换算法 圆弧的扫描转换算法 多边形的扫描转换与区域填充 字符 VC+OpenGL实验 3.3 多边形的扫描转换与区域填充 多边形的表示方法:顶点表示和点阵表示。 多边形的扫描转换:把多边形的顶点表示转换为点阵表示。 区域表示形式: 内点表示和边界表示 区域填充: 将区域内部按照指定颜色进行着色。 多边形分类 单连通:凸多边形、凹多边形 多连通:含内环的多边形 3.3.1 扫描线算法 基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。 算法步骤: (1) 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax)。 (2) 从y = ymin 到 y = ymax,每次用一条扫描线进行填充。 (3) 对一条扫描线填充的过程可分为四个步骤: a.求交 b.排序 c.交点配对 d.区间填色 新边表(NET) 存放在该扫描线第一次出现的边。若某边的较低端点为ymin,则该边就放在扫描线ymin的新边表中。 新边表的构造: (1)首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,则对应多边形覆盖的每一条扫描线。 (2)将每条边的信息链入与该边最小y坐标(ymin )相对应的桶处。也就是说,若某边的较低端点为ymin,则该边就放在相应的扫描线桶中。 (3)每条边的数据形成一个结点,内容包括:该扫描线与该边的初始交点x(即较低端点的x值), △x ,以及该边的最大y值ymax。 x|ymin, △x, ymax, NEXT (4)同一桶中若干条边按X|ymin由小到大排序。 活性边表(AET) 扫描线:平行于x轴,纵坐标为整数的直线 活性边:与当前扫描线相交的边 AET: 按与扫描线交点x坐标增序存放的活性边链表 结点: x:当前扫描线与边的交点坐标 △x:从当前扫描线到下一条扫描线间x的增量 ymax:该边所交的最高扫描线号ymax 若当前扫描线与多边形某边交点横坐标为x,只要增加△x则得下一条扫描线与该边交点 设该边的直线方程为:ax+by+c=0 若 y = yi,x = x i; 当 y = y i+1 时, xi+1 = xi + △x 其中 △x=– b/a 为常数(实际上, △x =1/k) 扫描线6的AET 交点的取舍问题:当扫描线与多边形顶点相交时,交点的取舍问题。 解决: 当扫描线与多边形的顶点相交时, 若共享顶点的两条边分别落在扫描线的两边,交点只算一个; 若共享顶点的两条边在扫描线的同一边,这时交点作为零个或两个。 算法 void polyfill(多边形 polygon, int color){ 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 结点,把y max i 结点x值增?x; 若允许多边形的边自相交,则用冒泡排序法对AET表重新排序; } } 边界标志算法 帧缓冲器中对多边形的每条边进行直线扫描转换,亦即对多边形边界所经过的象素打上标志。 然后再采用和扫描线算法类似的方法将位于多边形内的各个区段着上所需颜色。 使用一个布尔量inside来指示当前点是否在多边形内的状态。 算法过程 void edgemark_fill (多边形 polygon, int color){ 对多边形polydef 每条边进行直线扫描转换; inside = FALSE; for 每条与多边形polygon相交的扫描线 y for 扫描线上每个象素 x { if 象素 x 被打上边标志 inside = !inside; if inside != FALSE drawpixel (x, y, color); else

文档评论(0)

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

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

1亿VIP精品文档

相关文档