计 算 机 图 形 学 姓名: 学号: 课 程 实 验 报 告 目 录
实验一 直线的DDA算法
一、【实验目的】
1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。
二、【实验内容】
1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。
三、【测试数据及其结果】 四、【实验源代码】
#include
{
glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); }
void DDALine(int x0,int y0,int x1,int y1) {
glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0;
if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy);
xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) {
glPointSize(3); glBegin(GL_POINTS);
glVertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre;
y+=yIncre; } }
void Display(void) {
glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }
void winReshapeFcn(GLint newWidth, GLint newHeight) {
glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight)); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight; }
int main(int argc,char*argv[]) {
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,300);