实验一 实验环境的熟悉、像素点的生成
及简单动画的实现
班级 08信计 学号 60姓名 分数
一、实验目的和要求:
1.掌握与图形学相关的基本的C语言编程方法 2.了解c语言的图形函数
3.利用c语言图形函数绘图、设计动画 4.了解像素点的生成,掌握基本绘图函数 5.编写简单的动画程序并对其实现
二、实验内容:
1、应用图形模式控制函数、基本绘图函数、.图形屏幕操作函数编程,进行对图形的绘制。
2、应用简单动画方法简单的制造方法、动画处理函数编写动画程序,使其具有动画状态。 3、 利用c语言,综合以上图形绘制方法和动画设计方法,进行图形函数绘图、设计动画 三、实验步骤 1.图形绘制函数
(1)图形模式控制函数
initgraph()函数
格式:void initgraph(*gdriver, *gmode, path); closegraph()函数 格式:closegraph()
背景色:setbkcolor(int color);
(2)基本绘图函数
putpixel(int x,int y,int color )在指定位置(x,y)处指定颜色画一个点。 getpixel(int x,int y)取得指定位置(x,y)的颜色值。 line(int x1,int y1,int x2,int y2)
从点(x1,y1)到(x2,y2)画一条线,当前位置不变。 lineto(int x,int y)
从当前位置到点(x,y)画一条直线,并把位置移动到(x,y)。 moveto(int x,int y)把当前位置移动到(x,y)。
Moverel(int dx,int dy)把当前位置移动到(x+dx,y+dy)。
circle(int x,int y,int radius)以(x,y)为圆心,radius为半径画园。 arc(int x,int y,int stangle,int endangle,int radius) 画圆弧。
ellipse(x,y,stangle,endangle,xradius,yradius)画椭圆弧。
1
rectangle(x1,y1,x2,y2)以(x1,y1)、(x2,y2)为对角点,绘制矩形。 drawpoly(n,*p);画多边形
其中n表示多边形的定点数,p为一存放多边形顶点坐标的一维数组。 getmaxx()返回当前图形模式下最大x坐标函数。
getmaxy() 返回当前图形模式最大y坐标函数。
getx()返回当前图形模式下当前位置的x坐标(水平像素坐标)。 gety()返回当前图形模式下当前位置的y坐标(垂直像素坐标)。
setlinestyle(int linestyle,unsigned upattern,int thickness)设置当前画线的宽度和类型.linestyle:0实线;1点画线;2中心线;3破折线,4用户自定义的线型,thickness:1一个像素宽;3三个像素宽。
setfillstyle(int pattern,int color)设置填充模式和颜色.pattern取值为0-12。 bar(int left,int top,int right,int bottom)画一条矩形边,
其左上角为(left,top),右下角为(right,bottom),用当前填充模式及颜色填充。 bar3d(int left,int top,int right,int bottom,int depth,int topflag)画三维矩形条
该条用当前填充模式和填充色彩填充条左上角由(left,top)给出,条的右下角(right,bottom)给出,深度由depth给出,topflag不为零,放一个顶盖。 pieslice(int x,int y,int stange,int endangle,int radius)以(x,y)为圆心,画扇形
(3)图形屏幕操作函数
setviewport() 设置图形视口函数。
clearviewport()清除图形视口函数。
cleardevice() 清除屏幕函数,并且将当前位置移到屏幕原点。 图形模式下文本的输出函数:
outtext(char *str)在当前位置处输出字符
outtextxy(int x,int y,char *str)在(x,y)处输出字符. 字符的式样由函数settextstyle(1,0,3)设置 settextstyle(int font,int drrection,int charsize);
2.动画设计步骤
(1)绘制初始图形。
(2)调用imagesize函数计算图像区域的字节数。 (3)调用malloc函数,按已经算得字节数申请内存块。
(4)调用putimage函数,将已经绘制的图形存入已经分配的内存块中。 (5)调用putimage函数,以异或方式将屏幕上的原图像擦除。
(6)调用putimage函数,以复制方式将内存块中图像传输到屏幕的新坐标点上。 (7)重复3、4、5、6步骤。
3.应用以上函数,绘制动画图形
动画图形程序 #include\#include\#include\#include\#include\#include\#define TRUE 1
2
#define FALSE 0
#define IMAGE_SIZE 10 void draw_picture(void); void move_picture(void); void draw_image(int x,int y); void putpixel_stars(void);
char title[]=\char *move=\void *pt_addr;
int x,y,maxx,maxy,midx,midy; void main(void) {
int driver=VGA; int mode=VGAHI; int errorcode;
initgraph(&driver,&mode,\ errorcode=graphresult(); if(errorcode!=0)
{ printf(\ printf(\ getch(); exit(1); }
cleardevice();
maxx=getmaxx();maxy=getmaxy()-20; midx=maxx/2;midy=maxy/2; x=0;y=midy-25;
setbkcolor(WHITE); draw_picture(); move_picture(); free(pt_addr);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1); settextjustify(LEFT_TEXT,TOP_TEXT); restorecrtmode(); }
void draw_picture(void) {
unsigned int i,size;
setlinestyle(SOLID_LINE,0,NORM_WIDTH); setcolor(LIGHTBLUE); for(i=0;i<=14;i++) {
3
ellipse(midx,midy,0,360,108,108-8*i); ellipse(midx,midy,0,360,108-8*i,108); }
setcolor(RED);
setlinestyle(SOLID_LINE,0,THICK_WIDTH); ellipse(midx,midy,130,50,170,30); draw_image(x,y);
size=imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE); pt_addr=malloc(size);
getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE,pt_addr); putpixel_stars();
setcolor(DARKGRAY);
setlinestyle(SOLID_LINE,0,THICK_WIDTH); rectangle(0,0,maxx,maxy);
setfillstyle(SOLID_FILL,LIGHTGRAY); bar(0,getmaxy()-18,getmaxx(),getmaxy());
outtextxy(150,getmaxy()-12,\ setlinestyle(SOLID_LINE,0,NORM_WIDTH); setcolor(RED);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,6); settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(midx-70,70,title); }
void move_picture(void) {
char printmove[2]; int movex; do {
x=0;
movex=midx-200; setcolor(RED); while(x<=maxx) {
if(kbhit())break;
putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT); x=x+5;
if(*move!='\\0'&&x>movex) { *(printmove)=*(move++); *(printmove+1)='\\0';
outtextxy(movex,y+IMAGE_SIZE+100,printmove); movex+=30; }
putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT);
4
delay(50); }
putimage(0,y-IMAGE_SIZE,pt_addr,XOR_PUT); }while(!kbhit()); }
void draw_image(int x,int y) {
setcolor(GREEN); setfillstyle(1,4);
moveto(x+10,y); linerel(-3*10,2*10); moveto(x+10,y); linerel(-3*10,-2*10); moveto(x+25,y); linerel(-5*10,0); fillellipse(x+13,y,8,8); }
void putpixel_stars(void) {
int i,seed=1958;
int dotx,doty,h,w,color,maxcolor; maxcolor=getmaxcolor(); w=getmaxx(); h=getmaxy()-20; srand(seed);
for(i=0;i<5000;++i) { dotx=1+random(w-1); doty=1+random(h-1); color=random(maxcolor); putpixel(dotx,doty,color); }
srand(seed); } ??
程序的执行结果
四、实验总结
该实验运用了图形绘制函数和动画设计函数,设计出极其生动的图形程序。在这个程序中,我们所有的定氮仪及函数原型都在graphics.h中。按照这么函数的功能可以分为一下几类函数,分别是图形模式初始化函数,基本图形函数,屏幕操作函数,图形模式下的自护输出函数以及状态查询函数。在任何调用这些图形模式喜爱的功能函数的程序中,都应该在程序的说明部分。通过对程序的编辑,运行,就可以得到非常形象生动的动画。 通过对这么程序的分析与学习,使我学到了在屏幕上绘制图形之前,首先要设置好屏幕的图形模式,也就是图形模式初始化。然后才能使用一些基本的图形函数,进行调用,编写
5
程序,再使用区域填充函数进行区域填充,经过许多个步骤,编完之后应用TC软件进行调试,修改,最终才能得到想要的结果。
6
相关推荐: