计算机图形学课程设计.docx
- 文档编号:23758430
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:18
- 大小:65.27KB
计算机图形学课程设计.docx
《计算机图形学课程设计.docx》由会员分享,可在线阅读,更多相关《计算机图形学课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
计算机图形学课程设计
计算机图形学课程设计
姓名:
学号:
指导老师:
系别:
专业班级:
计算机图形学课程设计任务书
设计
题目
转动钟表
设计内容及要求
内容:
在屏幕上设计一个可以转动的“天王”牌钟表,钟表的秒针、分针和时针转动的时间与标准时间一致。
要求:
图中的直线、圆采用直线和圆的生成算法实现,钟表中的秒针、分针和时针能够转动。
设计环境:
程序在WIN-TC环境下编译、运行,然后生成转动钟表的图形界面
实现目标:
通过运用C语言编程知识,编写一个在桌面可以转动的“天王”牌钟表。
图形中的直线和圆弧曲线采用逐点比较法算法实现,钟表中的各指针转动时的坐标函数用三角函数表示,秒针、分针、时针每次转动一下的时间分别为一秒、一分和一小时,表针转动过后会自动消除痕迹。
计算机图形学课程设计教师评阅成绩表
系名称:
信息科学与工程系
学号
姓名
专业
计算机科学与技术
指导教师
教师评阅平均得分
设计题目
转动钟表
指导教师评语及得分
指导教
师评语
评分项
目分值
指导教师对课程设计评分
制定题目、撰写任务书15
调查研究查阅整理资料10
学习态度与规范要求10
数据处理、文字表达10
论文(设计、创作)质量和创新意识
55
合计
100
得分
指导教
师签名
此表由教师填写
计算机图形学课程设计承诺书
设计题目
转动钟表
姓名
所学专业
计算机科学与技术
学号
完成时间
2012年6月8日
指导教
师姓名
承诺内容:
1.本设计是学生在指导教师的指导下独立完成的,没有抄袭、剽窃他人成果,没有请人代做,若在论文(设计、创作)的各种检查、评比中被发现有以上行为,愿按学校有关规定接受处理,并承担相应的法律责任。
备注:
学生签名:
指导教师签名:
2012年月日2012年月日
摘要
日常生活中,我们的身边可以看见各种各样的钟表,随着计算机的普及和计算机科学的飞速发展,人们开始越来越多的利用计算机来解决实际问题,开发一个易于查看的时钟有很大的现实意义。
同时,设计的时钟会听到喀哒声,程序与生活紧密结合,具体直观,开发应用简单。
利用C语言编辑源程序,再进行编译链接生成可执行文件,运行时可以查看时间,听到喀哒声,具体直观,方便了生活。
关键词:
计算机图形学WIN-TC钟表逐点比较法
目录
第1章概述
1.1设计概要
1.2系统环境
第2章总体设计
第3章功能实现
3.1程序运行结果分析
3.2程序运行结果截图
第4章设计总结
第1章概述
1.1设计概述
程序设计是一种技术,也是一项工程。
程序设计语言是程序设计的工具。
一种程序设计语言凝聚了具有时代特征的程序设计理念和方法。
本程序利用
C语言中的图形处理函数完成时间的模拟显示。
用C语言编程,设计一个时钟,
掌握用逐点比较法算法画直线和圆,画圆弧函数声Bcircle(),背景设置
函数setbkcolor();坐标函数x=a*cos(b*c*pi/180-pi/2)+300,
y=a*sin(b*c*pi/180-pi/2)+240;音函数sound()和系统时间函数
gettime()。
1.2系统环境
主体程序采用C语言编写,程序在WIN-TC环境下编译和运行。
第2章总体设计
(1)首先定义主函数voidplot_circle_points(intxc,intyc,intx,
inty,intc);
(2)用逐点比较法算法画圆:
从始点(x1,y1)开始画起,首先向圆内走
一步,也就是先向-x方向走一步,然后与所要画的圆弧进行比较;接着判
断结果,落在园内时向y方向走一步,依此类推,一直到达圆外为止;当
判断结果落在园外时,向-x方向走一步,直到再次到达圆内为止;当画到
终点(x2,y2)时,终止比较,AB圆弧绘制结束。
voidBcircle(intxc,intyc,intradius,intc)
{intx,y,p;
x=0;
y=radius;
……
……
程序主要运用于表盘的生成;
(3)用逐点比较法算法画直线:
设坐标系中有A(x1,y1),B(x2,y2),
令Fm=y2*x1-y1*x2,推广一般式Fi=x1*yi-y1*xi,然后判断Fi与0的
关系:
若》0,向+x方向走一步;若《0,向+y方向走一步,依此走下
去便可以画出最终直线。
voidBline(intx1,inty1,intx2,inty2,intc)
{
intx,y,tmp;
intdx,dy,d;
floatk;
……
……
程序主要运用于表针的生成以及表盘上分格短直线的生成;
(4)用Bcircle()函数画表盘,设置表针转动时的坐标:
x1=200*cos(i*6*pi/180)+300;
y1=200*sin(i*6*pi/180)+240;
x2=(200-l)*cos(i*6*pi/180)+300;
y2=(200-l)*sin(i*6*pi/180)+240;
(5)在表盘中央添加“天王”二字和一小圆,运用outtextxy()函
数在表盘上、下、左、右四个方向添加数字“12”、“6”、“9”和“3”;
(6)运用gettime(t)函数将计算机时间写入结构体t中,同时画三
根长度不一的表针;
(7)运用d()函数清楚表针转动过后的痕迹,同时用sound函数设
置表针转动时的滴答声;
(8)退出图形系统,返回文本模式:
getch();
closegraph();
第3章功能实现
3.1程序运行结果分析
程序在WIN-TC环境下编译生成图形界面,图形界面中的直线和圆弧
都采用逐点比较法算法实现,图形界面为转动的钟表,背景颜色为浅蓝
色,由setbkcolor()函数实现;表盘为以(300,240)为圆心,以20、
200、203和206为半径的圆,由画圆函数Bcircle()函数实现;表盘中
央有“天王”二字和一小圆,由简单的画图函数生成;表盘上有三根长度
不一、颜色不同的的表针,它们转动的位置坐标由三角函数控制x=a*cos
(b*c*pi/180-pi/2)+300,y=a*sin(b*c*pi/180-pi/2)+240;表针每次走
过后,痕迹会由d()函数消除,表针转动时有转动声音,由sound()函
数控制,并且声音有延迟时间,由delay()函数控制。
3.2程序运行结果截
第4章设计总结
历时四周终于把课程设计做出来了,通过这次课程设计,加强了我的动手、思考和解决问题的能力,同时也让我对运用C语言编写计算机图形学程序有新的兴趣。
而且在设计过程中,经常会遇到这样那样的问题,通过自己查阅资料,找同学和老师帮助,问题最终得到了解决。
由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个函数的功能,而且考试内容有限,所以在这次课程设计过程中,我在书本上了解了很多函数的功能,并且对于其在程序中的使用有了更多的认识。
平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了,而且还可以记住很多东西。
比如一些程序功能的实现,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个函数印象深刻。
我认为认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
所以这四个星期的课程设计对我的作用是非常大的。
我觉得程序设计需要耐心和细心,有时候一个标点的错误,如果你不注意,可能会导致程序无法运行,所以写程序的时候一定要认真、细心。
由于时间有限,自己的水平也有限,尽管查阅了许多资料,但依然感觉自己的课程设计有许多不足之处,比如程序图形界面简单等。
本想加入一些其他功能,但加入后总是出错,无法完成编译,所以最后只好放弃,但是课下的时候我会接着把这些功能加进去,完成最终的报告。
总之此次课程设计,学到了很多东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,这也为我在今后的其他课程设计打下了良好的基础,在此,感谢孟老师的细心指导,也同样谢谢其他各组同学的无私帮助!
参考文献
[1]王汝传.黄海平.计算机图形学教程[M].北京:
人民邮电出版社,2009.
[2]杨路明.C语言程序设计教程[M].北京:
北京邮电大学出版社,2005.
[3]姜灵芝.C语言课程设计案例精编[M].北京:
清华大学出版社.2008.
[4]田祥宏.C语言程序设计[M].西安:
西安电子科技大学出版社.2007.
附录
程序代码:
#include
#include
#include
#definepi3.1415926
#defineX(a,b,c)x=a*cos(b*c*pi/180-pi/2)+300;
#defineY(a,b,c)y=a*sin(b*c*pi/180-pi/2)+240;
#defined(a,b,c,d)X(a,b,c);Y(a,b,c);Bline(300,240,x,y,d)
voidplot_circle_points(intxc,intyc,intx,inty,intc)
{
putpixel(xc+x,yc+y,c);
putpixel(xc-x,yc+y,c);
putpixel(xc+x,yc-y,c);
putpixel(xc-x,yc-y,c);
putpixel(xc+y,yc+x,c);
putpixel(xc-y,yc+x,c);
putpixel(xc+y,yc-x,c);
putpixel(xc-y,yc-x,c);
}
voidBcircle(intxc,intyc,intradius,intc)
{
intx,y,p;
x=0;
y=radius;
p=3-2*radius;
while(x plot_circle_points(xc,yc,x,y,c); if(p<0)p=p+4*x+6; else{ p=p+4*(x-y)+10; y-=1; } x+=1; } if(x==y) plot_circle_points(xc,yc,x,y,c); } voidBline(intx1,inty1,intx2,inty2,intc) { intx,y,tmp; intdx,dy,d; floatk; if(0==(x1-x2)) { x=x1; if(y1>y2) {tmp=y1;y1=y2;y2=tmp;} for(y=y1;y { putpixel(x,y,abs(getpixel(x,y)-c)); } return; } k=(float)(y2-y1)/(float)(x2-x1); if(k>1.0) { tmp=x1;x1=y1;y1=tmp; tmp=x2;x2=y2;y2=tmp; } elseif(k>0) {} elseif(k<-1.0) { x1=-x1; x2=-x2; tmp=x1;x1=y1;y1=tmp; tmp=x2;x2=y2;y2=tmp; } elseif(k<0) { y1=-y1; y2=-y2; } else { y=y1; if(x1>x2) {tmp=x1;x1=x2;x2=tmp;} for(x=x1;x<=x2;x++) { putpixel(x,y,abs(getpixel(x,y)-c)); } return; } if(x1>x2) { tmp=x1;x1=x2;x2=tmp; tmp=y1;y1=y2;y2=tmp; } dx=x2-x1; dy=y2-y1; d=2*dy-dx; x=x1;y=y1; for(;x { if(k>1) {putpixel(y,x,abs(getpixel(y,x)-c));} elseif(k>0) {putpixel(x,y,abs(getpixel(x,y)-c));} elseif(k<-1) {putpixel(-y,x,abs(getpixel(-y,x)-c));} elseif(k<0) {putpixel(x,-y,abs(getpixel(x,-y)-c));} else{} if(d>=0) { y++; d+=2*dy-2*dx; } else { d+=2*dy; } } } voidinit() { inti,l,x1,x2,y1,y2; setbkcolor(3); Bcircle(300,240,20,15); Bcircle(300,240,200,15); Bcircle(300,240,203,15); Bcircle(300,240,206,15); Bcircle(300,240,5,15); for(i=0;i<60;i++) { if(i%5==0)l=15; elsel=5; x1=200*cos(i*6*pi/180)+300; y1=200*sin(i*6*pi/180)+240; x2=(200-l)*cos(i*6*pi/180)+300; y2=(200-l)*sin(i*6*pi/180)+240; Bline(x1,y1,x2,y2,15); } } voidmain() { intx,y,j; intgd,gm; unsignedcharh,m,s; structtimet[1]; detectgraph(&gd,&gm); initgraph(&gd,&gm,""); setcolor (2); cleardevice(); moveto(250,190); linerel(50,0); moveto(275,190); linerel(0,25); moveto(250,215); linerel(50,0); moveto(275,215); linerel(-25,25); moveto(275,215); linerel(25,25); setcolor(4); moveto(300,240); linerel(50,0); x=getx(); y=gety(); moveto(x,y+25); linerel(-50,0); moverel(0,25); linerel(50,0); moverel(-25,0); linerel(0,-50); setcolor(5); circle(330,210,30); setcolor(6); for(j=0;j<=6;j++) { outtextxy(300,80,"12"); outtextxy(300,390,"6"); outtextxy(140,230,"9"); outtextxy(460,230,"3"); } init(); gettime(t); h=t[0].ti_hour; m=t[0].ti_min; s=t[0].ti_sec; d(150,h,30,7); d(170,m,6,14); d(190,s,6,4); while(! kbhit()) { while(t[0].ti_sec==s) gettime(t); sound(400); delay(70); sound(200); delay(30); nosound(); d(190,s,6,4); s=t[0].ti_sec; d(190,s,6,4); if(t[0].ti_min! =m) { d(170,m,6,14); m=t[0].ti_min; d(170,m,6,14); } if(t[0].ti_hour! =h) { d(150,h,30,7); h=t[0].ti_hour; d(150,h,30,7); sound(1000); delay(240); nosound(); delay(140); sound(2000); delay(240); nosound(); } } getch(); closegraph(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 课程设计