p03直线.圆.椭圆生成.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文档。上传文档
查看更多
p03直线.圆.椭圆生成

第三章 直线、圆、椭圆生成算法;;本章内容;3.1直线段的扫描转换算法;3.1.1数值微分法(DDA);3.1.1数值微分(DDA)法;计算yi+1= kxi+1+b = kxi+b+k?x = yi+k?x 当?x =1; yi+1 = yi+k 即:当x每递增1,y递增k(即直线斜率); 注意上述分析的算法仅适用于?k? ≤1的情形。在这种情况下,x每增加1,y最多增加1。 当 ?k? ?1时,必须把x,y地位互换;增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。 DDA算法就是一个增量算法。;数值微分(DDA)法;数值微分(DDA)法;实现DDA画线程序;第三步:编写自定义的成员函数ddaline()程序;第四步:编写OnDraw()函数;数值微分(DDA)法;中点画线法;中点画线法;3.1.2中点画线法;;;若d0-M在直线下方-取P2; 此时再下一个象素的判别式为 d2= F(xp+2, yp+1.5) =a(xp+2)+b(yp+1.5)+c = a(xp +1)+b(yp +0.5)+c +a +b =d+a+b ; 增量为a+b ;画线从(x0, y0)开始,d的初值 d0=F(x0+1, y0+0.5)= a(x0 +1)+b(y0 +0.5)+c = F(x0, y0)+a+0.5b = a+0.5b 由于只用d 的符号作判断,为了只包含整数运算, 可以用2d代替d来摆脱小数,提高效率。 ;void Midpoint Line (int x0,int y0,int x1, int y1,int color) { int a, b, d1, d2, d, x, y; a=y0-y1, b=x1-x0, d=2*a+b; d1=2*a, d2=2* (a+b); x=x0, y=y0; drawpixel(x, y, color); while (xx1) { if (d0) {x++; y++; d+=d2; } else {x++; d+=d1;} drawpixel (x, y, color); } /* while */ } /* mid PointLine */ ;例:用中点画线法P0(0,0) P1(5,2) a=y0-y1=-2 b=x1-x0=5 d0=2a+b=1 d1=2a=-4 d2=2(a+b)=6 i xi yi d 1 0 0 1 2 1 0 -3 3 2 1 3 4 3 1 -1 5 4 2 5 ;中点画线算法;;;;;Bresenham画线算法;Bresenham画线算法;Bresenham画线算法;Bresenham画线算法;//斜率判断,斜率绝对值大于,则m为false,否则为true BOOL m = (fabs(y2-y1)=fabs(x2-x1)); //如果x1大于x2,交换坐标值 if (x1 x2) { p=x1;x1=x2;x2=p; p=y1;y1=y2;y2=p; } x = x1; y = y1; dx = x2 - x1; dy = y2 - y1; ;//斜率绝对值小于等于 if (m) { //第一种情况,y递增 if (y1 = y2) { p = (dy1) - dx; while (x = x2) { pDC-SetPixel(x,y,color); if (p 0) {x++;p=p+(dy1);} else {x++;y++;p=p+((dy-dx)1);} } } //第三种情况,y递减 else { p = dx - (dy1); while (x = x2) { pDC-SetPixel(x,y,color); if (p 0) {x++;p=p-(dy1);} else {x++;y--;p=p-((dy+dx)1);} } } ;;3.2.1直接利用圆的方程生成圆 下面先以圆心在原点、半径r为整数的圆为例,讨论圆的生成算法。 假设圆的方程为: x2 + y2 = r2 ;x2 + y2 =

文档评论(0)

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

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

1亿VIP精品文档

相关文档