计算机图形学--_多边形填充算法.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学--_多边形填充算法

边缘填充算法的实现 对多边形P的每一非水平边(i=0,1,…,n)上的各像素 做向右求反运算即可 0 1 2 3 4 1 2 2 3 3 4 3 4 0 边缘填充算法分析 优点: 最适合于有帧缓存的显示器 可按任意顺序处理多边形的边 仅访问与该边有交点的扫描线上右方的像素,算法简单 缺点: 对复杂图形,每一像素可能被访问多次,输入/输出量大 图形输出不能与扫描同步进行,只有全部画完才能打印 4.3.4 栅栏填充算法 此算法是为了减少边缘算法访问像素的次数而提出的 栅栏: 是一条与扫描线垂直的直线,栅栏的位置通常取过多边形顶点,能把多边形分为左右两半 栅栏填充的基本思想: 对于每个扫描线与多边形边的交点,就将交点与栅栏之间的像素取补. 若交点位于栅栏左边,则将交点之右,栅栏之左的所有像素取补 若交点位于栅栏右边,则将交点之左,栅栏之右的所有像素取补 栅栏填充的具体实现: 0 1 2 3 4 栅栏线 1 2 栅栏线 3 4 栅栏线 2 3 栅栏线 4 栅栏线 0 边界标志法: 先画边界后填色,使对帧缓冲器中的每个元素的赋值次数不超过2次。 基本思想是:先用一种特殊的颜色在帧缓冲器中将多边形的边界(水平边的部分边界除外)勾画出来。然后再采用和扫描线算法类似的方法将位于多边形内的各个区段着上所需的颜色 图边界标志算法的运行过程 4.3.5 边界标志算法 边界标志法具体实现 图边界标志算法的运行过程 步骤1:以值为boundary-color 的特殊颜色勾画多边形P的边界。设多边形顶点为Pi= (xi, yi),0≤i≤n, xi, yi均为整数;置Pn+1=P0。每一条扫描线上着上这种特殊颜色的点的个数必定是偶数(包括零)。 步骤2:设interior_point 是一布尔变量。对每一条扫描线从左到右进行搜索,如果当前是像素位于多边形P内,则interior_point=true,需要填上值为polygon_color的颜色;否则该像素在多边形P外,需要填上值为background_color的颜色 边界标志算法实例 X X X X X X X X X X X X P2(8,5) Y=2 Y=3 X X X X X X Y=1 P0(1,4) P1(1,10) P3(14,8) P4(14,2) P5(11,0) P6(6,0) X X X X Х X X Х Y=4 Y=5 Y=6 Y=7 Y=8 Y=9 Y=10 算法实现 int i=0; double x,y; double dy,dx; int ymin, ymax; for(i=0;i=n;i++){ dy = y [i+1] - y [i]; if (dy!=0){ dx = (x [i+1] - x [i]) / dy; if (dy 0) x = x [i]; else x = x [i+1]; if (y[i] = y [i+1]){//获得多边形边的端点 ymin = y [i+1]; ymax = y [i]; } else{ ymin = y [i]; ymax = y [i+1]; } for(y = ymin ; y = ymax-1; y++){ x = x + dx; COLORREF k = RGB(0,0,255), n; n = dc-GetPixel(x,y); if (k == n) dc-SetPixel(x+1,y,RGB(0,0,255)); / /标志边界并处理奇点 else dc-SetPixel(x,y,RGB(0,0,255)); } } } //maxx、maxy、minx、miny是获得的多边形最小矩形包围盒边界值 double x1, y1; for(y1 = miny - 1 ; y1= maxy - 1;y1++) { in_flag = 0;//多边形内部标志变量 for( x1 = minx - 1;x1=maxx - 1;x1++) { COLORREF l,m; l = dc-GetPixel(x1,y1); m = RGB(0,0,255);//多边形边界颜色 if (l == m) { if (in_flag == 0) in_flag = 1; else i

文档评论(0)

2017meng + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档