Bresenham画圆算法 课件 文献 资料.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文档。上传文档
查看更多
边界填充算法 基本思想:每一条扫描线和每条多边形的交点,将该扫描线上交点右方所有的象素取补。 算法简单,每个象素可能被访问多次,输入,输出量大。 问题:为什么多边形外部最终一定保持原来的颜色? 边界标志算法 类似于有序边表算法。 步骤: 1. 对多边形的每一条边进行扫描转换,即对多边形边界所经过的象素作一个边界标志。 2.填充。对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该扫描线上的象素。 取一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真。若点在多边形外,则inside为假。 Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反。对未打标志的点,inside不变。 区域填充 种子填充算法 区域边界上所有象素均具有某个特定值,区域内部所有象素均不取这一特定值。 一句话,区域边界上所有象素的值和内部所有象素的值必须要不一样。 四向连通:从区域上任意一点出发,可通过四个方向,即上、下、左、右移动的组合,在不越出区域的前提下,到达区域内的任意象素。 八向连通:区域内的每个象素,可以通过左、右、上、下、左上、右上、左下、右下这八个方向的移动的组合来到达。 算法的原理: 种子象素入栈,当栈非空时,执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成多边形色; (3)按左、上、右、下的顺序检查与出栈象素相邻的四个象素,若其中某个象素在边界上且未置成多边形色,则把该象素入栈。 象素入栈多次,栈要很大的空间。 沿扫描线,在扫描线与多边形的相交区间内填充。 只取一个种子象素。 扫描线填充算法 种子象素入栈;当栈非空时执行以下四步操作: 1 栈顶元素出栈; 2 沿扫描线对出栈象素的左右象素进行填充,直至遇到边界象素为止。即对每个出栈象素,对包含该象素的整个区间进行填充。 3 上述区间内最左、最右的象素分别记为xl何xr; 4 在区间[xl,xr]中检查与当前扫描线相邻的上下两条扫描线的有关象素是否全为边界或已填充的象素,若存在非边界、未填充的象素,则把每一区间的最右象素作为种子象素入栈。 多边形扫描转换和区域填充的区别 1 边界 区域填充时区域的边界不一定是多边形表示 2 出发点 (x,y) H(x+1,y) D(x+1,y-1) V(x,y-1) (0,R) H D V (x,y) 1 2 3 4 5 Figure 2 Figure 3 Figure 1 返 回 void drawcircle( r,color) int r,color; { int x, y, delt; x=0;y=r;delt=0 while(y=0){ drawpixel(x,y,color); if(delt=0){ delt = delt + 2*x + 1; x++; } else{ delt = delt -2*y + 1; y--; } } return } 习题: 1 写出使用中点法,以任意点为中心,任意半径的画整圆的程序。其中仅有整数运算,且不含乘除法。 2 写一个利用BRESENHAM算法,画任意斜率的直线段的程序。 Bresenham画圆算法 为讨论方便,仅考虑圆心在原点,半径为R的第一象限上的一段圆弧。且取(0,R)为起点,按顺时针方向绘制该1/4圆弧。 原理 : 如图1-3所示,从当前点亮象素出发,按顺时针方向生成圆时,最佳逼近该圆的下一个象素只可能为H、D、V三象素之一。H、D、V中距圆周边界距离最小者,即为所求的象素点。 算法: H、D、V三点到圆心的距离平方与圆的半径平方差,即为H、D、V到圆弧距离的一种度量: ?H = (x+1)2 + y2 - R2; ?D = (x+1)2 + (y-1)2 - R2; (式1) ?V = x2 + (y-1)2 - R2; 为了根据这些度量值可确定最佳象素点,首先,将H、D、V与理想圆弧的关系进行分类。如图3所示,存在以下五种情况: (见图3) 1)H、D、V全在圆内; 2)H在圆外,D、V在圆内

文档评论(0)

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

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

1亿VIP精品文档

相关文档