计算机图形学 实现直线的生成
集 美 大 学 计 算 机 工 程 学 院
实 验 报 告
课程名称 实验名称 实验类型
计算机图形学教程 用高级语言实现直线的生成
设计型
姓名
学号
日期
11月21日
地点
成绩
教师
一、 实验目的:
1、培养学生动手编程解决实际问题的能力。 2、训练学生分析问题和调试程序的能力。
3、锻炼学生撰写科技实验论文的能力
二、实验内容:
组1:
1、从键盘输入:直线两个端点的坐标、颜色,用数值微分方法画一条从点(50,60)到点(250,160)的直线,颜色为黄色;然后删除。(必做) 2、用数值微分方法画已知如图所示的多面体,其各棱边长均相等(选做)
二、 实验要求:
1、问题分析
充分地分析和理解问题本身,弄清要求做什么,用什么算法。 1). 了解直线的扫描转换方法;
2). 掌握直线的扫描转换方法的原理及其实现方法 3).掌握直线的生成方法, 从三组实验选择一组; 4).课时:2 2、程序设计
(1)根据所采用的算法,设计数据结构,画出流程图并编程。 (2)最后准备调试程序的数据及测试方案。 3、上机调试
(1)对程序进行编译,纠正程序中可能出现的语法错误。 (2)调试前,先运行一遍程序看看究竟将会发生什么。 (3)如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。 4、整理实习报告
1)了解直线的扫描转换方法;
2)掌握直线的扫描转换方法的原理及其实现方法 3)掌握直线的生成方法;
4)课时:2
四、实验环境:
1.PC ,CPU :P4 2.0GHz以上,内存:512M ,硬盘:40GB 以上; 2.操作系统:Microsoft Windows 2000 /2003/XP; 3.软件:VC 或JAVA 等。
五、实验内容及完成情况: //采用数值微分法生成直线
#include #include #include #include //Bresenham算法
void Bresenham_Line(int x0,int y0,int x1,int y1,int color) {
int x,y,dx,dy,i; float k,e;
dx=abs(x1-x0); dy=abs(y1-y0); k=dy/dx;
e=-0.5; x=x0;y=y0; for(i=0;i
putpixel(x,y,color); x=x+1; e=e+k; if(e>=0) {
y=y+1; e=e-1; } } }
void main() {
int x0,y0,x1,y1;
printf("please enter the coordinate(eg:50,60,250,160) :\n"); //输入起点和终点坐标
scanf("%d,%d,%d,%d",&x0,&y0,&x1,&y1); int g,m;
g=VGA;m=VGAHI;
initgraph(&g,&m,"");
outtextxy(50,20,"n\n\n\n\n\n\n jisuan1013 2010810070 chengaowei"); Bresenham_Line(x0,y0,x1,y1,RED); //画线 getch();
closegraph(); }
运行结果:
六、实验总结:
通过本次实验,学会掌握了Win32 Application的典型“Hello World”程序编程的基本方法,初步了解了计算机图形学在计算机图像处理,工程制图,平面设计上面的应用,掌握了计算机绘制直线的几种算法,DDA 直线的生成算法,Bresenham 直线的生成算法的参数生成方法,并且理解和掌握了他们的优缺点,在以后的实验中会努力学习,争取把这门计算机图形学课学好。