淮 海 工 学 院 计 算 机 工 程 学 院 实验报告书 课程名: 计算机图形学 题 目: 绘制任意斜率的直线 班 级: 测绘1 2 1 学 号: ********** * 名: *** 评语: 成绩: 指导教师: 批阅时间: 年 月 日 2 一、实验目的或要求 1
掌握任意斜率直线的绘制算法
掌握直线中点Bresenham 算法的基本原理,能够用VC++实现该算法
二、 实验内容 1、掌握直线段的生成算法,并用C++实现算法,包括中点法生成 直线
2、编程实现DDA 算法、Bresenham 算法、中点画线法绘制直线段 三、实验代码 1、生成直线的DDA 算法 算法思想:一个坐标轴上以单位间隔增量,决定另一个坐标轴上最靠近线段路径的对应整数值
假定x2﹣x1 的绝对值大于y2﹣y1 的绝对值,取x 为一个象素单位长,即x 每次递增一个象素,然后利用下式计算相应的y 值:yk+1﹦yk﹢△y﹦yk﹢m·△x 对于|m|>1 的线段,可通过计算由 Y 方向的增量△y 引起的改变来生成直线: xk+1﹦xk﹢△x﹦xk﹢m·△y 生成直线的DDA 算法思想是源用初中直线的方程得出来的,而生成直线的中点算法是通过将 DDA 算法的方程式改为隐函数形式,然后通过与中点的比较确定该取的像素,绘制图线
/* DDA */ #include void linedda(int x0,int y0,int x1,int y1,int color) { int x,dy,dx,y; float m; dx=x1-x0; dy=y1-y0; m=dy/dx; y=y0; for(x=x0;x abs(y2 - y1)
abs(x2 - x1) : abs(y2 - y1); x = (float)x1; y = (float)y1; cx = (float)(x2