绘图函数是编写绘图程序基础,也是任何一种图形软件的核心内容。从理论上来说,用像素点几乎可以画出任务图形,但毕竟效率太低。为此,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轴的最大坐标值。