C语言图形编程.doc_第1页
C语言图形编程.doc_第2页
C语言图形编程.doc_第3页
C语言图形编程.doc_第4页
C语言图形编程.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言图形编程阅读人数:3178人页数:28页otenk.内容提要:本文对C语言的图形功能做了详细的介绍,特别着重阐述了其丰富的库函数,并引申到了动画的基本设计方法。通过本文的学习,读者应该能够编制绘制基本图案的C语言程序和基本的动画程序。关键字:图形模式的初始化、图形的坐标、坐标轴的变换、关闭图形系统、背景色和作图色的设置、调色板的设置、基本图形函数引言:C语言具有强大的图形编程功能。因为它不仅有高级语言那种完成复杂处理和运算的能力,还具有汇编语言的特点。它可以直接控制显示屏幕等系统硬件。C语言具有丰富的图形函数,对图形程序和系统的开发和研制有很大的帮助。正文:bnc.wwC语言图形编程 www wbnc.kookoote.n1 本文导学.coobnc.www计算机图形学是一门研究怎样用计算机生成、处理和显示图形的学科。过去计算机主要用于科学计算和数据处理。随着计算机的速度和性能的大大提高,应用范围的不断扩大,当前的计算机已经在许多领域上帮助人们完成各种各样的工作。近年来,随着计算机图形学的兴起和发展,直观的图形界面正在成为软件设计的新潮流,将逐步取代字符界面。计算机图形学的应用可以追溯到50年代初。当时的美国麻省理工学院(MIT)研制出了计算机旋风号(Whirlwind),它带有一台可以显示图形的显示器。1962年,美国麻省理工学院(MIT)的IvanESutherland发表一篇题为“Sketchpad:一人一机通讯的图形系统”的博士论文中首次使用了“计算机图形学”这个术语,并且在论文证明交互式计算机图形学是一个可行的、有用的研究领域。从此,计算机图形学蓬勃地发展起来,新的成果不断地涌现。到了70年代,计算机图形技术的应用进入了使用化阶段,交互式图形系统在许多国家得到应用,许多关于计算机图形学的硬件被研制出来,计算机图形学得到了进一步的发展。目前,计算机图形学已经进入社会的各个领域,主要有:计算机辅助设计与制造(CAD/CAM),计算机辅助教学,科学技术及事务管理,过程控制与系统环境模拟,艺术模拟等等。C语言具有强大的图形编程功能。因为它不仅有高级语言那种完成复杂处理和运算的能力,还具有汇编语言的特点。它可以直接控制显示屏幕等系统硬件。C语言具有丰富的图形函数,对图形程序和系统的开发和研制有很大的帮助。计算机图形学的内容十分丰富,技术也比较复杂。但是无论多么复杂的图形都是由点、线、距形和圆形等组成,掌握了这些简单的图形的处理方法,再去处理复杂的图形,也就不成问题了。tenk.oobnnk.etbnc.wwwkoote.n2 图形模式的初始化在作图之前,一定要先设置显示器为图形方式才能作图。但是不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同的模式下也有不同分辨率。因此,在作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。图形驱动程序由Turbo C出版商提供,文件扩展名为.BGI。根据不同的图形适配器有不同的图形驱动程序。例如:对于EGA、VGA图形适配器就调用驱动程序EGAVGA.BGI。如表1所示是CGA、EGA、VGA图形适配器的一些参数。wwwoobnc.tenk.bnc.wwww wkoote.nncw.koobwwc.woobnenk.t 1 ooenk.tw wcw.1/28otenk.gdriver驱动器常量 驱动器数值 bnc.wwwkookoote.n图象分辨率 640*200 640*350 640*200 640*350 640*480表1 图形适配器的一些参数表示的色调gmode模式常量 模式数值C0 C1 C2 C3 C416色 16色 16色 16色 16色 自动检测显示器硬件.coobnc.www设置屏幕为图形模式,可用图形初始化函数:void far initgraph(int far *gdriver, int far *gmode, char *path);图形初始化函数中的gdriver表示图形的驱动器,gmode表示图形的模式,path是指图形驱动程序所在的目录路径。例1:使用图形初始化函数设置EGA的EGAHI图形模式。 #include #include main() int gdriver = EGA, gmode=EGAHI; /*设置EGA的EGAHI图形模式*/int errorcode;initgraph(&gdriver, &gmode, ); /*初始化图形系统*/ errorcode = graphresult(); if (errorcode != grOk) printf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); circle(100,100,50); /*画圆心为(100,100),半径为50的圆*/ getch();closegraph(); 程序输出结果如图1所示。tenk.ww wbnc.oobnnk.etbnc.wwwkoote.nwwwoobnc.tenk.bnc.wwww wkoote.nncw.koob有时不知道所用的图形显示器适配器种类,这时可以用自动探测的方法,即使用自动探测函数:void far detectgraph(int *gdriver, *gmode); 2 wwc.woobnenk.t图1ooenk.tw wcw.2/28otenk.coobn例2:自动探测图形显示器适配器种类的方法。 #include #include main() int gdriver = EGA, gmode=EGAHI; /*设置EGA的EGAHI图形模式*/int errorcode;detectgraph(&gdriver, &gmode); /*自动探测图形显示器适配器种类*/ initgraph(&gdriver, &gmode, ); /*初始化图形系统*/ errorcode = graphresult(); if (errorcode != grOk) printf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); circle(100,100,50); /*画圆心为(100,100),半径为50 的圆*/ getch();closegraph(); 程序输出结果如图2所示。bnc.wwwkookoote.ntenk.ww wbnc.wwc.woobnnk.etbnc.wwwkoote.n除了使用自动探测函数来实现自动探测外,还可以应用DETECT方法实现自动探测,即把DETECT直接赋予gdriver(gdriver=DETECT)。例3:应用DETECT方法自动探测图形显示器适配器种类。 #include #include main() int gdriver = DETECT, gmode; /*自动探测图形显示器适配器种类*/int errorcode;initgraph(&gdriver, &gmode, ); /* 初始化图形系统 */ errorcode = graphresult(); if (errorcode != grOk) printf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); circle(100,100,50); /* 画圆心为(100,100),半径为50 的圆*/ getch(); 3 wwwoobnc.tenk.图2bnc.wwwkoote.nwwc.woobnenk.tw wncw.koobooenk.tw wcw.3/28closegraph(); 程序输出结果如图3所示。otenk.bnc.wwwkookoote.n3 图形的坐标.coobn在文本方式下,屏幕被分成25、40或50行,80或40列宽(系统默认的坐标是:原点在屏幕左上角(1,1),坐标是整数,X坐标从左向右增加,Y坐标从上到下增加)。在图形方式下,屏幕被划分为像素,每个像素在屏幕上显示一个点。像素的个数取决于机器中安装的视频适配器的类型和适配器的工作和方式(系统默认的坐标是:原点在屏幕左上角(0,0),坐标为整数,X坐标从左向右增加,Y坐标从上到下增加。屏幕上的X、Y值都有一个最大值。如图4所示屏幕的坐标范围)。图片加载失败点击图片重新加载tenk.wwwbnc.图3c.wwwoobnbnc.wwkoote.n可以通过下面一个程序来获取屏幕最大的x值和y值:例4:获取屏幕最大的x值和y值。 #include #include main() int gdriver = DETECT, gmode, errorcode; int Max_x,Max_y; initgraph(&gdriver, &gmode, ); /* 初始化图形系统 */ errorcode = graphresult(); if (errorcode != grOk) printf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); 4 wwwoobnc.图4bncw wkoote.nncw.koobwwc.woobnenk.tooenk.tw wcw.4/28otenk.Max_x=getmaxx(); /*getmaxx()函数是获取当前图形状态下最大的x坐标值*/ Max_y=getmaxy(); /*getmaxy()函数是获取当前图形状态下最大的y坐标值*/ printf(The maximum value of x is %dn,Max_x); printf(The maximum value of y is %dn,Max_y); getch();closegraph(); 程序输出结果如图5所示。图片加载失败点击图片重新加载bnc.wwwkookoote.n.coobntenk.ww wbnc.4 坐标轴的变换c.wwwC语言中,在图形模式下(系统默认的坐标是:原点在屏幕左上角(0,0),坐标为整数,X坐标从左向右增加,Y坐标从上到下增加)。有时画图需要不同坐标原点,这就需要用到坐标变换。现在假设需要以屏幕上的点(origin_x,origin_y)作为新坐标系的原点,那么原来坐标系的点的坐标(before_x,before_y)与对应的新坐标系的点(later_x,later

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论