c语⾔是怎么绘制多边形,并且可以知道边上任意点的坐标,43、C语⾔图形函数图型模式、画点、。。。
Turbo C 提供了⾮常丰富的图形函数,所有图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独⽴图形程序的建⽴、基本图形功能、图形窗⼝以及图形模式下的⽂本输出等函数。另外,使⽤图形函数时要确保有显⽰器图形驱动程序*BGI,同时将集成开发环境Options/Linker中的Graphics lib选为on,只有这样才能保证正确使⽤图形函数。图形模式的初始化不同的显⽰器适配器有不同的图形分辨率。即是同⼀显⽰器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显⽰器适配器种类将显⽰器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为⽂本模式(80列,25⾏字符模式),此时所有图形函数均不能⼯作。设置屏幕为图形模式,可⽤下列图形初始化函数:
void far initgraph(int far *gdriver, int far *gmode,char*path);
其中gdriver和gmode分别表⽰图形驱动器和模式,path是指图形驱动程序所在的⽬录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见如下叙述。
⼀、图形模式
1、函数名:initgraph
功  能:gdriver和gmode分别表⽰图形驱动器和图形模式,path是指图形驱动程序所在的⽬录路径。
⽤  法:voidfar initgraph(int far *gdriver, int far *gmode, char *path);
在这⾥必须在path⽬录下到⼀个对应于gdriver的⽂件扩展名为.BGI的图形驱动程序(c语⾔编译器提供了对应各类适配器的不同图形驱动程序),然后对其设置模式gmode。
图形驱动器通常在TC根⽬录下或者根⽬录下⾯的BGI⽬录,以下给出⼀些图形驱动⽂件列表:
ATT.BGI
CGA.BGI(CGA模式)
EGAVGA.BGI(EGAVGA模式)
HERC.BGI
IBM8514.BGI
PC3270.BGI
事实上现在我们最常⽤的是EGAVGA.BGI图形驱动⽂件,相对于其它⼏个图形驱动⽂件它出现的时间⽐较晚,因此所能达到的图形模式分辨率和⾊彩相对就更加⾼。以下给出图形驱动器、模式的符号常数及
数值:
2、函数名:closegraph
功能:关闭图形模式
⽤法:voidfar closegraph(viod)
调⽤该函数后即退出图形状态⽽进⼊⽂本⽅式,并释放⽤于保存图形驱动程序和字体的系统内存。
还需要补充⼀点的是我们可以采⽤另⼀个函数同样达到让硬件⾃动检测图形驱动器和模式的效果,其调⽤格式为:
3、函数名:detectgraph
功能: 通过检测硬件确定图形驱动程序和模式
⽤法: void far detectgraph( int far *graphdriver, int far *gmode)
⼆、画点函数
在图形模式下, 是按象元来定义坐标的。对VGA适配器, 它的最⾼分辨率为640x480,其中640为整个屏幕从左到右所有象元的个
数, 480 为整个屏幕从上到下所有象元的个数。屏幕的左上⾓坐标为(0, 0), 右下⾓坐标为(639, 479), ⽔平⽅向从左到右为x轴正向, 垂直⽅向从上到下为y轴正向。TURBO C 的图形函数都是相对于图形屏幕坐标, 即象元来说的。
1、函数名:putpixel
功 能: 在指定位置画⼀像素
⽤ 法: void farputpixel (int x, int y, int pixelcolor);
2、函数名:getpixel
功 能: 取得指定像素的颜⾊
⽤ 法: int fargetpixel(int x, int y);
三、坐标位置的函数
1、函数名:getmaxx
功 能: 返回屏幕的最⼤x坐标
⽤ 法: int fargetmaxx(void);
函数名: getmaxy
功 能: 返回屏幕的最⼤y坐标
⽤ 法: int fargetmaxy(void);
函数明: getx
功 能: 返回当前图形位置的x坐标
⽤ 法: int fargetx(void);
函数名: gety
功 能: 返回当前图形位置的y坐标
⽤ 法: int fargety(void);
函数名: moveto
功 能: 将CP移到(x, y)
⽤ 法: void farmoveto(int x, int y);
函数名: moverel
功 能: 将当前位置(CP)移动⼀相对距离
⽤ 法: void farmoverel(int dx, int dy);
四、画线函数
1、函数名:line
功 能: 在指定两点间画⼀直线
⽤ 法: void farline(int x0, int y0, int x1, int y1);
2、函数名:lineto
功能:画⼀作从现⾏光标到点(x, y)的直线
⽤法:void far lineto(int x, int y);
3、函数名:linerel
功 能: 从当前位置点(CP)到与CP有⼀给定相对距离的点画⼀直线
⽤ 法: void farlinerel(int dx, int dy);
4、函数名:circle
功 能: 在给定半径以(x, y)为圆⼼画圆
⽤ 法: void farcircle(int x, int y, int radius);
5、函数名:arc
功 能: 画⼀弧线
⽤ 法: void fararc( int x,int y,int stangle,int endangle, int radius );
以(x,y)为圆⼼, radius为半径, 从stangle开始到endangle结束(⽤度表⽰)画⼀段圆弧线。在TURBO C中规定x轴正向为0度, 逆时针⽅向旋转⼀周,依次为90, 180, 270和360度(其它有关函数也按此规定, 不再重述)。
6、函数名:ellipse
功 能: 画⼀椭圆
⽤ 法: void farellipse( int x, int y, int stangle, int endangle, int xradius, int yradius);
以(x, y)为中⼼, xradius, yradius为x轴和y轴半径, 从⾓stangle 开始到endangle结束画⼀段椭圆线, 当stangle=0, endangle=360时, 画出⼀个完整的椭圆。
7、函数名:rectangle
功 能: 画⼀个矩形
⽤ 法: void farrectangle( int left, int top, int right, int bottom );
8、函数名:drawpoly
功 能: 画多边形
⽤ 法: void fardrawpoly( int numpoints, int far *polypoints );
画⼀个顶点数为numpoints,各顶点坐标由polypoints 给出的多边形。polypoints整型数组必须⾄少有2倍顶点数个⽆素。每⼀个顶点的坐标都定义为x,y, 并且x在前。值得注意的是当画⼀个封闭的多边形时, numpoints 的值取实际多边形的顶点数加⼀, 并且数组polypoints中第⼀个和最后⼀个点的坐标相同。
例1、使⽤图形初始化函数设置VGA⾼分辨率图形模式
#include
int main()
{
int gdriver, gmode;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver, &gmode,"c:\\tc");
bar3d(100, 100, 300, 250, 50,1);      /*画⼀长⽅体*/
getch();
closegraph();
return 0;
}
例2、⾃动进⾏硬件测试后进⾏图形初始化
#include
int main()
{
int gdriver, gmode;
detectgraph(&gdriver,&gmode);    /*⾃动测试硬件*/
printf("the graphics driver is%d, mode is %d\n", gdriver,
gmode);      /*输出测试结果*/
getch();
initgraph(&gdriver, &gmode,"c:\\tc");
/* 根据测试结果初始化图形*/
bar3d(10, 10, 130, 250, 20, 1);
getch();
closegraph();
return 0;
}
上例程序中先对图形显⽰器⾃动检测, 然后再⽤图形初始化函数进⾏初始化
设置, 但Turbo C提供了⼀种更简单的⽅法,  即⽤gdriver= DETECT 语句后再跟initgraph()函数就⾏了。采⽤这种⽅法后, 上例可改为:
#include
int main()
{
int gdriver=DETECT, gmode;
initgraph(&gdriver, &gmode,"c:\\tc");
bar3d(50, 50, 150, 30, 1);
getch();
closegraph();
return 0;
}
例3:
#include
#include
int main()
{
int gdriver, gmode, i;
int arw[16]={200, 102, 300, 102, 300,107, 330, 100, 300, 93, 300, 98,200, 98, 200, 102}; gdriver=DETECT;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver, &gmode,"");
setbkcolor(BLUE);
cleardevice();
setcolor(12);      /*设置作图颜⾊*/
c语言编译器怎么用不了drawpoly(8, arw);  /*画⼀箭头*/
getch();
closegraph();
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。