第2章第2节圆弧绘制.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文档。上传文档
查看更多
构造函数:F(x, y)=x2+y2-R2 对于圆上的点,F(x, y)=0; 对于圆外的点,F(x, y)0; 对于圆内的点,F(x, y)0。 假设M是P1和P2的中点,即M=(xi+1, yi-0.5) 当F(M)0时,M在圆内,取P1 当F(M)0时,M在圆外,取P2 当F(M)=0时,M在圆上,任取一个即可,约定取P2。 void MidpointCircle1(int R) { int x,y,d; x=0;y=R;d=1-R; SetPixel(x,y); while(xy) { if(d0) { d+=2*x+3; x++; } else { d+=2*(x-y)+5; x++; y--; } SetPixel(x,y); } } 当pi≥0时,应选D为下一个象素点,即选 ,代入式(13),则可得。 当pi0时,应选H为一个象素点,即选 ,代入式(13),得。 初始判别量p1的确定 注意画圆的起始点是(0,R),即x1=0,y1=R,代入式(11),令i=1,就得到: Bresenham画圆算法也做到了只需要整数加法和乘2运算,因此有较高的效率。 区域填充方法分为两大类。 区域由多边形围成,区域由多边形的顶点序列来定义,相应的技术称为以多边形为基础的; 另一类方法是通过象素的值来定义区域,相应的技术称为以象素为基础的。 算法实际处理的大体步骤如下: 步骤1:(初始化)将算法设置的队栈置为空。将给定的种子点(x,y)压入堆栈。 步骤2:(出栈)如果堆栈为空,算法结束;否则取栈顶元素(x,y)作为种子点。 步骤3:(区段填充)从种子点(x,y)开始沿纵坐标为y的当前扫描线向左右两个方向逐个像素进行填充,其值置为newvalue,直到遇到边界为止。 步骤4:(定范围)以xl和xr分别表示在步骤3中填充的象素段两端点的横坐标。 步骤5:(进栈)分别在与当前扫描线相邻的上下两条扫描线上,从右至左确定位于区间[xl,xr]内的给定区域的象素段。如果这些象素段内的像素值为newvalue或者boundaryvalue,则转到步骤2,否则取象素段的右端点为种子点压入堆栈,再转到步骤2继续执行。 多边形扫描转换可以依据区域的一种“奇偶”性质,即一条直线与任意封闭的曲线相交时,总是从第一个交点进入内部,再从第二个交点退出,以下交替的进入退出,即奇数次进入,偶数次退出。当然可能有一些“相切”的点应特殊处理。 可以分如下三个步骤来做: 1.找出扫描线与多边形边界线的所有交点; 2.按x坐标增加顺序对交点排序; 3.在交点对之间进行填充。 计算扫描线与多边形边界线的交点: 注意到若扫描线yi与多边形边界线交点x的坐标是xi,则对下一条扫描线yi+l,它与那条边界线的交点的x坐标xi+1,可如下求出: 边表ET(Edge—Table) ET记录各条边的信息。 表中各登记项按y坐标递增排序,每一登记项下的“吊桶”按所记x坐标递增排序,“吊桶”中各项的内容依次是: 1.边的另一端点的较大的y坐标ymax。 2.与较小的y坐标对应的边的端点的x坐标xmin。 3.斜率的倒数,即1/m。 这个扫描转换算法利用了扫描线的相关性和边的相关性,因此极大地提高了效率。这里扫描线相关性指在一条扫描线上,相邻的象素只有通过边界线时才能从内部变到外部或者从外部变到内部,边的相关性指对多边形的每一条边,相邻的扫描线只有在通过线段的端点时才会改变与边的相交情形。这个算法可以高效率地完成对单个多边形的扫描转换,算法采用的平面扫描思想,在处理许多图形问题时都可以应用。 多边形的扫描转换与区域填充的比较: 在一定条件下,可以相互转换。 多边形的扫描转换将多边形的顶点表示转换成点阵表示。算法利用了各种相关性。种子填充只是改变区域的颜色,不改变区域的表示方法。算法利用了区域的连通性。 对边界的要求不同。在多边形的扫描转换中要求每一条扫描线与多边形边界的交点个数为偶数。边界不封闭是允许的。而种子填充算法的边界必须是封闭的。 种子填充算法中要求指定区域中的一点为种子点。多边形扫描转换没有这个要求。对任意多边形,要确定其内部的一点需要进行大量的计算。 作业: 3、4、8、10、11 void Boundaryfill(int x,int y,COLORREF boundaryvalue,COLORREF

文档评论(0)

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

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

1亿VIP精品文档

相关文档