《图形学》实验三:DDA算法画直线

开发环境:

VC++6.0,OpenGL

实验内容:

使用DDA算法画直线。

实验结果:

代码:

 1 #include <gl/glut.h>
 2 #include <math.h>
 3 
 4 #define WIDTH    500        //窗口宽度
 5 #define HEIGHT    500        //窗口高度
 6 
 7 #define DRAWLINE1 DDALine(100,200,200,100);    //画直线
 8 #define DRAWLINE2 DDALine(200,100,450,400);    //画直线
 9 
10 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")        //取消控制台
11 
12 void Init()    //初始化
13 {
14     glClearColor(1.0f,1.0f,1.0f,1.0f);    //设置背景颜色,完全不透明
15     glColor3f(1.0f,0.0f,0.0f);    //设置画笔颜色
16 
17     glMatrixMode(GL_PROJECTION);            //设置投影
18     gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT);    //设置投影区域
19 }
20 
21 void DDALine(int x0,int y0,int x1,int y1)    //DDA算法画线
22 {
23     int dx,dy,eps1,i;
24     float x,y,xIncre,yIncre;
25     dx = x1-x0;
26     dy = y1-y0;
27     x = x0,y = y0;
28     if(abs(dx)>abs(dy))
29         eps1 = abs(dx);
30     else 
31         eps1 = abs(dy);
32     xIncre = (float)dx / float(eps1);
33     yIncre = (float)dy / float(eps1);
34     for(i=0;i<=eps1;i++){
35         glBegin(GL_POINTS);
36         glVertex2i(int(x+0.5),int(y+0.5));
37         glEnd();
38         x+=xIncre;
39         y+=yIncre;
40     }
41 }
42 
43 void Display()    //显示函数
44 {
45     glClear(GL_COLOR_BUFFER_BIT);    //清空颜色堆栈
46 
47     DRAWLINE1
48     DRAWLINE2
49 
50     glFlush();    //清空缓冲区指令
51 }
52 
53 int main(int argc,char** argv)
54 {
55     glutInit(&argc,argv);
56     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    //初始化显示模式
57     glutInitWindowSize(WIDTH,HEIGHT);    //设置窗口尺寸
58     glutInitWindowPosition(200,100);    //设置窗口位置
59     glutCreateWindow("画直线");    //创建窗口
60 
61     glutDisplayFunc(Display);    //注册显示函数
62     Init();        //初始化
63     glutMainLoop();    //进入程序循环
64     return 0;
65 }

 

Freecode : www.cnblogs.com/yym2013

 

实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及bresenham算法的基本原理; 2. 掌握以上算法生成直线段的基本过程; 3. 通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、 复习有关算法的基本原理,明确实验目的和要求; 2、 依据算法思想,绘制程序流程图; 3、 设计程序界面,要求操作方便; 4、 用C/C++语言编写源程序并调试、执行; 5、 分析实验结果 6、 对程序设计过程中出现的问题进行分析与总结; 7、 打印源程序或把源程序以文件的形式提交; 8、 按格式要求完成实验报告。 实验报告要求: 1、 各种算法的基本原理; 2、 各算法的流程图 3、 实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、 实验总结(含问题分析及解决方法) 实验2 圆的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、 通过实验,进一步理解和掌握中点bresenham算法的基本原理; 2、 掌握以上算法生成圆和圆弧的基本过程; 3、 掌握在C/C++环境下完成用中点bresenham算法圆或圆弧的绘制方法。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现圆或圆弧的绘制。 实验步骤 1. 复习有关圆的生成算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(注意圆弧生成时的输入条件); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行; 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 算法的流程图 3. 实验结果及分析(比较圆与圆弧生成算法的不同) 4. 实验总结(含问题分析及解决方法) 实验3 多边形的区域填充 学时:2 实验类型:设计性 实验类别:专业实验 实验目的 1. 通过实验,进一步理解和掌握几种常用多边形填充算法的基本原理 2. 掌握多边形区域填充算法的基本过程 3. 掌握在C/C++环境下用多边形填充算法编程实现指定多边形的填充。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用种子填充算法和扫描线填充算法等任意两种算法实现指定多边形的区域填充。 实验步骤 1. 复习有关算法,明确实验目的和要求; 2. 依据算法思想,绘制程序流程图(指定填充多边形); 3. 设计程序界面,要求操作方便; 4. 用C/C++语言编写源程序并调试、执行(最好能用动显示填充过程); 5. 分析实验结果 6. 对程序设计过程中出现的问题进行分析与总结; 7. 打印源程序或把源程序以文件的形式提交; 8. 按格式要求完成实验报告。 实验报告要求: 1. 分析算法的工作原理; 2. 算法的流程图 3. 实验结果及分析(比较两种算法的不同) 4. 实验总结(含问题分析及解决方法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值