c_画直线和圆

上传人:正** 文档编号:51897578 上传时间:2018-08-17 格式:PPT 页数:20 大小:1.90MB
返回 下载 相关 举报
c_画直线和圆_第1页
第1页 / 共20页
c_画直线和圆_第2页
第2页 / 共20页
c_画直线和圆_第3页
第3页 / 共20页
c_画直线和圆_第4页
第4页 / 共20页
c_画直线和圆_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《c_画直线和圆》由会员分享,可在线阅读,更多相关《c_画直线和圆(20页珍藏版)》请在金锄头文库上搜索。

1、画直线和圆直线的扫描转换: 确定最佳逼近于该直线的一组象 素,并且按扫描线顺序,对这些象素进行写操作。三个常用算法: 数值微分法(DDA) 中点画线法 Bresenham算法。基本思想已知过端点P0 (x0, y0), P1(x1, y1)的直线段L:y=k*x+b 直线斜率为 从x的左端点x0开始,向x右端点步进。 步长=1(个象素),计算相应的y坐标y=k*x+B; 取象素点(x, round(y)作为当前点的坐标。计算yi+1= k*xi+1+B = k1*xi+B+k*x= yi+k*x 当x =1;yi+1 = yi+k 即:当x每递增1,y递增k(即直线斜率); 注意上述分析的算法

2、仅适用于k 1的情形。在这种情况下 ,x每增加1,y最多增加1。 当 k 1时,必须把x,y地位互换。例:画直线段p(0,0)-P1(5,2)x int(y+0.5) y+0.5000100.4+0.5210.8+0.5311.2+0.5421.6+0.5522.0+0.5注:网格点表示象素void DDALine(int x0,int y0,int x1,int y1,int color) int x; float dx, dy, y, k; dx, = x1-x0, dy=y1-y0; k=dy/dx, y=y0; for (x=x0; xx1, x+) drawpixel (x, int

3、(y+0.5), color); y=y+k; 基本思想当前象素点为(xp, yp) 。下一个象素点为P1或P2。 设M=(xp+1, yp+0.5),为p1与p2 之中点,Q为理想直线与x=xp+1 垂线的交点。将Q与M的y坐标进 行比较。 当M在Q的下方,则P2 应为下一个象素点; M在Q的上方,应取P1为下一点。构造判别式: d=F(M)=F(xp+1,yp+0.5)=a*(xp+1)+b*(yp+0.5)+c 其中a=y0-y1, b=x1-x0, c=x0*y1-x1*y0 (d就是M和Q的距离)当d0,M在L(Q点)上方,取右方P1为下一个象素; 当d=0,选P1或P2均可,约定取

4、P1为下一个象素;d是xp, yp的线性函数,因此可采用增量计算,提高运算效率。若当前象素处于d0情况,则取正右方象素P1(xp+1, yp);要判下一个象素位置,应计算d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a; 增量为a。即平齐选d1。若d=0, 则应取P2为下一象素,而且下一象素的判别式为第 一个象素是(0,R),判别式d的初始值为为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整 数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。使用e=d-0.25代替d;e0=1-R。MidPointCircle(int r int color) int x,y;float d;x=0; y=r; d=1.25-r;circlepoints (x,y,color); /显示圆弧上的八个对称点while(x=y)if(d0) d+=2*x+3; else d+=2*(x-y)+5; y-; x+; circlepoints (x,y,color);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号