版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021-6-3C语言图形程序设计基础(2)1 v 计算机图形学是一门实践性很强的课程。通过计算机图形学是一门实践性很强的课程。通过 程序设计来完成图形的绘制,对深刻理解课程的程序设计来完成图形的绘制,对深刻理解课程的 内容和相关概念非常重要。内容和相关概念非常重要。 v 程序设计语言是进行计算机绘图的基础,现在程序设计语言是进行计算机绘图的基础,现在 大多数高级语言都具有基本绘图功能。大多数高级语言都具有基本绘图功能。 v 本章主要介绍本章主要介绍用用C语言进行图形程序设计的基语言进行图形程序设计的基 本方法本方法和和C语言的图形功能语言的图形功能,使大家对,使大家对C语言的图语言的图 形应
2、用有一个较深刻的理解。形应用有一个较深刻的理解。WINTC 第三章第三章 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)2 3.1、屏幕设置、屏幕设置 v我们在屏幕上进行绘制图形,一般要按以下几个步骤我们在屏幕上进行绘制图形,一般要按以下几个步骤 执行:执行: (1)把屏幕设置为图形模式;)把屏幕设置为图形模式; (2)选择背景与显示实体的颜色;)选择背景与显示实体的颜色; (3)计算图形显示坐标;)计算图形显示坐标; (4)调用绘图语句绘制实体)调用绘图语句绘制实体 3.1.1 、屏幕显示模式与坐标系、屏幕显示模式与坐标系 在屏幕上只能显示字符的方式
3、称为文本模式在屏幕上只能显示字符的方式称为文本模式。在文本模。在文本模 式下,屏幕上可以显示的最小单位是字符。为了能在指定式下,屏幕上可以显示的最小单位是字符。为了能在指定 的位置显示每个字符,的位置显示每个字符,C语言提供了语言提供了字符坐标系字符坐标系。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)3 v字符坐标系字符坐标系是以屏幕的左上角为坐标原点,水平方向为是以屏幕的左上角为坐标原点,水平方向为 X轴,垂直方向为轴,垂直方向为Y轴,如下图轴,如下图-1所示:所示: 图图-1 字符坐标系字符坐标系 Max x Max y (1,1) 注:字符坐
4、标系的原点为(注:字符坐标系的原点为(1,1),水平方向(),水平方向(X轴)分为若干列,垂直方向轴)分为若干列,垂直方向 (Y轴)分为若干行,用一对坐标可以指定屏幕上一个位置。轴)分为若干行,用一对坐标可以指定屏幕上一个位置。 (8,20) 表示字符表示字符 位于屏幕位于屏幕 的第的第8行行 第第20列列 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)4 (1)BW40:黑白:黑白40列方式。显示列方式。显示25行文本,其中每行行文本,其中每行40个个 字符,以黑白两色显示。字符,以黑白两色显示。 (2)C40:彩色:彩色40列方式。可显示列方式。可
5、显示40列列25行彩色字符。行彩色字符。 (3)BW80:黑白:黑白80列方式。可显示列方式。可显示80列列25行字符。行字符。 (4)C80:彩色:彩色80列列25行显示方式。行显示方式。 (5)MONO:单色:单色80列列25行显示方式。行显示方式。 (6)C4350:一种特殊的彩色文本方式,适和:一种特殊的彩色文本方式,适和EGA和和VGA两两 种适配器。种适配器。若用若用EGA适配器,显示适配器,显示80列列43行;若用行;若用VGA适适 配器,则显示配器,则显示80列列50行行。 C语言图形程序设计基础语言图形程序设计基础 由于由于显示模式显示模式的不同的不同,所显示的字符的列数和行
6、数以及颜色也不所显示的字符的列数和行数以及颜色也不 相同。相同。C支持以下支持以下6种不同的显示方式。种不同的显示方式。 2021-6-3C语言图形程序设计基础(2)5 在不同的显示模式下,屏幕所显示的字符数量也不一样。在不同的显示模式下,屏幕所显示的字符数量也不一样。 X方向一般为方向一般为40列或列或80列,列,Y方向一般为方向一般为25行,但行,但EGA和和 VGA适配器可达适配器可达43行或行或50行。行。 在文本模式下,屏幕最多可显示在文本模式下,屏幕最多可显示80X50=4000个字符,至个字符,至 少可显示少可显示40X25=1000个字符。显示字符越多,每个字符个字符。显示字符
7、越多,每个字符 尺寸越小,反之越大尺寸越小,反之越大 。 显示模式不同,屏幕坐标的构成也不相同。比如:显示模式不同,屏幕坐标的构成也不相同。比如: (1)在)在BW40方式下,最大坐标位置为(方式下,最大坐标位置为(25,40);); (2)在)在C4350方式下,最大坐标位置为(方式下,最大坐标位置为(50,80);); 注:注: C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)6 在屏幕上显示图形的方式称为图形模式在屏幕上显示图形的方式称为图形模式。在图形。在图形 模式下模式下,屏幕是由像素点组成的屏幕是由像素点组成的,像素点的多少决定像素点的多少决
8、定 了屏幕的分辨率。分辨率越高了屏幕的分辨率。分辨率越高,显示图形越细致显示图形越细致,质质 量越好。量越好。 v如右图所示 1.屏幕由许多像素点屏幕由许多像素点 组成;组成; 2.图形的显示效果取图形的显示效果取 决于分辨率的高低;决于分辨率的高低; C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)7 v例如:例如:CGA显示器的分辨率为显示器的分辨率为300X200,TVG显显 示器的分辨率为示器的分辨率为1024X768, TVGA比比CGA分率高。分率高。 图图-2 点坐标系点坐标系 Max x Max y (0,0) 注:点坐标系坐标值的注:点
9、坐标系坐标值的 范围取决于所用的范围取决于所用的适配适配 器器/显示分辨率显示分辨率 C语言图形程序设计基础语言图形程序设计基础 v 在图形模式下,屏幕上每个像素的显示位置用点在图形模式下,屏幕上每个像素的显示位置用点 坐标来描述的。点坐标系坐标来描述的。点坐标系是以屏幕左上角为坐标原点是以屏幕左上角为坐标原点 (0,0),水平方向为),水平方向为X轴,自左向右;垂直方向为轴,自左向右;垂直方向为 Y轴,自上向下轴,自上向下。如下图所示:。如下图所示: 2021-6-3C语言图形程序设计基础(2)8 v由于屏幕的分辨率不同,水平方向和垂直方向的点数也由于屏幕的分辨率不同,水平方向和垂直方向的点
10、数也 不一样,从而不一样,从而点坐标系的点坐标系的Max x 、 Max y 数值数值也不也不 同。同。 v在在C程序中,坐标数据可以用两种形式给出:程序中,坐标数据可以用两种形式给出:一种是绝对一种是绝对 坐标,另一种是相对坐标。坐标,另一种是相对坐标。 (1)绝对坐标绝对坐标的参考点是坐标的原点(的参考点是坐标的原点(0,0),),x和和y只只 能取规定范围(能取规定范围(0, Max x )和()和(0, Max y )内的正整)内的正整 数;数; (2)相对坐标相对坐标是相对是相对“当前点当前点”的坐标,其坐标的参考的坐标,其坐标的参考 点是当前点。在相对坐标中,点是当前点。在相对坐标
11、中, x和和y的取值是相对当前点的取值是相对当前点 在在x方向和方向和y方向上的增量,故方向上的增量,故x和和y可以为正整数,也可可以为正整数,也可 以为负整数。以为负整数。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)9 3.1.2、图形驱动程序与图形模式、图形驱动程序与图形模式 对于不同的图形显示器,其控制方式各有差异,对于不同的图形显示器,其控制方式各有差异,因此要因此要 显示图形就需要先装入相应的图形驱动程序显示图形就需要先装入相应的图形驱动程序。C 支持以下支持以下 几种图形驱动程序:几种图形驱动程序: 符号常量符号常量 数值数值 符号常量
12、符号常量 数值数值 DETECT0IBM85146 CGA1HERCMONO7 MCGA2ATT4008 EGA3VGA9 EGA644PC327010 EGAMONO5 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)10 由于每种图形显示器都有几种不同的图形显示模式,所由于每种图形显示器都有几种不同的图形显示模式,所 以要显示图形,不但要先以要显示图形,不但要先装入相应的驱动程序装入相应的驱动程序,而且还要,而且还要 决定所用的显示模式决定所用的显示模式。 C 语言程序常采用的几种图形驱动语言程序常采用的几种图形驱动 程序及相应的模式程序及相应的模式
13、 驱动程序驱动程序 (driver)图形(图形(gmode)等价值等价值分辨(分辨(dpi) CGAC0 0320X200 CGAC1 1320X200 CGAC2 2320X200 CGAC3 3320X200 CGAHI4640X200 表表2.2 图形驱动程序及相应的模式图形驱动程序及相应的模式 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)11 驱动程序驱动程序 (driver) 图形(图形(gmode)等价值等价值分辨(分辨(dpi) EGAEGAHI0640X200 EGALO1640X350 VGALO0640X200 VGAVGAMED
14、1640X350 VGAHI2640X480 v注注:1. 不同的图形驱动程序有不同的图形模式不同的图形驱动程序有不同的图形模式; 2. 同一图形驱动程序同一图形驱动程序,也可能会有几种图形也可能会有几种图形 模式模式; C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)12 vC提供了十分丰富的图形库函数,共有提供了十分丰富的图形库函数,共有70多个,所有多个,所有 图形函数的原型均在头文件图形函数的原型均在头文件“graphics.h”中定义。所中定义。所 以,在任何使用图形函数的程序中,都要求其头部包以,在任何使用图形函数的程序中,都要求其头部包 含
15、文件含文件graphics.h,即在程序文件的开头写上文件包,即在程序文件的开头写上文件包 含命令:含命令: #include 同时将集成开发环境同时将集成开发环境option/Linker中的中的graphics.lib 选项设置为选项设置为”on”。 下面我们介绍:下面我们介绍:图形系统的初始化图形系统的初始化、图形系统的关闭图形系统的关闭、 图形模式控制。图形模式控制。 3.1.3、图形系统初始化和模式控制、图形系统初始化和模式控制 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)13 v图形系统初始化首先要调用图形系统初始化首先要调用initgr
16、aph()函数函数,它通过它通过 从磁盘上装入一个图形驱动程序来初始化图形系统从磁盘上装入一个图形驱动程序来初始化图形系统, 并将系统设置为并将系统设置为图图。 图形系统的初始化图形系统的初始化 图形模式是有别于文本模式的一种计算机屏幕显示模图形模式是有别于文本模式的一种计算机屏幕显示模 式。屏幕一般在默认情况下为式。屏幕一般在默认情况下为80列列25行的文本模式,行的文本模式, 在文本模式下,所有的图形函数均不能操作,在文本模式下,所有的图形函数均不能操作,因此在使因此在使 用图形函数绘图之前,必须将屏幕显示适配器设置为一用图形函数绘图之前,必须将屏幕显示适配器设置为一 种图形模式,即为种图
17、形模式,即为图形初始化过程。图形初始化过程。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)14 功能功能 将图形驱动软件装入内存,使屏幕显示适配器设置为 图形模式,即图形系统初始化; 说明说明 1. gdriver是一个整型值,用来指定要装入的图形驱动程 序;该值在头文件graphics.h中定义;中定义; 2. gmode是一个整型值,用来设置图形显示模式。图形 显示模式决定了显示的分辨率和显示的颜色的多少等; 3. path是一个字符串,用来指明图形驱动程序所在的 路径. 1.若驱动程序就在用户当前目录下,则若驱动程序就在用户当前目录下,则pat
18、h可为空字符串,否则应可为空字符串,否则应 给出具体路径名给出具体路径名。一般情况下一般情况下,TurboC安装在安装在C盘的盘的TC目录中,则该目录中,则该 路径为:路径为:C:TC,若写在参数中则为若写在参数中则为“C:TC”; 2.前两个参数实际上是整型指针,调用时应加上地址运算符前两个参数实际上是整型指针,调用时应加上地址运算符“ 注:注: initgraph()函数函数 格式格式 void far initgraph(int *gdriver,int *gmode,char *path); C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)15
19、(1)已知显示器类型的图形系统初始化)已知显示器类型的图形系统初始化。 如果已经知道所用图形显示器的种类和要使用的图形模式如果已经知道所用图形显示器的种类和要使用的图形模式 则图形系统的初始化可用下面程序,例如:则图形系统的初始化可用下面程序,例如: 例例1 画一实心矩形画一实心矩形 #includegraphics.h main() int gdriver,gmode; v gdriver=CGA; /*设置显示模式设置显示模式CGA*/ v gmode=CGAC0; /*选用选用CGA图形模式图形模式*/ v initgraph( v /*初始化图形系统初始化图形系统*/ C语言图形程序设
20、计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)16 v bar3d(10,20,50,80,0,0); /*画一条形图画一条形图*/ v getch(); /*等待按一键结束等待按一键结束*/ v closegraph(); /*关闭图形系统,回到文本模式关闭图形系统,回到文本模式*/ bar3d()函数函数 格式格式: void bar3d(int x1,int y1,int x2,int y2, int x1,int y1,int x2,int y2, int depth,int topflag int depth,int topflag); 功能功能: 画一填充
21、的画一填充的三维条形图三维条形图; ; 说明说明: depth: depth为条形的深度为条形的深度; topflag=0; topflag=0则不加顶则不加顶, ,否否 则在条形图上加一个顶。则在条形图上加一个顶。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)17 格式格式 void far detectgraph(int *gdriver,int *gmode ); 功能功能 在计算机有图形适配器的情况下,确定图形适配器在计算机有图形适配器的情况下,确定图形适配器 的类型;的类型; 说明说明 1.若系统有图形适配器,则把若系统有图形适配器,则把g
22、driver指的变量设置指的变量设置 为适合于适配器的为适合于适配器的图形驱动程序的代码图形驱动程序的代码,并把,并把gmode所所 指的变量设置为适配器所能支持的指的变量设置为适配器所能支持的最高分辨率最高分辨率。2.若系统若系统 无图形适配器无图形适配器,则则gdriver所指的变量为所指的变量为-2. (2)不知显示器类型的图形系统初始化。)不知显示器类型的图形系统初始化。 若在编写程序过程中,不知道当前系统屏幕硬件的若在编写程序过程中,不知道当前系统屏幕硬件的 类型或编写的程序要用于不同的图形显示器,这就要类型或编写的程序要用于不同的图形显示器,这就要 求所编程序能知当前图形显示器的代
23、码,求所编程序能知当前图形显示器的代码,Turbo C供供 了一个对图形显示器硬件测试的函数了一个对图形显示器硬件测试的函数detectgraph()。 detectgraph()函数函数 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)18 v例例2、 测试硬件显示模式和绘制图形测试硬件显示模式和绘制图形 #include graphics.h main() int gdriver,gmode; detectgraph( /*测试结果存放于测试结果存放于 gdriver,gmode中中*/ if(gdriver0) printf(there is no
24、t graphics displayern); exit(1); /*无图形显示模式时,显示信息,停止程序无图形显示模式时,显示信息,停止程序*/ printf(detect graphics driver is # %d,mode is # %d n,gdriver,gmode); /*显示硬件测试结果显示硬件测试结果*/ getch(); /*等待按一键结束等待按一键结束*/ C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)19 initgraph( /*初始化图形系统初始化图形系统*/ bar3d(10,20,50,80,10,1); getch(
25、); /*等待按一键结束等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本模式关闭图形系统,回到文本模式*/ return(0); C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)20 v例例3自动搜索显示类型和模式并初始化画图自动搜索显示类型和模式并初始化画图 #includegraphics.h main() (3)自动初始化图形系统。)自动初始化图形系统。 一般在程序设计中一般在程序设计中,可以把对图形显示器的检测可以把对图形显示器的检测 和和 初始化工作放在一起来自动完成初始化工作放在一起来自动完成,规定规定Gdriver
26、= DETECT,则则initgraph()函数会自动按照系统所配置函数会自动按照系统所配置 的图形显示器来确定驱动程序的图形显示器来确定驱动程序,并把图形模式设置为并把图形模式设置为 检测到的驱动程序的最高分辨率检测到的驱动程序的最高分辨率,实现图形系统的初实现图形系统的初 始化始化. C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)21 int gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式自动搜索显示器类型和显示模式*/ initgraph( /*初始化图形系统初始化图形系统*/ bar3d(10,20,50,80,1
27、0,1); /*画一三维立体有顶矩形画一三维立体有顶矩形*/ getch(); /*等待按一键结束等待按一键结束*/ closegraph(); /*关闭图形系统,回到文本模式关闭图形系统,回到文本模式*/ return(0); C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)22 图形系统的关闭图形系统的关闭 在图形编程中,我们均用函数在图形编程中,我们均用函数initgraph()对图形系统对图形系统 进行进行初始化初始化,即启动图形系统即启动图形系统,进入绘图状态进入绘图状态,在程序结束在程序结束 时都用函数时都用函数closegraph()关闭图
28、形系统关闭图形系统。 closegraph()函数函数 v格式格式 void far closegraph(); v功能功能 关闭图形模式。关闭图形模式。 v说明说明 函数函数closegraph()用来关闭图形模式,用来关闭图形模式, 释放用于保存图形驱动程序和字体所占用的内释放用于保存图形驱动程序和字体所占用的内 存空间。当一个程序需要从图形模式下退出,存空间。当一个程序需要从图形模式下退出, 且回到文本模式下继续运行时可调用该函数。且回到文本模式下继续运行时可调用该函数。 注:注:所有有关图形显示的程序一定是在所有有关图形显示的程序一定是在initgraph()和和closegraph(
29、)之间之间。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)23 图形模式的控制图形模式的控制 为了对图形模式进行控制,即为了对图形模式进行控制,即 1. 从图形模式转换成文本模式,或从文本模式转换成图从图形模式转换成文本模式,或从文本模式转换成图 形模式;形模式; 2. 设置驱动器有效模式或读取当前图形模式和范围。设置驱动器有效模式或读取当前图形模式和范围。 TurboC都提供了相关的函数来实现其控制。 1.getgraphmode()函数函数 v格式格式 void far getgraphmode(void); v功能功能 返回当前图形模式值,其返
30、回值如前表所示。返回当前图形模式值,其返回值如前表所示。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)24 v功能功能 恢复屏幕在图形初始化前的模式恢复屏幕在图形初始化前的模式。 v说明说明 该函数使该函数使initgraph()函数所选定图形模式关闭函数所选定图形模式关闭,返返 回到调用回到调用initgraph()前的状态前的状态。注意它与。注意它与closegraph()函数函数 的区别。的区别。 3.setgraphmode()函数函数 v格式格式 void far setgraphmode(int gmode); v功能功能 设置系统图形模
31、式并清屏幕设置系统图形模式并清屏幕。 v说明说明 该函数把当前的图形模式设置为该函数把当前的图形模式设置为gmode 所指定的模式。所指定的模式。 C语言图形程序设计基础语言图形程序设计基础 2.restorecrtmode()函数函数 v格式格式 void far restorecrtmode(void); 2021-6-3C语言图形程序设计基础(2)25 注注: 通过调用以上函数,可实现使显示器暂时离开 图形模式进入文本模式,进行文本输出,然后不 经过initgraph()函数再返回图形模式的功能. 4.getmoderange()函数函数 v格式格式 void far getmodera
32、nge(int driver,int *lomode,int *himode); v功能功能 获取图形驱动器可使用的模式范围获取图形驱动器可使用的模式范围。 v说明说明 该函数可以确定该函数可以确定由由driver所指定图形驱动器所指定图形驱动器 能够支持的最低和最高模式能够支持的最低和最高模式,并将这些值放在由并将这些值放在由 lomode和和himode所指向的变量中所指向的变量中. C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)26 include graphics.h #include stdio.h #include stdlib.h mai
33、n() int gdriver,gmode,lo,hi; gdriver=CGA; /*设置显示模式为设置显示模式为CGA*/ getmoderange(CGA, /*获得获得CGA的图形模式范围的图形模式范围*/ printf(CGA surpporting modes range from %d to %d.n,lo,hi); /*显示显示CGA的显示模式范围的显示模式范围/ initgraph( /*初始化初始化CGAC0图形系统图形系统*/ bar3d(100,30,130,150,0,0); C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)27
34、 getch(); /*等待按一键结束等待按一键结束*/ gmode=getgraphmode(); /*获得现行图形模式获得现行图形模式*/ restorecrtmode(); /*返回图形初始化前的现实模式返回图形初始化前的现实模式*/ printf(NOW in text mode ,press any key back to graphics mode. n); getch(); setgraphmode(gmode); /*再回到图形模式再回到图形模式*/ rectangle(50,30,100,130); /*画一矩形画一矩形*/ getch(); closegraph(); /*
35、关闭图形系统,回到文本模式关闭图形系统,回到文本模式*/ return(0); C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)28 v我们在画图时需要运用光标定点我们在画图时需要运用光标定点,即确定坐标位置。当屏即确定坐标位置。当屏 幕处于文本状态时,左上角坐标原点为(幕处于文本状态时,左上角坐标原点为(1,1);而在图);而在图 形模式下形模式下,以左上角为坐标原点(以左上角为坐标原点(0,0),水平方向向右),水平方向向右 为为X轴,垂直方向向下为轴,垂直方向向下为Y轴轴。 v由于图形显示器和显示模式的不同由于图形显示器和显示模式的不同,x、y坐标
36、的最大值也坐标的最大值也 就不同,就不同, 可利用可利用TurboC提供的函数来提供的函数来设定坐标设定坐标(定点定点),), 读取当前光标的位置读取当前光标的位置以及以及x、y轴的最大值轴的最大值。 3.1.4 、图形坐标的设置、图形坐标的设置 moveto()函数函数 v格式格式 void far moveto(int x,int y); v功能功能 把当前光标移到所需的位置(把当前光标移到所需的位置(x,y)。)。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)29 v说明说明 该函数把当前窗口中的当前该函数把当前窗口中的当前光标位置(光标位置(
37、CP) 移到所需的(移到所需的(x,y)位置。)位置。注:不是画线注:不是画线。 v例如:moveto(100,100)表示把当前光标移到点 (100,100)位置上。 moverel()函数函数 v格式格式 void far moverel(int deltax,int deltay); v功能功能 以增量方式移动当前光标。以增量方式移动当前光标。 v说明说明 此函数把光标从当前位置此函数把光标从当前位置(CP)开始开始,在在x,y 方向分别移动方向分别移动deltax和和 deltay,即由即由(x,y) (x+ deltax,y+ deltay). v例如:若当前光标在(10,10)位置
38、,执行 moverel(10,20)后即移到(20,30)的位置上. C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)30 n注:moveto (10,20)表示把当前光标移到点(10,20)位置上。 n moverel(10,20)后即移到(20,30)的位置上. Max x Max y (0,0) (10,10) (10,20) (20,30) 当前光标 movet o movere l C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)31 v例如:语句例如:语句printf(“cps loc:%d%d”,ge
39、tx(),gety(); 显示光标当前位置的显示光标当前位置的x值值 getx()函数函数 v格式格式 int far getx(void); v功能功能 读取当前光标在读取当前光标在x轴的位置。轴的位置。 gety()函数函数 v格式格式 int far gety(void); v功能功能 读取当前光标在读取当前光标在y轴的位置。轴的位置。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)32 程序:#include stdio.h #include conio.h getmaxx()函数函数 v格式格式 int far getmaxx(void);
40、v功能功能 读取当前光标在读取当前光标在x轴的最大值。轴的最大值。 getmaxy()函数函数 v格式格式 int far getmaxy(void); v功能功能 读取当前光标在读取当前光标在y轴的最大值。轴的最大值。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)33 v#include graphics.h vvoid main() v v int gdriver,gmode; v gdriver=CGA; v gmode=CGAC0; v initgraph( v printf(max x,y is %d,%d,getmaxx(),getmax
41、y(); v getch(); v v输出结果为;max x,y is 319,199 为什么? C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)34 3.2图形颜色设置图形颜色设置 v 在绘图时,往往要求配置一定的颜色加在绘图时,往往要求配置一定的颜色加 以渲染在绘图系统中颜色分为以渲染在绘图系统中颜色分为前景色前景色 和背景色和背景色。 v前景色前景色是指构成字符和图形点的颜色是指构成字符和图形点的颜色, 而而背景色背景色是指整个显示屏幕的颜色是指整个显示屏幕的颜色。 vC语言提供了多个颜色控制函数来设置前语言提供了多个颜色控制函数来设置前 景色、背
42、景色等。景色、背景色等。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)35 设置当前背景色设置当前背景色 setbkcolor()函数函数 v格式格式 void far setbkcolor(int color); v功能功能 设置当前背景颜色。设置当前背景颜色。 v说明说明该函数将背景色设置成该函数将背景色设置成color 所指定的颜色值所指定的颜色值。 参数参数color可以用名字,也可以用数字可以用名字,也可以用数字,它们的对应关系在,它们的对应关系在 graphics.h 中定义。如下表:中定义。如下表: 符号常量数值含义 BLACK0黑色
43、BLUE1蓝色 GREEN2绿色 Color取值可以由0到15 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)36 设置当前画图颜色设置当前画图颜色 setcolor()函数函数 v格式格式 void far setcolor(int color); v功能功能 设置当前画图颜色。设置当前画图颜色。 v说明说明该函数把当前画图颜色设置成该函数把当前画图颜色设置成color 所指定的颜所指定的颜 色值,即画笔的颜色色值,即画笔的颜色。参数参数color可以用名字,也可以用数可以用名字,也可以用数 字,字,但当缺省时,默认是白色但当缺省时,默认是白色。 C
44、语言图形程序设计基础语言图形程序设计基础 3.获取颜色信息获取颜色信息 getbkcolor()函数函数 v格式格式 int far getbkcolor(void); v功能功能 读取当前背景颜色。读取当前背景颜色。 v说明说明该函数返回当前背景颜色。该函数返回当前背景颜色。 2021-6-3C语言图形程序设计基础(2)37 3.获取颜色信息获取颜色信息 getcolor()函数函数 v格式格式 int far getcolor(void); v功能功能 读取当前画图颜色。读取当前画图颜色。 v说明说明该函数返回当前画笔颜色。该函数返回当前画笔颜色。 C语言图形程序设计基础语言图形程序设计基
45、础 putpixel()函数函数 v格式格式 void far putpixel(int x,int y,int color); v功能功能 在点在点(x,y)处画一规定颜色的点。处画一规定颜色的点。 v说明说明该函数把该函数把color 所指定的颜色写到所指定的颜色写到(x,y)处的像素处的像素 上。例如:语句上。例如:语句putpixel(10,20,GREEN)使点使点(10,20)的像的像 素成为绿色。素成为绿色。 2021-6-3C语言图形程序设计基础(2)38 getpixel()函数函数 v格式格式 int far getpixel(int x,int y ); v功能功能 读取
46、点读取点(x,y)的颜色。的颜色。 v说明说明该函数返回指定点该函数返回指定点(x,y)位置上的像素颜位置上的像素颜 色值。色值。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)39 v#include graphics.h v#include conio.h vvoid main() vint gdriver=DETECT,gmode; v int color,i,max; v initgraph( /*初始化图形系统*/ v max=getmaxcolor(); v for(i=0;i20;i+) v putpixel(50+i*10,20,max
47、); v color=getpixel(50,20); v putpixel(150,150,color); v getch(); v closegraph(); 例例6、 在不同位置画点在不同位置画点 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)40 line( )函数函数 n格式格式 void far line(int x1,int y1,int x2,int y2); n功能功能 指定两点间画一直线。指定两点间画一直线。 n说明说明 该函数用当前颜色从点该函数用当前颜色从点(x1,y1)到点到点(x2,y2)画一条直画一条直 线,当前位置线,当
48、前位置(CP)不变。不变。 直线类函数直线类函数 lineto( )函数函数 n格式格式 void far lineto(int x,int y); n功能功能 从当前位置到点从当前位置到点(x,y)画一条直线。画一条直线。 n说明说明 并把当前位置并把当前位置(CP)定位在点定位在点(x,y)处。处。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)41 linerel( )函数函数 n格式格式 void far linerel(int deltax,int deltay); n功能功能 从当前位置相对从当前位置相对CP位置在位置在X方向增大方向增大d
49、eltax,在,在Y 方向增大方向增大deltay处画一直线。处画一直线。 线的特性设定线的特性设定 我们在用画线函数画线时,其我们在用画线函数画线时,其默认值均属于一默认值均属于一 个像素点宽度的实线个像素点宽度的实线。但往往有时需要改变线型和。但往往有时需要改变线型和 线的宽度,线的宽度, C语言提供了一些可以改变线型和线宽语言提供了一些可以改变线型和线宽 的函数,具体如下:的函数,具体如下: C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)42 setlinestyle()函数函数 v格式格式 void far setlinestyle(int l
50、inestyle,unsigned pattern,int width); v功能功能 改变线型和线宽。改变线型和线宽。 v说明说明该函数所用的该函数所用的3个参数具体含义为:个参数具体含义为: 1linestyle为整型值,用来定义所画直线类型,为整型值,用来定义所画直线类型, 如下表所示:如下表所示: C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)43 代号名代号名代号代号说明说明 SOLID_LINE0实线实线 DOTTEN_LINE1点线点线 CENTER_LINE2中心线中心线 DASHED_LINE3虚线虚线 USERBIT_LINE4用户
51、定义的线型用户定义的线型 注注: 表中前表中前4种为系统预定的类型种为系统预定的类型,第第5种为用户自定义类型种为用户自定义类型 2pattern为无符号整型数。该参数在需要用为无符号整型数。该参数在需要用 户自定义线型时才使用,户自定义线型时才使用,若是使用前四种系统预若是使用前四种系统预 定义的线型,则该参数可取定义的线型,则该参数可取0值值。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)44 3 width为整型数。主要用来为整型数。主要用来指定所画直线的指定所画直线的 粗细,以像素为单位,分两种情况粗细,以像素为单位,分两种情况,如下表所示:
52、,如下表所示: 符号常量符号常量值值含义含义 NORM_WIDTH11个像素宽(缺省)个像素宽(缺省) THICK_WIDTH33个像素宽个像素宽 注注: 通过上述通过上述3个参数的不同组合,可以根据需要画出不同类型、个参数的不同组合,可以根据需要画出不同类型、 不用粗细的直线。不用粗细的直线。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)45 v例如:从点例如:从点(10,20)到到(150,70)画一条画一条红色的点划线红色的点划线 可用下面的语句可用下面的语句: setcolor(RED); setlinestyle(DASHED_LINE,0
53、, THICK_WIDTH); line(10,10,150,100); v注意:当函数注意:当函数setlinestyle的第一个参数为的第一个参数为 USERBIT_LINE(或4)时,用户可以自己定义直线时,用户可以自己定义直线 类型。此时类型。此时第三个参数意义不变而第三个参数意义不变而pattern才变得有才变得有 意义,直线的类型由意义,直线的类型由pattern来定义来定义,该参数是一个该参数是一个 16位二进制码,每一位位二进制码,每一位(bit)表示一个像素表示一个像素。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)46 v若某一位
54、置为若某一位置为1时表示直线上相应位置以当前颜时表示直线上相应位置以当前颜 色显示;色显示; v若某一位置为若某一位置为0时,则其对应像素不显示或不改时,则其对应像素不显示或不改 变原来的颜色;例如:变原来的颜色;例如: 1. 1111 1111 1111 1111 表示表示16位全置位全置1,因此可因此可 画一条画一条16个像素的个像素的点实线点实线。 2. 1010 1010 1010 1010 表示隔一位置表示隔一位置1,因此因此 可画一条可画一条16个像素的个像素的点虚线点虚线。 但但:在实际编写程序时在实际编写程序时,一般要把一般要把16位二进制数转换为位二进制数转换为4位位 十六进
55、制数十六进制数,每每4位二进制数转换为位二进制数转换为1位十六进制数位十六进制数。例如。例如 1111 1111 1111 1111 FFFF。函数调用方法为:。函数调用方法为: setlinestyle(4,0 xFFFF,1); 可定义各种线型。可定义各种线型。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)47 v在图形模式下主要是绘制图形,为了有效地对在图形模式下主要是绘制图形,为了有效地对 图形进行操作,图形进行操作,TurboC提供了图形屏幕、图形窗提供了图形屏幕、图形窗 口的处理功能,即口的处理功能,即在图形模式下开设在图形模式下开设“窗
56、口窗口” (又称为视图区),并对屏幕和图形进行处理(又称为视图区),并对屏幕和图形进行处理。 3.4屏幕窗口操作屏幕窗口操作 cleardevice()函数函数 v格式格式 void far cleardevice(void); v功能功能 清除整个图形屏幕清除整个图形屏幕(但保留底色但保留底色),并把当,并把当 前光标位置前光标位置(CP)重新设置为重新设置为(0,0)。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)48 setactivepage()函数函数 v格式格式 void far setactivepage(int page); v功能功
57、能 设置图形输出活动页。 v说明说明该函数确定接受图形函数所输出的活动 页,缺省值为屏幕显示页。保存显示在屏幕上信 息的称为页(Page)。例如:语句例如:语句 setactivepage(1)表示表示设置第页为活动页设置第页为活动页。 setvisualpage()函数函数 v格式格式 void far setvisualpage(int page); v功能功能 该函数显示Page所指定的可见图形页。 例如:语句例如:语句setvisualpage(1)表示表示选择显示第页选择显示第页。 C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)49 v#in
58、clude graphics.h v#include conio.h vvoid main() v v int gdriver,gmode; v gdriver=VGA; /*设置设置VGA图形设备器图形设备器(驱动程序驱动程序)*/ v gmode=VGAHI; /*设置设置VGA图形模式图形模式*/ v initgraph( /*初始化图形系统初始化图形系统*/ v cleardevice(); /* 清屏清屏*/ C语言图形程序设计基础语言图形程序设计基础 2021-6-3C语言图形程序设计基础(2)50 vsetactivepage(1); /*设置图形输出活动页为设置图形输出活动页为
59、1*/ v circle(150,130,80); /*画一个圆画一个圆*/ v setactivepage(0); /*设置图形活动页为设置图形活动页为0*/ v rectangle(40,160,90,180); /*画一个矩形画一个矩形*/ v getch(); v setvisualpage(1); /*设置可见图形设置可见图形1页页*/ v getch(); v setvisualpage(0); /*设置可见图形设置可见图形0页页*/ v getch(); v closegraph(); /*关闭图形系统关闭图形系统*/ v C语言图形程序设计基础语言图形程序设计基础 2021-6
60、-3C语言图形程序设计基础(2)51 vC语言提供了语言提供了图形窗口图形窗口处理功能,并可以在屏幕某处处理功能,并可以在屏幕某处 设置一个图形窗口,以后有关图形的操作均相对于这设置一个图形窗口,以后有关图形的操作均相对于这 个窗口的左上角为坐标原点个窗口的左上角为坐标原点(0,0)。 v可设置图形窗口之外的区域是不可接触的,这样所有可设置图形窗口之外的区域是不可接触的,这样所有 的图形操作只在所指定图形窗口中进行,而不会出现的图形操作只在所指定图形窗口中进行,而不会出现 在窗口之外。在窗口之外。 clearviewport()函数函数 v格式格式 void far clearviewport
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可再生能源电解水制氢耦合合成氨系统集成与技术经济评价
- 二零二五年度汽车维修保养套餐销售代理居间服务合同
- 应急预案落地实施
- 科技行业的会计工作总结
- 二零二五个人向金融机构借款合同终止条件合同模板4篇
- 二零二五年度钢构桥梁建造与维护服务合同
- 游戏中心前台工作心得
- 工业园区综治工作中心上墙制度
- 二零二五版石料运输车辆运输责任保险合同范本6篇
- 进出口行业客户开发总结
- 河南省安阳市2024年中考一模语文试卷(含答案)
- TD/T 1044-2014 生产项目土地复垦验收规程(正式版)
- 2024年湖南现代物流职业技术学院单招职业适应性测试题库及答案1套
- 垃圾桶创新设计说明书
- 蔚来汽车技术
- 浙教版劳动二年级上册全册教案
- 智能衣服方案
- 李克勤红日标准粤语注音歌词
- 基于视觉的工业缺陷检测技术
- 军事英语词汇整理
- DB31-T 1440-2023 临床研究中心建设与管理规范
评论
0/150
提交评论