第一范文网 - 专业文章范例文档资料分享平台

计算机图形学实验一 实验环境的熟悉、像素点的生成 

来源:用户分享 时间:2025/8/15 0:42:42 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

实验一 实验环境的熟悉、像素点的生成

及简单动画的实现

班级 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

计算机图形学实验一 实验环境的熟悉、像素点的生成 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4s7rv50xxu20sz53251v_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top