第3章 基本图形生成.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文档。上传文档
查看更多
第3章 基本图形生成

当d>=0时,M在圆外,P2距离圆弧近,取P2(xi+1,yi-1) 初始点P0(0,R) 第一个中点M (xi+1,yi-0.5)与圆关系 3.2.3 中点画圆法 void MidpointCircle (int xc, int yc, int r, int color) { int x = 0, y = r, d = 1– r; WholeCircle(xc,yc,x,y,color);//显示 圆弧上八个对称点 while(x=y) { if(d<0) {d += 2 * x +3;x++;} else {d += 2 *(x – y)+ 5;x++; y – –;} WholeCircle(xc,yc,x,y,color); } } 算法实现 3.2.3 中点画圆法 void WholeCircle (int xc, int yc, int x, int y, int color) { putpixel (xc + x,yc + y,color); putpixel (xc – x,yc + y,color); putpixel (xc + x,yc – y,color); putpixel (xc – x,yc – y,color); putpixel (xc + y,yc + x,color); putpixel (xc – y,yc + x,color); putpixel (xc + y,yc – x,color); putpixel (xc – y,yc – x,color); } 算法实现 3.2.3 中点画圆法 3.2.4 Bresenham画圆算法 考虑圆心在原点,半径为r的第一个8分圆。取(0, r)为起点,按顺时针方向生成圆。如图3.6所示。从这段圆弧的任意一点出发,按顺时针方向生成圆时。在这种情况下,x每步增加1,即: y x yi yi-1 xi xi+1 y 图3.6 y的位置 xi+1=xi+1 则相应的y有二种选择: ? yi+1=yi 或 yi+1=yi-1 Bresenham画圆算法采用一个决策值来确定到底是选择yi还是yi-1。在x=xi+1位置上,用d1和d2来标识两个候选像素的y值与圆弧上理想y值的差值,则:y2=r2-(xi+1) 2 d1=yi2-y2=yi2-r2+(xi+1) 2 d2= y2- (yi-1)2= r2-(xi+1) 2- (yi-1)2 令di=d1-d2,并代入d1、d2,则有: di=2(xi+1)2+yi2+(yi-1)2-2r2 这里di就是Bresenham画圆算法的第i步决策值。如果di0,则yi+1=yi,否则yi+1=yi-1。若di=0,则可任选一个,我们约定yi+1=yi-1。 3.2.4 Bresenham画圆算法 下面来推导di的递推公式。在i+1步,di+1为: di+1=2(xi+1+1)2+yi+12+(yi+1-1)2-2r2 若di0,取右方像素,yi+1= yi,则: di+1=2(xi+1+1)2+yi2+(yi-1)2-2r2= di+4xi+6 而决策值的初值d0由x=0,y=r代入前面公式,得: d0=2(0+1)2+r2+(r-1)2-2r2=3-2r 已知xi+1=xi+1,因而得到: di+1=2(xi+1+1)2+yi+12+(yi+1-1)2-2r2 若di=0,取右下方像素,yi+1= yi-1,则: di+1=2(xi+1+1)2+(yi-1)2+(yi-1-1)2-2r2= di+4(xi-yi)+10 由此,可写出Bresenham画圆算法的C程序: 3.2.4 Bresenham画圆算法 void BresenhamCircle (int xc, int yc, int r, int color) { int x =0, y =r, d=3-2*r; while (xy) { WholeCircle(xc, yc, x, y, color); if(d0) d=d+4*x+6; els

文档评论(0)

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

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档