数计学院课程设计报告册编程类.docx
- 文档编号:15843919
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:13
- 大小:30.81KB
数计学院课程设计报告册编程类.docx
《数计学院课程设计报告册编程类.docx》由会员分享,可在线阅读,更多相关《数计学院课程设计报告册编程类.docx(13页珍藏版)》请在冰点文库上搜索。
数计学院课程设计报告册编程类
2010~2011学年度第一学期
赣南师范学院数学与计算机科学学院
计算机图形学课程设计报告册
课程设计名称:
二维图形演示系统的设计与实现
专业:
信息与计算科学
班级:
07信计本班
学号:
070704024
姓名:
刘广华
指导老师:
刘洋老师
课程设计任务一览表
序号
课程设计任务名称
设计专题任务描述(可附页)
1
设计思想
本程序是为了实现计算机图形学中的二维图像生成而设计的。
本程序采用模块调用的方式而设计,利用主函数调用各种二维图像生成的子函数,实现特定的目的。
2
程序的设计
在这个程序中,分别有直线生成,曲线生成,平移变换,比例变换,对称变换,区域填充和图像裁剪七个功能。
3
具体程序的实现
见附录源代码
4
界面设计
这里可以选择7种绘图操作。
分别是1直线生成、2曲线生成、3平移变换、4比例变换、5对称变换、6区域填充和7二维图像裁剪,以及0退出操作。
我们可以选择相应操作的数字来实现进入对应的模式。
5
调试情况
6
程序的分析与评价
程序由几个简单小程序综合而成,用c写的一个程序,难度不大。
指导用书:
孙家广计算机图形学清华大学出版社,1998
课程设计报告
设计项目
编号
12
名称
二维图形演示系统的设计与实现
主要
仪器
设备
计算机
附属
设备
U盘
主要
使用
软件
Win—Tc
起止时间
2010年9月21日—11月18日
同组人
刘根
课程设计任务书
1.问题的描述与分析
2.程序的设计
3.具体程序的实现
4.界面设计
5.调试情况
6.程序的分析与评价
课程设计报告
附录程序源代码:
#include"stdio.h"
#include"math.h"
#include"graphics.h"
#include"stdlib.h"
#include"conio.h"
#definefnx(x)(x20+x*s1)
#definefny(y)(MAXY-y20-y*s1)
#definef(x)exp(-x*x)
#definefpx(x)x+x0
#definefpy(y)y0-y
#definefdx(x)x0-x
#definefdy(y)y+y0
intdriver=DETECT,mode,x20,y20,MAXX,MAXY;
intxl,yb,xr,yt,x0,y0,a,b,c,d,ch,mx,my;
floats1;
ddaline(x1,y1,x2,y2)/***画线函数的DDA方法***/
{
inti1;
floatx,y,increx,increy,length;
if(abs(x2-x1)>abs(y2-y1))
length=abs(x2-x1);
else
length=abs(y2-y1);
increx=(x2-x1)/length;
increy=(y2-y1)/length;
x=x1;y=y1;
for(i1=1;i1 { putpixel((int)(x+0.5),(int)(y+0.5),YELLOW); x=x+increx; y=y+increy; } } drawline()/***画线的函数***/ { inta,b,c,d; intdriver=DETECT,mode; printf("Input(x1,y1)and(x2,y2)! \n"); scanf("%d%d%d%d",&a,&b,&c,&d); initgraph(&driver,&mode,"c: \\tc"); ddaline(a,b,c,d);/***调用DDA方法***/ getch(); clearviewport(); closegraph(); } pingyi()/***平移函数***/ { intxl,yb,xr,yt,driver=DETECT,mode,dx,dy; intx0,y0; printf("InputOrgin \n"); scanf("%d%d",&x0,&y0); printf("Inputleft(xl,yb)andright(xr,yt): \n"); scanf("%d%d%d%d",&xl,&yb,&xr,&yt); printf("Inputdxanddy: \n"); scanf("%d%d",&dx,&dy); initgraph(&driver,&mode,"c: \\tc"); setcolor(YELLOW); orgin(x0,y0); xl=fpx(xl);xr=fpx(xr); yb=fpy(yb);yt=fpy(yt); line(xl,yb,xr,yb);line(xl,yb,xl,yt);line(xr,yt,xr,yb);line(xl,yt,xr,yt); getch(); xl=xl+dx;xr=xr+dx; yb=yb-dy;yt=yt-dy; line(xl,yb,xr,yb);line(xl,yb,xl,yt);line(xr,yt,xr,yb);line(xl,yt,xr,yt); getch(); closegraph(); } voidsetup(void) { intdriver,mode; driver=DETECT; initgraph(&driver,&mode,"c: \\tc"); MAXX=getmaxx();MAXY=getmaxy(); printf("InputOrgin x0,y0\t"); scanf("%d%d",&x20,&y20); printf("InputMultiple: "); scanf("%f",&s1); setviewport(0,0,MAXX,MAXY,1); } quxian()/***绘制曲线的函数***/ { intxs,ys; floatx,y,x1,y1,x2,y2,dx,i; setup(); printf("Inputx1,x2anddx: "); scanf("%f%f%f",&x1,&x2,&dx); clearviewport(); setcolor(YELLOW); xs=fnx(x1);ys=fny(0);moveto(xs-10,ys); xs=fnx(x2);lineto(xs+10,ys); xs=fnx(0);ys=fny (2);moveto(xs,ys); ys=fny(0);lineto(xs,ys); x=x1;y=f(x);xs=fnx(x);ys=fny(y);moveto(xs,ys); for(i=x1;i { x+=dx;y=f(x);xs=fnx(x); ys=fny(y);lineto(xs,ys); moveto(xs,ys); } getch(); clearviewport(); restorecrtmode(); closegraph(); } bili()/***比例变形的函数***/ { intxl,yb,xr,yt,driver=DETECT,mode; intx0,y0,a,b,c,d; printf("InputOrgin \n"); scanf("%d%d",&x0,&y0); printf("Inputleft(xl,yb)andright(xr,yt): \n"); scanf("%d%d%d%d",&xl,&yb,&xr,&yt); printf("Inputbilimxandmy: \n"); scanf("%d%d",&mx,&my); initgraph(&driver,&mode,"c: \\tc"); setcolor(YELLOW); orgin(x0,y0); a=xl;b=xr;c=yb;d=yt; a=fpx(a);b=fpx(b);c=fpy(c);d=fpy(d); line(a,c,b,c);line(a,c,a,d);line(b,d,b,c);line(a,d,b,d); getch(); a=xl;b=xl+(xr-xl)*mx;c=yb;d=yb+(yt-yb)*my; a=fpx(a);b=fpx(b);c=fpy(c);d=fpy(d); line(a,c,b,c);line(a,c,a,d);line(b,d,b,c);line(a,d,b,d); getch(); closegraph(); } duix()/***关于X轴绘制对称图形***/ { a=xl;b=xr;c=yb;d=yt; a=fpx(a);b=fpx(b);c=fdy(c);d=fdy(d); line(a,c,b,c);line(a,c,a,d);line(b,d,b,c);line(a,d,b,d); getch(); } duiy()/***关于Y轴绘制对称图形***/ { a=xl;b=xr;c=yb;d=yt; a=fdx(a);b=fdx(b);c=fpy(c);d=fpy(d); line(a,c,b,c);line(a,c,a,d);line(b,d,b,c);line(a,d,b,d); getch(); } orgin(x0,y0)/***关于原点绘制对称图形***/ {line(0,y0,640,y0);line(x0,0,x0,480);} duicheng()/***对称函数***/ { printf("InputOrgin \n"); scanf("%d%d",&x0,&y0); printf("Inputleft(xl,yb)andright(xr,yt): \n"); scanf("%d%d%d%d",&xl,&yb,&xr,&yt); printf("SelectformofchangeX: 1orY: 2orOrgin: 3! \n"); scanf("%d",&ch); initgraph(&driver,&mode,"c: \\tc"); setcolor(YELLOW); orgin(x0,y0); a=xl;b=xr;c=yb;d=yt; a=fpx(a);b=fpx(b);c=fpy(c);d=fpy(d); line(a,c,b,c);line(a,c,a,d);line(b,d,b,c);line(a,d,b,d); getch(); switch(ch)/***选择对称方式***/ { case1: duix();break; case2: duiy();break; default: closegraph();printf("Youinputanerrordata! \n");break; } getch(); closegraph(); } fill()/***填充函数***/ { intxl,yb,xr,yt,driver=DETECT,mode; intx0,y0,a,b,c,d,h,w,p[2]; printf("InputOrgin \n"); scanf("%d%d",&x0,&y0); printf("Inputleft(xl,yb)andright(xr,yt): \n"); scanf("%d%d%d%d",&xl,&yb,&xr,&yt); initgraph(&driver,&mode,"c: \\tc"); setcolor(YELLOW); orgin(x0,y0); a=xl;b=xr;c=yb;d=yt; a=fpx(a);b=fpx(b); c=fpy(c);d=fpy(d); moveto(a,c); lineto(b,c);lineto(b,d);lineto(a,d);lineto(a,c); getch(); for(w=0;w<=640;w++) for(h=0;h<=480;h++) { p[0]=fpx(w);p[1]=fpy(h); if(a<=p[0]&&p[0]<=b) if(d<=p[1]&&p[1]<=c) putpixel(p[0],p[1],RED); } getch(); closegraph(); } caijian()/***裁减函数***/ { intxl,yb,xr,yt,driver=DETECT,mode; intco,a,b,c; printf("Inputthezonethatyouwanttocutoutpoints\nleft(xl,yt)andright(xr,yb): \n"); scanf("%d%d%d%d",&xl,&yt,&xr,&yb); initgraph(&driver,&mode,"c: \\tc"); setcolor(YELLOW); for(co=0;co<=400;co+=10) circle(320,240,co); getch(); c=getbkcolor(); for(a=0;a<=640;a++) for(b=0;b<=yt;b++) putpixel(a,b,c); getch(); for(a=xr;a<=640;a++) for(b=0;b<=480;b++) putpixel(a,b,c); getch(); for(a=0;a<=640;a++) for(b=yb;b<480;b++) putpixel(a,b,c); getch(); for(a=0;a<=xl;a++) for(b=0;b<=480;b++) putpixel(a,b,c); getch(); closegraph(); } pname() { } pmenu() {printf("********************************************************************************"); printf("1: line2: curve3: pingyi4: scale\n"); printf("\n5: symmetry6: fill7: jiancai0: exit\n"); printf("********************************************************************************\n"); } main() { intsel; initgraph(&driver,&mode,""); closegraph(); loop: pname(); pmenu(); printf("\nSelectthenumberofoperation! \nYourchioce: "); scanf("%d",&sel); if(sel! =0) { switch(sel) { case1: drawline();break; case2: quxian();break; case3: pingyi();break; case4: bili();break; case5: duicheng();break; case6: fill();break; case7: caijian();break; default: ;break; } gotoloop; } } (可增页) 课程设计总结表 姓名 刘广华 专业 班级 信息与计算科学 07信计本班 学 号 070704024 个 人 总 结 1.用户界面设计为“菜单”模式,使人们更加容易使用。 2.制作过程中不仅用到了的数据结构,而且用到了很多空间几何的数学知识,将我们平时学的很多知识综合到了一起,对书本上学到的知识有了进一步的认识。 3.而且对图形理论的更深入的理解。 毕竟,从理论到实践还有那么一段距离,可是当你跨过去之后,也是对理论学习的一种补充与提高。 在以后的学习中,我也将加倍地学习图形学的有关知识,以同样的方法学习其他的知识,不断地丰富自己,充实自己,提高自己的能力。 4.最后,在整个课程设计当中,我得到老师的一些指点和几个同学的热心帮助,任务才算顺利完成。 在此一并表示感谢。 学生签名: 刘广华 2010年11月18日 小组或班级评语 组长/班级签名: 年月日 指导教师评语及 成绩评定 指导教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学院 课程设计 报告 编程