小型绘图系统-YK.docVIP

  • 4
  • 0
  • 约 21页
  • 2017-08-13 发布于安徽
  • 举报
实 验 报 告 课程名称 计算机图形学 实验名称 小型绘图系统 姓 名 学 号 专业班级 实验日期 2011 年 12 月 26 日 成绩 指导教师 爨莹 一、实验目的 1.熟悉计算机图形的生成算法 2.用编程的方法实现计算机的生成算法 3.巩固计算机图形学中学到的一些理论知识 二、实验环境 软件:windows7 系统 三、实验内容与步骤(可提供屏幕抓图) 1)绘制直线 (1)DDA 算法的原理 DDA算法是根据直线的微分方程来计算Δx或Δy生成直线的扫描转换算法。 在一个坐标轴上以单位间隔对线段取样, 以决定另一个坐标轴方向上最靠近理想线段的整数值。 设(x0, y0)为直线段的始点, (x1, y1)为直线段的终点, 且端点坐标均为整数, 则直线的微分方程为 设|k|≤1, 则有 yi+1=kxi+1+b=k(xi+Δx)+b=yi+kΔx 上式表明, 若Δx=1, 则当x每递增1时, y递增k。 扫描转换开始时, 取直线始点(x0, y0)作为初始坐标。 程序代码: void DDA-line(x0, y0, x1, y1, color) int x0, y0, x1, y1, color; {int x; float y, k, deltx, delty; deltx=x1-x0; delty=y1-y0; k=delty/deltx; y=y0; for(x=x0; x=x1; x++) { putpixel(x, int(y+0.5), clolor); y=y+k; } 实现截图 DDA算法绘制直线 (2)中点法 算法的原理 为了讨论的方便, 假定直线的斜率在0~1之间, 其它情况参照下述讨论进行处理。 假设直线的起点和终点分别为(x0, y0)和(x1, y1), 则直线方程为 ? F(x, y)=ax+by+c=0 其中, a=y0-y1, b=x1-x0, c=x0y1-x1y0。 对于直线上的点, F(x,y)=0; 对于直线上方的点, F(x,y)>0; 而对于直线下方的点, F(x,y)<0。 如图3.1所示, 若直线在x方向上增加一个单位, 则在y方向上的增量只能在0和1之间。 假设横坐标为xP的各像素点中最佳逼近于理想直线的像素为(xP,yP), 用实心小圆表示。 ?那么, 下一个与直线最近的像素只能是正右方的P1(xP+1,yP)或右上方的P2(xP+1, yP+1)两者之一, 用空心小圆表示。 我们用P1和P2的中点M(xP+1, yP+0.5)与理想直线的位置关系来判定。 中点画线示意图 程序 void MidPoint-Line(x0, y0, x1, y1, color) int x0, y0, x1, y1, color; { int a, b, delta1, delta2, d, x, y; a=y0-y1; b=x1-x0; d=2*a+b delta1=2*a; x=x0; y=y0; putpixel(x, y, color); while(xx1) { if(d0) { x++; y++; d+=delta2; } else { x++; d+=delta1; } putpixel(x, y, color); } } } 实现截图 (3)Bresenham算法 算法的原理 Bresenham画线算法与中点画线法有相似之处, 也是通过在每列像素中确定与理想直线最近的像素来进行直线的扫描转换的。 为了讨论的方便,不妨也假定直线的斜率

文档评论(0)

1亿VIP精品文档

相关文档