绘制图形.docx
- 文档编号:11158261
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:34
- 大小:41.23KB
绘制图形.docx
《绘制图形.docx》由会员分享,可在线阅读,更多相关《绘制图形.docx(34页珍藏版)》请在冰豆网上搜索。
绘制图形
第2章绘制图形
【本章学习目标】
掌握设置与关闭图形模式的函数。
能正确调用颜色函数设置图形的颜色。
掌握使用C语言绘制图形的基本步骤。
掌握基本绘图函数。
了解图形模式下输出字符的函数。
C语言不仅可以处理字符和数值,还可以绘制图形。
C语言的图形函数可以方便地绘制直线、圆和圆弧等基本图形,这些基本图形又可以组合出复杂的图形。
本章简要介绍C语言的绘图功能和常用图形函数。
学完本章内容后,您也能使用C语言绘制出美丽的图形。
2.1设置屏幕显示模式
字符和图形是两类不同的显示对象,它们对屏幕的要求是不同的。
屏幕通常使用不同的显示模式显示这两类对象。
要使用C语言正确处理字符和图形,就需要先掌握屏幕显示模式的基础知识,掌握设置屏幕显示模式的方法。
2.1.1屏幕显示模式概述
屏幕显示模式就是数据在屏幕上的显示方式。
C语言把屏幕显示模式分为文本模式和图形模式两种。
文本模式通常用于显示文本,图形模式则用于显示图形。
C语言默认屏幕显示模式为文本模式。
1.屏幕坐标系
显示器的工作原理与电视机的工作原理相似,其屏幕上规则地排列着许多细小的发光点。
这些发光点的明暗和色彩的不同组合,就组成了屏幕上绚丽多姿的画面。
为了便于指定屏幕上显示内容的位置,我们取屏幕左上角为坐标原点,第一行所在位置为x轴,第一列所在位置为y轴,建立如图2-1所示的屏幕直角坐标系。
建立屏幕直角坐标系后,就可以用有序数对(x,y)表示屏幕上点的位置。
在点的坐标(x,y)中,x指定点的列坐标,y指定点的行坐标。
例如,屏幕左上角点的坐标即为(0,0)。
而屏幕上其它点的坐标则与屏幕显示模式有关,同一个点的坐标可能随着屏幕显示模式的改变而改变。
请读者注意:
数学中建立平面直角坐标系后,平面上任意一点的位置可以用一个有序实数对来表示。
建立屏幕直角坐标系后,屏幕上任意一点的位置可以用一个有序整数对来表示。
而屏幕直角坐标系的坐标原点在屏幕的左上角,y轴的正方向向下,坐标轴的单位与屏幕显示模式有关,这些都是与数学中的平面直角坐标系不同之处。
2.文本模式
如果显示数据的最小单位是一个字符,则称该显示模式为文本模式。
在文本模式下,屏幕一般被划分为25行80列,即整个屏幕可以显示25×80个字符。
在文本模式下,行的编号依次是0、1、2、…、24,列的编号依次是0、1、2、…、79。
即行坐标y的取值范围是0≤y≤24之间的正整数,列坐标x的取值范围是0≤x≤79之间的正整数。
屏幕左上角的坐标是(0,0),屏幕右下角点的坐标为(79,24)。
3.图形模式
显示器屏幕上的每个发光点称为一个象素。
如果显示数据的最小单位是一个象素,则称该显示模式为图形模式。
在图形模式下,一个显示器屏幕上象素的数目由显示器的分辨率决定,如果分辨率是640×480,则屏幕被划分为480行640列,即每行有640个象素,每列有480个象素。
常用的显示器分辨率有640×480,800×600,1024×768等,分辨率越高,象素越多,显示的图形就越精确、越光滑。
一个显示器通常可以使用多种分辨率,用户可以按照需要方便地设置分辨率。
在分辨率为640×480的显示器屏幕上,列的编号依次为0、1、2、…、639,行的编号依次为0、1、2、…、479。
即列坐标x的取值范围为0≤x≤639之间的正整数,行坐标y的取值范围为0≤y≤479之间的正整数。
屏幕左上角点的坐标仍然是(0,0),屏幕右下角点的坐标为(639,479)。
4.测试x轴坐标的最大值
由于不同类型显示器的分辨率不同,在图形模式下屏幕上点的多少也不同。
所以,了解图形模式下屏幕坐标的最大值,对于正确安排图形在屏幕上的位置是非常重要的。
测试图形屏幕x轴坐标的最大值可以使用getmaxx函数,该函数的一般形式为:
getmaxx()
【函数功能】返回图形模式下屏幕x轴坐标的最大值。
5.测试y轴坐标的最大值
测试图形屏幕y轴坐标的最大值使用getmaxy函数,该函数的一般形式为:
getmaxy()
【函数功能】返回图形模式下屏幕y轴坐标的最大值。
2.1.2设置和关闭图形模式
在实际生活中绘图,需要先准备好纸和画笔,再使用画笔在纸上作图。
使用C语言的图形函数在屏幕上作图与之类似:
先将屏幕设置成某种图形模式,再调用作图函数绘制图形。
例1.5的演示程序可以在屏幕上画一个半径为50的圆。
程序中的语句:
intdriver,mode;
driver=DETECT;
initgraph(&driver,&mode,"c:
\\tc");
调用图形驱动程序,设置屏幕为图形模式。
语句中各项的意义正是本节将要介绍的内容。
1.图形驱动程序
把屏幕设置为图形模式,需要根据显示器的类型调用不同的图形驱动程序。
C语言为常见的彩色或单色显示器提供了图形驱动程序。
图形驱动程序的符号和意义见表2-1。
表2-1图形驱动程序
符号常量
数值
意义
DETECT
0
自动测试显示卡类型,选择相应的驱动程序
CGA
1
CGA彩色显示器
EGA
3
EGA彩色显示器
EGAMONO
5
EGA单色显示器
VGA
9
VGA彩色显示器
我们可以使用表示图形驱动程序的符号和数值调用图形驱动程序。
例如,对VGA彩色显示器,可以使用符号VGA或数值9调用其驱动程序。
2.图形模式
显示器类型不同,显示模式一般也不同。
因此,在绘制图形之前,还必须根据显示器的实际情况将显示器设置成所需的图形模式。
常见CGA、EGA和VGA显示器的图形模式如表2-2所示。
表2-2图形模式
显示器类型
图形模式符号常量
数值
分辨率
色调
CGA
CGAC0
0
320×200
C0
CGAC1
1
320×200
C1
CGAC2
2
320×200
C2
CGAC3
3
320×200
C3
CGAHI
4
640×200
2色
EGA
EGALO
0
640×200
16色
EGAHI
1
640×350
16色
EGAMONO
EGAMONOHI
0
640×350
2色
VGA
VGALO
0
640×200
16色
VGAMED
1
640×350
16色
VGAHI
2
640×480
16色
从表中可以看出,不同类型的显示器,有不同的图形模式。
同一种类型的显示器,也可能有几种图形模式,每种图形模式对应一种分辨率。
与调用图形驱动程序相似,我们也使用表中的符号和数值指定图形模式。
例如,对于分辨率为640×480的VGA显示器,可以使用符号VGAHI或数值2指定其图形模式。
3.设置图形模式
C语言默认屏幕显示模式为文本模式。
要使用C语言作图,首先要设置屏幕显示模式为某种图形模式。
设置屏幕为图形模式可以使用initgraph函数,该函数的调用形式是:
initgraph(&驱动程序,&图形模式,路径);
【函数功能】调用指定的图形驱动程序,设置屏幕为图形模式。
【参数说明】
“驱动程序”指定调用的图形驱动程序。
“驱动程序”用表2-1中的符号或数值表示。
例如对VGA显示器,函数中既可以使用符号VGA,又可以使用数值9指定驱动程序。
请注意,不要遗忘驱动程序前面的符号“&”。
“图形模式”指定屏幕的图形模式。
“图形模式”用表2-2中的符号或数值表示。
例如对分辨率为640*480的VGA显示器,函数中既可以使用符号VGAHI,又可以使用数值2指定图形模式。
也请注意,不要遗忘图形模式前面的符号“&”。
“路径”指定存放图形驱动程序的路径。
如果图形驱动程序存放在当前盘的当前文件夹中,可以用空字符串""表示该路径;如果图形驱动程序存放在C盘的\TC文件夹中,可以用如下字符串表示该路径:
"c:
\\tc"
注意别遗忘双引号,并且反斜杠是两个。
(1)用户指定图形模式
如果您已经知道所使用的显示器类型和图形模式,那么设置屏幕为图形模式是非常简单的事。
例如,对于分辨率为640×480的VGA显示器,可以使用如下语句把屏幕设置成图形模式:
intdrive,mode;
drive=VGA;
mode=2;
initgraph(&drive,&mode,"c:
\\tc");
其中第1行定义了两个整型变量,第2行和第3行给这两个变量赋值,使drive存放表示VGA驱动程序的符号常量VGA,mode存放表示VGA高分辨率显示模式的数值2。
第4行调用initgraph函数设置屏幕为图形模式。
参数“c:
\\tc”指定驱动程序存放的位置是C:
\TC文件夹。
(2)自动测试并设置图形模式
如果您不知道所使用的显示器类型和图形模式,可以使用自动测试的方法设置屏幕为图形模式,这也是initgraph函数最常用的一种用法。
自动测试并设置屏幕为图形模式可以使用以下语句:
intdrive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:
\\tc");
其中第2条语句给变量drive赋值为DETECT,使程序能自动测试显示器,并选择相应的驱动程序设置图形模式。
我们经常使用自动测试的方法设置图形屏幕,请读者很好地掌握这种方法。
4.关闭图形模式
在图形模式下调用图形函数作图结束后,通常要关闭图形模式,恢复系统的默认状态。
关闭图形模式可以使用closegraph函数,该函数的调用形式为:
closegraph();
【函数功能】关闭图形模式,将屏幕恢复为文本模式。
5.用C语言绘图的基本步骤
使用C语言的图形函数在屏幕上作图有三个基本步骤:
①设置屏幕为图形模式。
②调用作图函数绘制图形。
③关闭图形模式。
【例2.1】在屏幕上画一个圆的演示程序。
/*在屏幕上画一个白色圆圈的演示程序T201.C*/
#include"graphics.h"
main()
{
intdrive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:
\\tc");/*设置图形模式*/
cleardevice();/*清屏*/
circle(300,200,60);/*画一个圆*/
getch();
closegraph();/*关闭图形模式*/
}
运行程序时,将在黑色的屏幕上画一个白色的圆圈。
【说明】
程序第2行的include命令指出图形函数的头文件。
要使用图形函数作图,请一定记住使用这条命令。
程序中使用自动测试显示器,并设置图形模式语句。
程序第9行在屏幕上画一个圆。
画圆函数circle将在下面介绍。
程序第11行关闭图形模式,使屏幕返回字符模式。
2.2绘制图形
一幅复杂的图形,通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。
而其中的三角形、矩形、平行四边形又可以由直线组成。
C语言提供了画直线、矩形、圆、圆弧、椭圆等基本图形的函数。
只要我们正确使用这些基本绘图函数,同样可以画出美丽的图画。
2.2.1画直线形
许多图形可以由直线组成。
如图2-2所示的房屋,可以由矩形、平行四边形和三角形组成。
使用C语言的画直线函数和画矩形函数,可以方便地画出该房屋。
图2-2房屋示意图
1.画直线函数
画直线函数line可以在指定位置画一条指定长度的直线。
该函数的调用形式为:
line(x1,y1,x2,y2);
【函数功能】在指定位置画一条直线。
【参数说明】“x1,y1”指定直线始点的坐标,“x2,y2”指定直线终点的坐标。
一般情况下,x1、y1、x2、y2是整型数据。
例如,要在点(20,50)与(100,200)之间画一条直线,可以使用语句:
line(20,50,100,200);
【特殊情况】
如果x1与x2相等,y1与y2不相等,则line函数在屏幕上画一条竖直线。
如果y1和y2相等,x1与x2不相等,则line函数在屏幕上画一条水平线。
如果x1与x2相等,y1与y2也相等,则line函数在屏幕上画一个点。
2.2.2画矩形函数
画矩形函数rectabnle可以在指定位置画一个指定大小的矩形。
该函数的调用形式为:
rectabnle(x1,y1,x2,y2)
【函数功能】在指定位置画一个矩形。
【参数说明】“x1,y1”指定矩形左上角顶点的坐标,“x2,y2”指定矩形右下角顶点的坐标。
一般情况下,x1、y1、x2、y2是整型数据。
例如,要在屏幕上以点(20,50)为左上角顶点,以点(100,200)为右下角顶点,画一个矩形,可以使用语句:
rectangle(20,50,100,200);
画直线函数可以画矩形,画矩形函数也可以画直线。
在rectangle函数中,如果x1与x2相等,y1与y2不相等,则画一条竖线。
如果x1与x2不相等,y1与y2相等,则画一条横线。
【例2.2】画出如图2-2所示的房屋。
分析:
这个房屋主要由三个矩形(正面、门、窗),两个平行四边形(侧面、屋顶),一个三角形和两条直线(窗户中的线条)组成,矩形可以调用rectangle函数画出,平行四边形、三角形和直线可以调用line函数画出。
根据使用C语言绘图的三个基本步骤,容易写出如下的程序。
/*绘制房屋示意图的程序T202.C*/
#include"graphics.h"
main()
{
intdrive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:
\\tc");/*设置图形模式*/
rectangle(225,250,480,400);/*画正面*/
rectangle(390,320,440,400);/*画门*/
rectangle(260,290,300,330);/*画窗户*/
line(260,310,300,310);
line(280,290,280,330);
line(200,200,455,200);/*画屋顶*/
line(455,200,480,250);
line(200,200,225,250);
line(160,230,200,200);
line(160,230,225,250);/*画左面*/
line(160,230,160,380);
line(160,380,225,400);
getch();
closegraph();/*关闭图形模式*/
}
【说明】编写程序时,可以改变确定直线和矩形位置的点的坐标。
但请读者注意设计各条线和各个矩形的位置。
2.2.3画圆和圆弧
C语言的画圆函数、画圆弧函数和画椭圆函数,提供了画圆、画圆弧、画椭圆和椭圆弧等曲线的功能。
如图2-3所示的“笑脸”图形,可以由一个大圆、两个小圆、三条直线、两条圆弧组成。
使用画圆函数、画圆弧函数和画直线函数,可以方便地画出该图形。
图2-3笑脸
1.画圆函数
画圆函数circle可以在指定位置画一个指定大小的圆。
该函数的调用形式为:
circle(x,y,半径);
【函数功能】在指定位置画一个圆。
【参数说明】“x,y”指定圆心的坐标,“半径”指定圆的半径。
例如,在屏幕上画一个圆心在(300,200),半径为50的圆,可以使用语句:
circle(300,200,50);
2.画圆弧函数
画圆弧函数arc可以在指定位置画一个指定大小的圆弧。
该函数的调用形式为:
arc(x,y,起始角,终止角,半径);
【函数功能】在指定位置画一个圆弧。
【参数说明】
“x,y”指定圆心的坐标。
“起始角”指定圆弧开始的角度,“终止角”指定圆弧结束的角度。
它们的取值范围一般是0~360,如果“起始角”是0,“终止角”是360,则函数arc画一个圆。
“半径”指定圆弧的半径。
例如,要在屏幕上以(300,200)为圆心,起始角为0,终止角为180,半径为50画一条圆弧,可以使用语句:
arc(300,200,0,180,50);
3.画椭圆或椭圆弧线函数
画椭圆函数ellipse可以在指定位置画一个指定大小的椭圆或椭圆弧线,该函数的调用形式为:
ellipse(x,y,起始角,终止角,横轴,纵轴);
【函数功能】在指定位置画一个椭圆或椭圆弧线。
【参数说明】
(1)“x,y”指定椭圆中心的坐标,
(2)“起始角”指定图形开始的角度,“终止角”指定图形结束的角度。
“起始角”与“终止角”的取值范围一般为0~360。
(3)“横轴”指定椭圆横轴的长度,“纵轴”指定椭圆纵轴的长度。
当横轴长度和纵轴长度不等时,画椭圆或椭圆弧线。
当横轴长度和纵轴长度相等时,画圆或圆弧线。
例如,在屏幕上画一个中心坐标为(300,200),起始角度为0度,终止角度为360度,横轴半径为80,纵轴半径为50的椭圆,可以使用语句:
ellipse(300,200,0,360,80,50);
又如,在屏幕上画一条中心坐标为(300,200),起始角度为0度,终止角度为180度,横轴半径为80,纵轴半径为50的椭圆弧线,可以使用语句:
ellipse(300,200,0,180,80,50);
【例2.3】画一张如图2-3所示的“笑脸”图形。
分析:
图2-3所示的“笑脸”由一个大圆表示脸,两个小圆表示眼睛,三条直线组成鼻子,两条圆弧组成嘴。
大圆和小圆可以调用画圆函数circle画出,圆弧可以调用画圆弧函数arc画出,直线可以调用画直线函数line画出。
根据使用C语言作图的三个基本步骤,可以写出如下的程序:
/*画“笑脸”的程序T203.C*/
#include"graphics.h"
main()
{
intdrive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:
\\tc");/*设置图形模式*/
circle(150,100,80);/*画脸*/
circle(120,80,15);/*画左眼*/
circle(180,80,15);/*画右眼*/
line(145,105,140,125);/*画鼻子*/
line(155,105,160,125);
line(140,125,160,125);
arc(150,80,235,305,60);/*画圆弧(嘴的上线)*/
arc(150,110,210,330,40);/*画圆弧(嘴的下线)*/
getch();
closegraph();/*关闭图形模式*/
}
2.2.4设置线型和线宽
实际生活中画图时,人们常常使用不同的线形和不同粗细的线条表现图形的不同意义。
使用C语言绘制图形时也可以使用实线、点线、点划线等多种线形,可以使用细线和粗线画图。
1.线型
C语言能够使用的线形见表2-3。
表2-3线形
符号常量
数值
线形
SOLID_LINE
0
实线
DOTTED_LINE
1
点线
CERTER_LINE
2
中心线
DASHED_LINE
3
点划线
USERBIT_LINE
4
用户自定义线
2.线宽
C语言能够使用的线宽见表2-4。
表2-4线宽
符号常量
数值
线宽
NORM_WIDTH
1
一点宽
THICK_WIDTH
3
三点宽
前面各例中调用图形函数画出的图形,边界线都是实线,线宽都是一点宽。
其实您还可以根据需要设置画线的线型和线宽,用画线函数画出不同线型和线宽的图形。
3.设置线形和线宽
设置线型和线宽可以使用函数setlinestyle,该函数的调用形式为:
setlinestyle(线形,自定义线型,线宽);
【函数功能】设置画线的线型和线宽。
【参数说明】
“线形”指定画线的形状,它的取值见表2-4。
“线宽”指定画线的宽度,它的取值见表2-5。
“自定义线型”只在“线形”取4的时候才有意义,当线形取0~3时,“自定义线型”取0即可。
使用自定义线型涉及到二进制数的知识,本书从略,有兴趣的读者请参阅其它书籍。
参数“线型”和“线宽”对矩形都起作用,但“线型”对圆、椭圆和圆弧不起作用,“线宽”对直线、椭圆和圆弧不起作用。
如果不设置线宽和线型,则系统默认所画的线是一点宽的实线。
2.3设置屏幕显示颜色
前面的程序ST22.C,可以在黑色的屏幕上画出白色的圆圈,这种图形不够美观。
C语言可以使用彩色显示器提供的颜色资源,在屏幕上画出彩色图形。
2.3.1颜色简介
彩色显示器为我们提供了丰富多彩的颜色,C语言可以在彩色显示器上绘制出彩色图形。
在C语言中可以方便地设置屏幕对象的颜色,常见的EGA和VGA显示器的颜色说明见表2-5。
表2-5颜色定义
颜色
符号常量
数值
颜色
符号常量
数值
黑色
BLACK
0
深灰色
DARKGRAY
8
蓝色
BLUE
1
淡蓝色
LIGHTBLUE
9
绿色
GREEN
2
淡绿色
LIGHTGREEN
10
青色
CYAN
3
淡青色
LIGHTCYAN
11
红色
RED
4
淡红色
LIGHTRED
12
洋红色
MAGENTA
5
淡洋红色
LIGHTMAGENTA
13
棕色
BROWN
6
黄色
YELLOW
14
淡灰色
LIGHTGRAY
7
白色
WHITE
15
我们可以使用表示颜色的符号和数字表示颜色。
例如,可以使用字符RED或数字4表示红色。
2.3.2设置屏幕颜色
实际生活中在纸上绘画时,当画笔的颜色与纸的颜色不相同时,我们在纸上画的图形可以显示出来。
调整纸的颜色或画笔的颜色,可以改善绘图的色彩效果。
在屏幕上绘图与在纸上绘图类似,只要屏幕的颜色与绘图的颜色不相同,即可显示出所画的图形。
屏幕的颜色称为背景色,屏幕上显示对象的颜色称为前景色。
正确设置背景色和前景色,C语言将按照您设置的颜色画出图形。
1.设置前景色
前景色决定屏幕上显示对象的颜色。
C语言的作图函数都使用当前前景色作图。
因此,要用什么颜色画图,在调用作图函数之前就先设置它为前景色。
设置前景色可以使用setcolor函数,该函数的调用形式为:
setcolor(颜色代码);
【函数功能】设置图形屏幕的前景色。
【参数说明】“颜色代码”指定显示对象的颜色。
对EGA或VGA显示器,可以使用表2-5中的数字或符号指定颜色。
例如,设置前景色为红色,可以使用如下语句:
setcolor(4);
或
setcolor(RED);
2.设置背景色
背景色决定屏幕的颜色。
设置背景色可以使用setbkcolor函数,该函数的调用形式为:
setbkcolor(颜色代码);
【函数功能】设置图形屏幕的背景色。
【参数说明】“颜色代码”指定屏幕的颜色。
对EGA或VGA显示器,可以使用表2-5中的数字或符号指定颜色。
例如,设置背景色为淡蓝色,可以使用如下语句:
setbkcolor(9);
或
setbkcolor(LIGHTBLUE);
3.以背景色清屏
调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 绘制 图形