绘图函数是编写绘图程序的基础,也是任何一种图形软件的核心内容。从理论上来说,用像素点几乎可以画出任务图形,但毕竟效率太低。为此,C程序的BGI(Borland Graphics Interface)提供了大量的基本绘图函数,以方便图形设计。
在用图形函数作图时,要随时注意画图的“当前点位制”,它是绘图的起始位置。也就是说,图形总是从当前点开始画。画完一个图形后,有时当前点位置不变,仍在原来的位置;而有时则要把当前点移到新的位置。此外,为了从指定位置开始作图,有时需要先移动当前点位置,然后再作图。这些,在调用绘图函数的时候要注意。
1.直线类绘图函数
用直线类函数绘制直线图形,可以用两种坐标:一种是绝对坐标;另一种是相对坐标。
几个常用的函数:
1. moveto函数
点的绝对定位函数,用于移动当前点位置。
调用形式:moveto(x,y);
参数x,y用于指定新的当前点位置坐标,整型数据,使用绝对坐标。调用结果是将当前点位置移到点(x,y)处。例如
moveto(100,100)/*结果是将当前点位置移到了(100,100)处。
2. moverel函数
点的相对定位函数,功能与moveto函数相似,但它使用的是相对坐标,它使用当前点位置在x和y方向上分别移动一个增量。
调用形式:moverel(dx,dy);
参数dx,dy为整型,是相对于当前点位置的增量。
它们不绘制图形,只改变当前点的位置,接着用绘图函数绘图。
3. line函数
指定两个绝对点绘直线函数。
调用形式:line(x1,y1,x2,y2)
参数x1,y1,x2,y2均为整型,使用绝对坐标。其中(x1,y1)和(x2,y2)分别为直线的两个端点坐标。
用line函数画线时,其当前点的位置不变。
例如,下面的调用可在屏幕上(VGA)画出一条对角线,line(0,0,639,479);
如果已知三角形的三个顶点坐标分别为:(x1,y1)、(x2,y2)和(x3,y3),则可以用line函数画三条直线构成一个三角形:
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x1,y1);
4. lineto函数
从当前点到指定的绝对点绘直线函数,并改变当前点的位置。所以执行的结果是,在画线到指定点的同时也把当前点的位置移到了指定点(即直线的终点)。其调用格式为:
lineto(x,y);
参数x,y为指定坐标,均为整型。
5. linerel函数:
从当前点到指定的相对点绘直线函数,指定点位置的坐标不是以绝对坐标的形式给出,而是以其相对于当前点(即直线点)位置的坐标增量给出的。调用格式为:
linerel(dx,dy);
参数dx,dy为整型。
该函数画线的同时,将当前点的位置移到(x+dx,y+dy)。设当前坐标为(x,y),则
linerel(dx,dy)与lineto(x+dx,y+dy)等价。
通过下面几个实例体会上面所说函数在使用上的差别:
设要过四点(160,120),(480,120),(480,360)和(160,360)画一个矩形,用不同的函数其绘图程序不同,分别如下:
【例9-3】使用line函数画矩形
#include<graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480); /* 初始化绘图窗口*/
cleardevice();
line(160,120,480,120);
line(480,120,480,360);
line(480,360,160,360);
line(160,360,160,120);
getch();
closegraph();
return 0;
}
程序运行结果:
图9-5 运行结果图
【例9-4】使用lineto函数画矩形
#include<graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480); /* 初始化绘图窗口*/
cleardevice();
moveto(160,120);
lineto(480,120);
lineto(480,360);
lineto(160,360);
lineto(160,120);
getch();
closegraph();
return 0;
}
程序运行结果如图9-4所示。
【例9-5】使用linerel函数画矩形
#include<graphics.h>
#include <conio.h>
int main()
{
initgraph(640, 480); /* 初始化绘图窗口*/
cleardevice();
moveto(160,120);
linerel(320,0);
linerel(0,240);
linerel(-320,0);
linerel(0,-240);
getch();
closegraph();
return 0;
}
程序运行结果如图9-4所示。
6.getx(),gety()函数分别是读取当前点的位置x,y坐标值。
7.getmaxx(),getmaxy()函数分别读取x,y轴的最大坐标值。