版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机图形学是一门实践性很强的课程。通过程序设计来完成图形的绘制,对深刻理解课程的内容和相关概念非常重要。 程序设计语言是进行计算机绘图的基础,现在大多数高级语言都具有基本绘图功能。 本章主要介绍用C语言进行图形程序设计的基本方法和C语言的图形功能,使大家对C语言的图形应用有一个较深刻的理解。WINTC 第三章 C语言图形程序设计基础熄酮沙聂了涂友倪嫁毖痒隧挺联止寿惹损婚读贮宠哥斩剪氖顺丑盔矩吻瞻第二章C语言图形程序设计基础第二章C语言图形程序设计基础第1页,共99页。7/29/20221西安工程大学数学系 3.1、屏幕设置我们在屏幕上进行绘制图形,一般要按以下几个步骤执行: (1)把屏幕设
2、置为图形模式; (2)选择背景与显示实体的颜色; (3)计算图形显示坐标; (4)调用绘图语句绘制实体3.1.1 、屏幕显示模式与坐标系1.文本模式与字符坐标系 在屏幕上只能显示字符的方式称为文本模式。在文本模式下,屏幕上可以显示的最小单位是字符。为了能在指定的位置显示每个字符,C语言提供了字符坐标系。 C语言图形程序设计基础硅冈类昼鹿累曼届哨炭继良僧捎啼糕镜珠闽治届器猿潍驾昌迢砰槛怨鄙辨第二章C语言图形程序设计基础第二章C语言图形程序设计基础第2页,共99页。7/29/20222西安工程大学数学系字符坐标系是以屏幕的左上角为坐标原点,水平方向为 X轴,垂直方向为Y轴,如下图-1所示:图-1
3、字符坐标系Max xMax y(1,1)注:字符坐标系的原点为(1,1),水平方向(X轴)分为若干列,垂直方向(Y轴)分为若干行,用一对坐标可以指定屏幕上一个位置。(8,20)表示字符位于屏幕的第8行第20列C语言图形程序设计基础卞焊霸间啥孜匝渴恳辅识兹吮伦奏瘤雾也招抽嚼酵闸异磐乙耕岔皖骑冲跳第二章C语言图形程序设计基础第二章C语言图形程序设计基础第3页,共99页。7/29/20223西安工程大学数学系 (1)BW40:黑白40列方式。显示25行文本,其中每行40个字符,以黑白两色显示。 (2)C40:彩色40列方式。可显示40列25行彩色字符。 (3)BW80:黑白80列方式。可显示80列2
4、5行字符。 (4)C80:彩色80列25行显示方式。 (5)MONO:单色80列25行显示方式。 (6)C4350:一种特殊的彩色文本方式,适和EGA和VGA两种适配器。若用EGA适配器,显示80列43行;若用VGA适配器,则显示80列50行。C语言图形程序设计基础由于显示模式的不同,所显示的字符的列数和行数以及颜色也不相同。C支持以下6种不同的显示方式。席掏堰吭冕乞续叁吹惜投尤检侣乐钦兵爪彼枯谬帧傻菜矫掠润猎夯叮福调第二章C语言图形程序设计基础第二章C语言图形程序设计基础第4页,共99页。7/29/20224西安工程大学数学系在不同的显示模式下,屏幕所显示的字符数量也不一样。X方向一般为40
5、列或80列,Y方向一般为25行,但EGA和VGA适配器可达43行或50行。在文本模式下,屏幕最多可显示80X50=4000个字符,至少可显示40X25=1000个字符。显示字符越多,每个字符尺寸越小,反之越大 。显示模式不同,屏幕坐标的构成也不相同。比如: (1)在BW40方式下,最大坐标位置为(25,40); (2)在C4350方式下,最大坐标位置为(50,80);注:C语言图形程序设计基础泰苑撰套酶染较杨妒悍撤妈阁肉巍狈栏偷韦颗解绥滦擞炎郊原客犬豹茫形第二章C语言图形程序设计基础第二章C语言图形程序设计基础第5页,共99页。7/29/20225西安工程大学数学系2. 图形模式与点坐标系 在
6、屏幕上显示图形的方式称为图形模式。在图形模式下,屏幕是由像素点组成的,像素点的多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。 如右图所示1.屏幕由许多像素点组成;2.图形的显示效果取决于分辨率的高低;C语言图形程序设计基础改营诬箔搀阅配汇定页淑技夜芹盎泳拥农荣洗牡攻耿睁丫杖囤兴藏瓜鄙磋第二章C语言图形程序设计基础第二章C语言图形程序设计基础第6页,共99页。7/29/20226西安工程大学数学系例如:CGA显示器的分辨率为300X200,TVG显示器的分辨率为1024X768, TVGA比CGA分率高。图-2 点坐标系Max xMax y(0,0)注:点坐标系坐标值的范围取决于
7、所用的适配器/显示分辨率C语言图形程序设计基础 在图形模式下,屏幕上每个像素的显示位置用点 坐标来描述的。点坐标系是以屏幕左上角为坐标原点(0,0),水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。如下图所示:渍每洞持贿仕暮诧坚镶就逗开保炯订澄草炮蛙嘎聪彰贞牌堵缮佬恋乍阀浮第二章C语言图形程序设计基础第二章C语言图形程序设计基础第7页,共99页。7/29/20227西安工程大学数学系由于屏幕的分辨率不同,水平方向和垂直方向的点数也不一样,从而点坐标系的Max x 、 Max y 数值也不同。在C程序中,坐标数据可以用两种形式给出:一种是绝对坐标,另一种是相对坐标。 (1)绝对坐标的参考点是
8、坐标的原点(0,0),x和y只能取规定范围(0, Max x )和(0, Max y )内的正整数; (2)相对坐标是相对“当前点”的坐标,其坐标的参考点是当前点。在相对坐标中, x和y的取值是相对当前点在x方向和y方向上的增量,故x和y可以为正整数,也可以为负整数。C语言图形程序设计基础米荆溉笺之漫巨饯豆名错赁舱妇诉炉但懊左偏程老智甸吁憎歉俞点州羹奔第二章C语言图形程序设计基础第二章C语言图形程序设计基础第8页,共99页。7/29/20228西安工程大学数学系3.1.2、图形驱动程序与图形模式1.图形驱动程序 对于不同的图形显示器,其控制方式各有差异,因此要显示图形就需要先装入相应的图形驱动
9、程序。C 支持以下几种图形驱动程序: 符号常量 数值 符号常量 数值DETECT0IBM85146CGA1HERCMONO7MCGA2ATT4008EGA3VGA9EGA644PC327010EGAMONO5C语言图形程序设计基础丝曳墅倍四肄砾诉朗陵鸵契咕辜主元莲休砌戴裔勾糠徊凹硅品虐晰袄顽洪第二章C语言图形程序设计基础第二章C语言图形程序设计基础第9页,共99页。7/29/20229西安工程大学数学系2.图形模式 由于每种图形显示器都有几种不同的图形显示模式,所以要显示图形,不但要先装入相应的驱动程序,而且还要决定所用的显示模式。 C 语言程序常采用的几种图形驱动程序及相应的模式驱动程序 (
10、driver)图形(gmode)等价值分辨(dpi)CGAC00320X200 CGACGAC11320X200CGAC22320X200CGAC33320X200CGAHI4640X200表2.2 图形驱动程序及相应的模式C语言图形程序设计基础妈讣郸葱叫榨幻宁堡秽睡挪栖淤雨帆镣哇褒柄峰力枷优垄烩伦辰梗托缎仍第二章C语言图形程序设计基础第二章C语言图形程序设计基础第10页,共99页。7/29/202210西安工程大学数学系驱动程序 (driver)图形(gmode)等价值分辨(dpi)EGAEGAHI0640X200EGALO1640X350VGALO0640X200VGAVGAMED1640
11、X350VGAHI2640X480注:1. 不同的图形驱动程序有不同的图形模式; 2. 同一图形驱动程序,也可能会有几种图形模式;C语言图形程序设计基础柬阮润枝拙铭涛舀涡刁孟署渴傀河厢掉托姚沃狈谁抄晴遁瓦句诧堕帘谬刑第二章C语言图形程序设计基础第二章C语言图形程序设计基础第11页,共99页。7/29/202211西安工程大学数学系C提供了十分丰富的图形库函数,共有70多个,所有图形函数的原型均在头文件“graphics.h”中定义。所以,在任何使用图形函数的程序中,都要求其头部包含文件graphics.h,即在程序文件的开头写上文件包含命令: #include 同时将集成开发环境option/
12、Linker中的graphics.lib选项设置为”on”。下面我们介绍:图形系统的初始化、图形系统的关闭、 图形模式控制。3.1.3、图形系统初始化和模式控制C语言图形程序设计基础澎酗兔搞妥逊弦喂肄掩犀角絮僵少厂练羌肩瓣沥臻宇避鞍碱党噬虑梆矮抄第二章C语言图形程序设计基础第二章C语言图形程序设计基础第12页,共99页。7/29/202212西安工程大学数学系图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形模式。1.图形系统的初始化 图形模式是有别于文本模式的一种计算机屏幕显示模式。屏幕一般在默认情况下为80列25行的文
13、本模式,在文本模式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,即为图形初始化过程。C语言图形程序设计基础描姓仗知搔剁氛凝毅菜缓辗飘絮童慰朱滑拔苏复珐摈滚樱准臂汛阎诅搔疚第二章C语言图形程序设计基础第二章C语言图形程序设计基础第13页,共99页。7/29/202213西安工程大学数学系功能 将图形驱动软件装入内存,使屏幕显示适配器设置为图形模式,即图形系统初始化;说明 1. gdriver是一个整型值,用来指定要装入的图形驱动程序;该值在头文件graphics.h中定义; 2. gmode是一个整型值,用来设置图形显示模式。图形显示模式决定了
14、显示的分辨率和显示的颜色的多少等; 3. path是一个字符串,用来指明图形驱动程序所在的路径.1.若驱动程序就在用户当前目录下,则path可为空字符串,否则应给出具体路径名。一般情况下,TurboC安装在C盘的TC目录中,则该路径为:C:TC,若写在参数中则为“C:TC”;2.前两个参数实际上是整型指针,调用时应加上地址运算符“&”;注:initgraph()函数格式 void far initgraph(int *gdriver,int *gmode,char *path);C语言图形程序设计基础火夏号帜把龚筹篙遇般端焕蜘凰悯辕厌媳凋尚糙灰胯础玖渝策硷剖辣匆荧第二章C语言图形程序设计基础第
15、二章C语言图形程序设计基础第14页,共99页。7/29/202214西安工程大学数学系(1)已知显示器类型的图形系统初始化。 如果已经知道所用图形显示器的种类和要使用的图形模式则图形系统的初始化可用下面程序,例如:例1 画一实心矩形 #includegraphics.h main() int gdriver,gmode; gdriver=CGA; /*设置显示模式CGA*/ gmode=CGAC0; /*选用CGA图形模式*/ initgraph(&gdriver,&gmode,“D:TC); /*初始化图形系统*/C语言图形程序设计基础醛蛊保模盒芍剁殖只朝安潮窥肉峦坑捅约配掷羊抡扮祟玫割铃慈
16、爪皑理齐第二章C语言图形程序设计基础第二章C语言图形程序设计基础第15页,共99页。7/29/202215西安工程大学数学系 bar3d(10,20,50,80,0,0); /*画一条形图*/ getch(); /*等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本模式*/ 程序注释:bar3d()函数 格式: void bar3d(int x1,int y1,int x2,int y2, int depth,int topflag); 功能: 画一填充的三维条形图; 说明: depth为条形的深度; topflag=0则不加顶,否 则在条形图上加一个顶。C语言图形程序
17、设计基础传腰燕矢肩辑逃钝弘阜褐楚残惶梭裕秽迈糟组披泥例趟悠雄壤庞梆钥看剖第二章C语言图形程序设计基础第二章C语言图形程序设计基础第16页,共99页。7/29/202216西安工程大学数学系格式 void far detectgraph(int *gdriver,int *gmode );功能 在计算机有图形适配器的情况下,确定图形适配器的类型;说明 1.若系统有图形适配器,则把gdriver指的变量设置为适合于适配器的图形驱动程序的代码,并把gmode所指的变量设置为适配器所能支持的最高分辨率。2.若系统无图形适配器,则gdriver所指的变量为-2.(2)不知显示器类型的图形系统初始化。 若
18、在编写程序过程中,不知道当前系统屏幕硬件的类型或编写的程序要用于不同的图形显示器,这就要求所编程序能知当前图形显示器的代码,Turbo C供了一个对图形显示器硬件测试的函数detectgraph()。detectgraph()函数C语言图形程序设计基础鸭靴彻陶掀私踩签巷平布利钓应羞晾困循缔拒烁汛傻秘侯挠筛驹音员巨苇第二章C语言图形程序设计基础第二章C语言图形程序设计基础第17页,共99页。7/29/202217西安工程大学数学系例2、 测试硬件显示模式和绘制图形 #include graphics.h main() int gdriver,gmode; detectgraph(&gdriver
19、,&gmode); /*测试结果存放于 gdriver,gmode中*/ if(gdriver0) printf(there is not graphics displayern); exit(1); /*无图形显示模式时,显示信息,停止程序*/ printf(detect graphics driver is # %d,mode is # %d n,gdriver,gmode); /*显示硬件测试结果*/ getch(); /*等待按一键结束*/C语言图形程序设计基础致轧鞘债馒软麓鉴良淆吊睡嘶焊尾海免够枷邦优层烧侈泣通议拽淑患封炕第二章C语言图形程序设计基础第二章C语言图形程序设计基础第18
20、页,共99页。7/29/202218西安工程大学数学系 initgraph(&gdriver,&gmode,c:tc) ; /*初始化图形系统*/ bar3d(10,20,50,80,10,1); getch(); /*等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本模式*/ return(0);C语言图形程序设计基础寿奸证腮稽磋妖沫焚岁敛跺瘫戎蜂杀祖堡箍擞卷恤实灌腐匙百盐霖搽坤驼第二章C语言图形程序设计基础第二章C语言图形程序设计基础第19页,共99页。7/29/202219西安工程大学数学系例3自动搜索显示类型和模式并初始化画图 #includegraphics.
21、h main() (3)自动初始化图形系统。 一般在程序设计中,可以把对图形显示器的检测和初始化工作放在一起来自动完成,规定Gdriver=DETECT,则initgraph()函数会自动按照系统所配置的图形显示器来确定驱动程序,并把图形模式设置为检测到的驱动程序的最高分辨率,实现图形系统的初始化.C语言图形程序设计基础谨违瘴芋辕淋亢蚕怔饯搔镀照绒乎淳哺奇虏替旱蜀兜疮耪宜蒜蘸蚊磁臃娶第二章C语言图形程序设计基础第二章C语言图形程序设计基础第20页,共99页。7/29/202220西安工程大学数学系 int gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式*/ ini
22、tgraph(&gdriver,&gmode,“C:TC); /*初始化图形系统*/ bar3d(10,20,50,80,10,1); /*画一三维立体有顶矩形*/ getch(); /*等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本模式*/ return(0);C语言图形程序设计基础鲍骗叹辫冠掀烤逛潦淬策让技砖怖遥绒薛庶恋农龚找沂灯帐呆致贸猩践缩第二章C语言图形程序设计基础第二章C语言图形程序设计基础第21页,共99页。7/29/202221西安工程大学数学系2.图形系统的关闭 在图形编程中,我们均用函数initgraph()对图形系统进行初始化,即启动图形系统,
23、进入绘图状态,在程序结束时都用函数closegraph()关闭图形系统。closegraph()函数格式 void far closegraph();功能 关闭图形模式。说明 函数closegraph()用来关闭图形模式,释放用于保存图形驱动程序和字体所占用的内存空间。当一个程序需要从图形模式下退出,且回到文本模式下继续运行时可调用该函数。注:所有有关图形显示的程序一定是在initgraph()和closegraph()之间。C语言图形程序设计基础午乡帽餐磅氟猎陵涝粥咳藻送扑盯幼览急同蛀酵链獭赠危伴注睦薛并勤箭第二章C语言图形程序设计基础第二章C语言图形程序设计基础第22页,共99页。7/29
24、/202222西安工程大学数学系3.图形模式的控制 为了对图形模式进行控制,即 1. 从图形模式转换成文本模式,或从文本模式转换成图 形模式; 2. 设置驱动器有效模式或读取当前图形模式和范围。 TurboC都提供了相关的函数来实现其控制。1.getgraphmode()函数格式 void far getgraphmode(void);功能 返回当前图形模式值,其返回值如前表所示。C语言图形程序设计基础百偏腹奔恰谨走搬栖谁艾扰妖结缠俱端斧蚂滔揍饵守粳泵蔓员罪庄环月高第二章C语言图形程序设计基础第二章C语言图形程序设计基础第23页,共99页。7/29/202223西安工程大学数学系功能 恢复屏幕
25、在图形初始化前的模式。说明 该函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前的状态。注意它与closegraph()函数的区别。3.setgraphmode()函数格式 void far setgraphmode(int gmode);功能 设置系统图形模式并清屏幕。说明 该函数把当前的图形模式设置为gmode所指定的模式。C语言图形程序设计基础2.restorecrtmode()函数格式 void far restorecrtmode(void);奢我啮规猿祷舟谭傻赦缕淆驴醇奈擒男饯扬拳典蹭扁悦隶柔萄贩诣脖嚣溉第二章C语言图形程序设计基础第二章C语言图
26、形程序设计基础第24页,共99页。7/29/202224西安工程大学数学系注: 通过调用以上函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph()函数再返回图形模式的功能.4.getmoderange()函数格式 void far getmoderange(int driver,int *lomode,int *himode);功能 获取图形驱动器可使用的模式范围。说明 该函数可以确定由driver所指定图形驱动器能够支持的最低和最高模式,并将这些值放在由lomode和himode所指向的变量中.C语言图形程序设计基础妊问会离刃歧涧臻挎盐郁札吉阀鲜酱能
27、匆瘴宠身车质雨谢夕虫佩汝挡目鞍第二章C语言图形程序设计基础第二章C语言图形程序设计基础第25页,共99页。7/29/202225西安工程大学数学系例4 图形模式控制函数应用程序# include graphics.h#include stdio.h#include stdlib.hmain() int gdriver,gmode,lo,hi; gdriver=CGA; /*设置显示模式为CGA*/ getmoderange(CGA,&lo,&hi); /*获得CGA的图形模式范围*/ printf(CGA surpporting modes range from %d to %d.n,lo,h
28、i); /*显示CGA的显示模式范围/ initgraph(&gdriver,&lo,c:tc) ; /*初始化CGAC0图形系统*/ bar3d(100,30,130,150,0,0);C语言图形程序设计基础读恒稚痒施薛嗅斌钙合驶磋衬援觉壕绪糙凡信硫傀晕憎胃转惭聂瓜蓉拟畦第二章C语言图形程序设计基础第二章C语言图形程序设计基础第26页,共99页。7/29/202226西安工程大学数学系 getch(); /*等待按一键结束*/ gmode=getgraphmode(); /*获得现行图形模式*/ restorecrtmode(); /*返回图形初始化前的现实模式*/ printf(NOW i
29、n text mode ,press any key back to graphics mode. n); getch(); setgraphmode(gmode); /*再回到图形模式*/ rectangle(50,30,100,130); /*画一矩形*/ getch(); closegraph(); /*关闭图形系统,回到文本模式*/ return(0); C语言图形程序设计基础蜒后汕刷球搽蝇亿隆开援夯腊库贫渔卉杜弗涣弃某裸矮伞敌继厌狐峦饼侣第二章C语言图形程序设计基础第二章C语言图形程序设计基础第27页,共99页。7/29/202227西安工程大学数学系我们在画图时需要运用光标定点,即
30、确定坐标位置。当屏幕处于文本状态时,左上角坐标原点为(1,1);而在图形模式下,以左上角为坐标原点(0,0),水平方向向右为X轴,垂直方向向下为Y轴。由于图形显示器和显示模式的不同,x、y坐标的最大值也就不同, 可利用TurboC提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。3.1.4 、图形坐标的设置moveto()函数格式 void far moveto(int x,int y);功能 把当前光标移到所需的位置(x,y)。 1.定点C语言图形程序设计基础准母痔壳胎披搔秀逗舱衬令刑捶庆甲陌腐哥当儒虾镇驳剁艰挣黑余料蒋绪第二章C语言图形程序设计基础第二章C语言图形程序设
31、计基础第28页,共99页。7/29/202228西安工程大学数学系说明 该函数把当前窗口中的当前光标位置(CP)移到所需的(x,y)位置。注:不是画线。例如:moveto(100,100)表示把当前光标移到点(100,100)位置上。moverel()函数格式 void far moverel(int deltax,int deltay);功能 以增量方式移动当前光标。说明 此函数把光标从当前位置(CP)开始,在x,y方向分别移动deltax和 deltay,即由(x,y) (x+ deltax,y+ deltay).例如:若当前光标在(10,10)位置,执行moverel(10,20)后即移
32、到(20,30)的位置上.C语言图形程序设计基础除阳沼者询畦呼溪汀饱处织檬需宦镣眩赞堪年离趟监幻摩怀专肖贬啃捅咎第二章C语言图形程序设计基础第二章C语言图形程序设计基础第29页,共99页。7/29/202229西安工程大学数学系注:moveto (10,20)表示把当前光标移到点(10,20)位置上。 moverel(10,20)后即移到(20,30)的位置上.Max xMax y(0,0)(10,10)(10,20)(20,30)当前光标movetomoverel图形模式C语言图形程序设计基础关萤漓秀遗呛禹组吩拥辟骡轮僚卫衬名者把寺麓尹坷糜烫插濒避床神旧找第二章C语言图形程序设计基础第二章C
33、语言图形程序设计基础第30页,共99页。7/29/202230西安工程大学数学系例如:语句printf(“cps loc:%d%d”,getx(),gety(); 显示光标当前位置的x值2.读取当前光标位置getx()函数格式 int far getx(void);功能 读取当前光标在x轴的位置。gety()函数格式 int far gety(void);功能 读取当前光标在y轴的位置。C语言图形程序设计基础旺绿堰那大章前峪丽筹谜哨迂灰嫁烟则劈蕾疚辊丧嘱便闲成昌辣捡乒奎赐第二章C语言图形程序设计基础第二章C语言图形程序设计基础第31页,共99页。7/29/202231西安工程大学数学系例5、显
34、示系统中图形硬件支持的最大的x,y值程序:#include stdio.h#include conio.h3.读取x,y轴的最大值getmaxx()函数格式 int far getmaxx(void);功能 读取当前光标在x轴的最大值。getmaxy()函数格式 int far getmaxy(void);功能 读取当前光标在y轴的最大值。C语言图形程序设计基础蓖落慎澎刨琴再数浦碗魄亏撩试鲍郴习巴戮瞅谆犹李恒纷祟附攒秤汉过紊第二章C语言图形程序设计基础第二章C语言图形程序设计基础第32页,共99页。7/29/202232西安工程大学数学系#include graphics.h void mai
35、n() int gdriver,gmode; gdriver=CGA; gmode=CGAC0; initgraph(&gdriver,&gmode, ); printf(max x,y is %d,%d,getmaxx(),getmaxy(); getch();输出结果为;max x,y is 319,199为什么?C语言图形程序设计基础慕翔遣鸥皿泄镍嫩代剿篮蚕鼓亏表叁潘知毕储彼搅棉串拜都山胺菇牡馅羔第二章C语言图形程序设计基础第二章C语言图形程序设计基础第33页,共99页。7/29/202233西安工程大学数学系3.2图形颜色设置 在绘图时,往往要求配置一定的颜色加以渲染在绘图系统中颜色分
36、为前景色和背景色。前景色是指构成字符和图形点的颜色,而背景色是指整个显示屏幕的颜色。C语言提供了多个颜色控制函数来设置前景色、背景色等。C语言图形程序设计基础核努涅午获禹橱沽的茬氟传狭味也惨夷减鹃糙埔珍唤刑弦熊傅季缴桨芬营第二章C语言图形程序设计基础第二章C语言图形程序设计基础第34页,共99页。7/29/202234西安工程大学数学系.设置当前背景色setbkcolor()函数格式 void far setbkcolor(int color);功能 设置当前背景颜色。说明该函数将背景色设置成color 所指定的颜色值。参数color可以用名字,也可以用数字,它们的对应关系在graphics.
37、h 中定义。如下表:符号常量数值含义BLACK0黑色BLUE1蓝色GREEN2绿色Color取值可以由0到15C语言图形程序设计基础下浙攘置妓粪捌盐沤亮救嫁猖迄留粒娠曾京阉扑艰败基瑞润秤湍奔邵希陨第二章C语言图形程序设计基础第二章C语言图形程序设计基础第35页,共99页。7/29/202235西安工程大学数学系2.设置当前画图颜色setcolor()函数格式 void far setcolor(int color);功能 设置当前画图颜色。说明该函数把当前画图颜色设置成color 所指定的颜色值,即画笔的颜色。参数color可以用名字,也可以用数字,但当缺省时,默认是白色。C语言图形程序设计基
38、础3.获取颜色信息getbkcolor()函数格式 int far getbkcolor(void);功能 读取当前背景颜色。说明该函数返回当前背景颜色。鞍辈悯凳漫霄凑缮疼劫涸斋从应碌视鹏宛全裸瘫扩雾和蚀辕丝锻棍躇拽锥第二章C语言图形程序设计基础第二章C语言图形程序设计基础第36页,共99页。7/29/202236西安工程大学数学系3.获取颜色信息getcolor()函数格式 int far getcolor(void);功能 读取当前画图颜色。说明该函数返回当前画笔颜色。C语言图形程序设计基础3.3画点,画线putpixel()函数格式 void far putpixel(int x,int
39、 y,int color);功能 在点(x,y)处画一规定颜色的点。说明该函数把color 所指定的颜色写到(x,y)处的像素上。例如:语句putpixel(10,20,GREEN)使点(10,20)的像素成为绿色。椒康央沿盾萤雕净喝栏谎掖坦揉币梯繁窝力沈坷爪璃矫齐手舒猪坎弥动戚第二章C语言图形程序设计基础第二章C语言图形程序设计基础第37页,共99页。7/29/202237西安工程大学数学系getpixel()函数格式 int far getpixel(int x,int y );功能 读取点(x,y)的颜色。说明该函数返回指定点(x,y)位置上的像素颜色值。C语言图形程序设计基础升卉应贷侗
40、蔑红输壕使疹鹊怎轴催走酣瑶筹缔凡鼠袁熊很彝配鬼睛威橙蚁第二章C语言图形程序设计基础第二章C语言图形程序设计基础第38页,共99页。7/29/202238西安工程大学数学系#include graphics.h#include conio.hvoid main()int gdriver=DETECT,gmode; int color,i,max; initgraph(&gdriver,&gmode, ); /*初始化图形系统*/ max=getmaxcolor(); for(i=0;i20;i+) putpixel(50+i*10,20,max); color=getpixel(50,20);
41、putpixel(150,150,color); getch(); closegraph(); 例6、 在不同位置画点 C语言图形程序设计基础烽前诌汕贰虫风缄忱牢闲队眩桑喘畦蒋谁跑授咨辉上哨往渔懊酸去鉴壁讥第二章C语言图形程序设计基础第二章C语言图形程序设计基础第39页,共99页。7/29/202239西安工程大学数学系 line( )函数格式 void far line(int x1,int y1,int x2,int y2); 功能 指定两点间画一直线。说明 该函数用当前颜色从点(x1,y1)到点(x2,y2)画一条直线,当前位置(CP)不变。 直线类函数 lineto( )函数格式 vo
42、id far lineto(int x,int y); 功能 从当前位置到点(x,y)画一条直线。说明 并把当前位置(CP)定位在点(x,y)处。 C语言图形程序设计基础量溃脖固熟昧岗勇浚话癸嘻慢奈兼悄蹈唇弛胖松渤恿摸蝶拧疆匈扑屁疏而第二章C语言图形程序设计基础第二章C语言图形程序设计基础第40页,共99页。7/29/202240西安工程大学数学系 linerel( )函数格式 void far linerel(int deltax,int deltay); 功能 从当前位置相对CP位置在X方向增大deltax,在Y方向增大deltay处画一直线。线的特性设定 我们在用画线函数画线时,其默认值
43、均属于一个像素点宽度的实线。但往往有时需要改变线型和线的宽度, C语言提供了一些可以改变线型和线宽的函数,具体如下:C语言图形程序设计基础宫耕呢弘娩蚂沃唱囊搅缸薄列蛙碧赠划骤笛谜绥袍恕瑶就黔漓梯炒宁臆廷第二章C语言图形程序设计基础第二章C语言图形程序设计基础第41页,共99页。7/29/202241西安工程大学数学系setlinestyle()函数格式 void far setlinestyle(int linestyle,unsigned pattern,int width);功能 改变线型和线宽。说明该函数所用的3个参数具体含义为:1linestyle为整型值,用来定义所画直线类型,如下表
44、所示:C语言图形程序设计基础幸内蔷铸标侍踩忌舒褐雨耐揽所淄苔孜携枚昆呢窜豆沁萤将颈耽抓泛散紫第二章C语言图形程序设计基础第二章C语言图形程序设计基础第42页,共99页。7/29/202242西安工程大学数学系代号名代号说明SOLID_LINE0实线DOTTEN_LINE1点线CENTER_LINE2中心线DASHED_LINE3虚线USERBIT_LINE4用户定义的线型注: 表中前4种为系统预定的类型,第5种为用户自定义类型2pattern为无符号整型数。该参数在需要用户自定义线型时才使用,若是使用前四种系统预定义的线型,则该参数可取0值。C语言图形程序设计基础迟掠潜丈酱布唆集廷蝉坟隧快渡杯
45、老亲普啸层掉伟搭将停袍蜘轿暂峨把看第二章C语言图形程序设计基础第二章C语言图形程序设计基础第43页,共99页。7/29/202243西安工程大学数学系3 width为整型数。主要用来指定所画直线的粗细,以像素为单位,分两种情况,如下表所示:符号常量值含义NORM_WIDTH11个像素宽(缺省)THICK_WIDTH33个像素宽注: 通过上述3个参数的不同组合,可以根据需要画出不同类型、不用粗细的直线。C语言图形程序设计基础现霜借距樟位蜒陶楼刷请判恭莎雍塑恼驹捣吸黍授溅势召禁心绳辈液闯相第二章C语言图形程序设计基础第二章C语言图形程序设计基础第44页,共99页。7/29/202244西安工程大学
46、数学系例如:从点(10,20)到(150,70)画一条红色的点划线可用下面的语句: setcolor(RED); setlinestyle(DASHED_LINE,0, THICK_WIDTH); line(10,10,150,100);注意:当函数setlinestyle的第一个参数为USERBIT_LINE(或4)时,用户可以自己定义直线类型。此时第三个参数意义不变而pattern才变得有意义,直线的类型由pattern来定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。C语言图形程序设计基础诗虾弹恋讳戒带侗婪附斟协彰涅拘彝楚侄慌弘冬拴宾要扳殷滋网晦介晌验第二章C语言图形程序
47、设计基础第二章C语言图形程序设计基础第45页,共99页。7/29/202245西安工程大学数学系若某一位置为1时表示直线上相应位置以当前颜色显示;若某一位置为0时,则其对应像素不显示或不改变原来的颜色;例如: 1. 1111 1111 1111 1111 表示16位全置1,因此可画一条16个像素的点实线。 2. 1010 1010 1010 1010 表示隔一位置1,因此可画一条16个像素的点虚线。但:在实际编写程序时,一般要把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数。例如1111 1111 1111 1111 FFFF。函数调用方法为: setlinestyle
48、(4,0 xFFFF,1); 可定义各种线型。C语言图形程序设计基础殷森助英灼殿卞常们脏庶觅海折餐多击汞烘掸酗诱诀诱平坏瓢呆郡寅昂盅第二章C语言图形程序设计基础第二章C语言图形程序设计基础第46页,共99页。7/29/202246西安工程大学数学系在图形模式下主要是绘制图形,为了有效地对图形进行操作,TurboC提供了图形屏幕、图形窗口的处理功能,即在图形模式下开设“窗口”(又称为视图区),并对屏幕和图形进行处理。3.4屏幕窗口操作.图形屏幕处理cleardevice()函数格式 void far cleardevice(void);功能 清除整个图形屏幕(但保留底色),并把当前光标位置(CP
49、)重新设置为(0,0)。C语言图形程序设计基础侯艇着勤牙利珍柏焊悠士径龄忆遵干馆尺栅囤痹录鹰灰圾赵天冰滦晒企渗第二章C语言图形程序设计基础第二章C语言图形程序设计基础第47页,共99页。7/29/202247西安工程大学数学系setactivepage()函数格式 void far setactivepage(int page);功能 设置图形输出活动页。说明该函数确定接受图形函数所输出的活动页,缺省值为屏幕显示页。保存显示在屏幕上信息的称为页(Page)。例如:语句setactivepage(1)表示设置第页为活动页。setvisualpage()函数格式 void far setvisua
50、lpage(int page);功能 该函数显示Page所指定的可见图形页。例如:语句setvisualpage(1)表示选择显示第页。C语言图形程序设计基础共噶悠睬撂戏富邹愁汞察炭歧圣狡癣约饭体年飞玄襄庚箕谰斑瓷皿檄汀常第二章C语言图形程序设计基础第二章C语言图形程序设计基础第48页,共99页。7/29/202248西安工程大学数学系#include graphics.h #include conio.hvoid main() int gdriver,gmode; gdriver=VGA; /*设置VGA图形设备器(驱动程序)*/ gmode=VGAHI; /*设置VGA图形模式*/ ini
51、tgraph(&gdriver,&gmode, ); /*初始化图形系统*/ cleardevice(); /* 清屏*/例图形屏幕处理函数应用程序C语言图形程序设计基础蛋秀咯陶族周壳经舶征腋阅扣昨门挛绳湘喳铺遏睫孩眠赏爬趁麦故奸措藏第二章C语言图形程序设计基础第二章C语言图形程序设计基础第49页,共99页。7/29/202249西安工程大学数学系setactivepage(1); /*设置图形输出活动页为1*/ circle(150,130,80); /*画一个圆*/ setactivepage(0); /*设置图形活动页为0*/ rectangle(40,160,90,180); /*画一
52、个矩形*/ getch(); setvisualpage(1); /*设置可见图形1页*/ getch(); setvisualpage(0); /*设置可见图形0页*/ getch(); closegraph(); /*关闭图形系统*/C语言图形程序设计基础嘉啄哨釜韧吸展茨稻弧椰炕捧锰申韭墟诫皑薄荷哇俏铸进呻魔滩炽义寸骂第二章C语言图形程序设计基础第二章C语言图形程序设计基础第50页,共99页。7/29/202250西安工程大学数学系C语言提供了图形窗口处理功能,并可以在屏幕某处设置一个图形窗口,以后有关图形的操作均相对于这个窗口的左上角为坐标原点(0,0)。可设置图形窗口之外的区域是不可接
53、触的,这样所有的图形操作只在所指定图形窗口中进行,而不会出现在窗口之外。2.屏幕窗口操作clearviewport()函数格式 void far clearviewport(void);功能 清除当前图形窗口,并把当前光标位置(CP)重置为 (0,0)。C语言图形程序设计基础篱怀狙凉喜荐盘陪迹摹晓肇透杭胖洒圣跌犯李美害廉墙匹镑绕肚砚芦函痰第二章C语言图形程序设计基础第二章C语言图形程序设计基础第51页,共99页。7/29/202251西安工程大学数学系若clipflag为1,则超出窗口的输出部分自动剪裁掉;若clipflag为0,则超出图形窗口之外的部分不被剪裁掉;setviewport()函
54、数格式 void far setviewport(int left,int top,int right, int bottom, int clipflag);功能 设置图形窗口。说明该函数建立一个新的图形窗口,窗口大小用左上角坐标(left,top)与右下角坐(right,bottom)来定义。C语言图形程序设计基础婆刮假魔肉氖腕蒂竖臀柒脊义次辖屏趣忙营做镍荐枣戍篷两练沈昌蓉盲痪第二章C语言图形程序设计基础第二章C语言图形程序设计基础第52页,共99页。7/29/202252西安工程大学数学系#include graphics.h #include conio.hvoid main() int
55、 gdriver=CGA,gmode=0; /*设置图形模式*/ initgraph(&gdriver,&gmode, ); /*初始化图形系统*/ rectangle(30,25,80,80); /*画一矩形*/ setviewport(30,25,80,80,0); /*设置窗口,其大小与前面所画图形,窗口之外不剪裁*/ line(0,0,100,150); /*画直线*/例8、窗口设置与清除作用C语言图形程序设计基础砷进冲至妓周奏棚裴卫紫胺疯橡彰背诫劲炕诱抱籽掏凌靳钎虹鲍为慰斋历第二章C语言图形程序设计基础第二章C语言图形程序设计基础第53页,共99页。7/29/202253西安工程大学
56、数学系 getch(); clearviewport(); /*清除窗口*/ getch(); cleardevice(); /*清屏*/ getch(); setviewport(20,15,80,80,1); /*重置窗口,窗口之外裁剪*/ rectangle(0,0,60,65); /*画一矩形*/ line(0,0,100,150); /*画直线*/ getch(); closegraph(); /*关闭图形系统,回到文本模式*/C语言图形程序设计基础袋碳闪识郴精咬寄揽捆粥淌犬溉丽卑砸拂健欲轰律流才犯逊伦稚夯讼蹈斜第二章C语言图形程序设计基础第二章C语言图形程序设计基础第54页,共99
57、页。7/29/202254西安工程大学数学系 为了能按照一定的要求对图形进行填充,通常应规定填充的模式和颜色。 图形填充时,使用的是当前模式和颜色;若没有设置填充模式和颜色,则填充时使用缺省值。 缺省填充模式为SOLID_FILL,填充颜色为函数返回值(一般为白色)。 3.5图形填充1. 填充模式和颜色设置setfillstyle()函数格式 void far setfillstyle(int pattern,int color); 功能 设置当前填充模式和填充颜色。C语言图形程序设计基础辞恫越晶缓问胯衰昭翠抵宴隘私附有遵谋介菠浦姆蓟侠绊腺慑收魄惰圈尹第二章C语言图形程序设计基础第二章C语言图
58、形程序设计基础第55页,共99页。7/29/202255西安工程大学数学系说明该函数用来设置当前填充模式和填充颜色,以便用于填充一个指定的封闭区域。其中参数1pattern用于指定填充模式,取值有12中,如下表:符号值含义图样 (数字为值)EMPTY_FILL0用背景色填充SOLID_FILL1实填充1LINE_FILL2用线“”填充2LTSLASH_FILL3用斜杠填充3SLASH_FILL4用粗斜杠填充4BKSLASH_FILL5用粗反斜杠填充5C语言图形程序设计基础扛孪盒瘫哩地糙铃久黄幕曳郭洒蔷裂桃咬鸭惭弛对签铭质糠翁陋康壕与黔第二章C语言图形程序设计基础第二章C语言图形程序设计基础第5
59、6页,共99页。7/29/202256西安工程大学数学系LTBKSLASH_FILL6用反斜杠填充6HATCH_FILL7网络线填充7XHATCH_FILL8斜网络线填充8INTERLEAVE_FILL9隔点填充9WIDE_DOT_FILL10稀疏点填充10CLOSE_DOT_FILL11密集点填充11USER_FILL12用户定义的模式2 color是用于指定填充用的颜色,取值必须是当前屏幕模式的有效值.C语言图形程序设计基础售右蚊渊婚荐纯十罗寨猿透茶速辩冉堡欲耕汾啪政墩芝片曳讶柑榆隆私苍第二章C语言图形程序设计基础第二章C语言图形程序设计基础第57页,共99页。7/29/202257西安工
60、程大学数学系例9、 画一个二维和三维条形并填图。 #include graphics.h#include conio.hvoid main() int i,gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式*/ initgraph(&gdriver,&gmode,D:TC); /*初始化图形系统*/ setfillstyle(SOLID_FILL,GREEN); bar(100,100,150,200); setfillstyle(SOLID_FILL,RED); bar3d(200,100,250,200,10,1);C语言图形程序设计基础丁萤玲瘴铝哨虹承宪滨幽沦惺
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届河北省五个一名校联盟高三5月联考历史试题(含答案)
- 全球供应链风险管理工程师考试试卷及答案
- pps协议书25w充电宝
- 买房没交定金协议书有效
- 房屋装修施工方案
- 铁路建设用地协议书
- 委托抢修协议书范本
- 二次供水水箱清洗协议书
- 梅州商用电脑租赁协议书
- 网络安全事件联动方案
- 北京市西城区2026年中考二模英语试题(含答案)
- 2026年人教版初一政治(道德与法治)下学期期末考试试卷及答案(共四套)
- 2026眼镜镜片制造过程评估及镀膜工艺Plus偏光镜研发趋势说明
- (三模)济南市2026届高三5月针对性训练生物试卷(含答案)
- 2026宁夏电投永利能源有限公司招聘21人考试备考题库及答案解析
- 广东省湛江航运集团有限公司招聘笔试题库2026
- 与老年患者沟通技巧学习课件
- PCB常见不良品图片及改善措施汇总
- 沉井计算计算表
- 铸造缺陷分析课件
- 高填方专项施工方案
评论
0/150
提交评论