C语言中的画图函数
43、C语言图形函数图型模式、画点、画线、位置函数
![43、C语言图形函数图型模式、画点、画线、位置函数](https://img.taocdn.com/s3/m/8b3fdd06876fb84ae45c3b3567ec102de2bddf0d.png)
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.BGICGA.BGI(CGA模式)EGAVGA.BGI(EGAVGA模式)HERC.BGIIBM8514.BGIPC3270.BGI事实上现在我们最常⽤的是EGAVGA.BGI图形驱动⽂件,相对于其它⼏个图形驱动⽂件它出现的时间⽐较晚,因此所能达到的图形模式分辨率和⾊彩相对就更加⾼。
c语言circle画圆函数
![c语言circle画圆函数](https://img.taocdn.com/s3/m/fc5f5b4fa36925c52cc58bd63186bceb18e8ed42.png)
c语言circle画圆函数C语言是一种广泛应用于计算机编程领域的高级编程语言,它具有简单易学、高效实用等特点。
在C语言中,我们可以使用circle画圆函数来绘制圆形图形。
下面,我将详细介绍如何使用C语言circle画圆函数来实现圆形图形的绘制。
首先,我们需要了解C语言circle画圆函数的基本语法。
在C语言中,circle画圆函数的语法格式如下:circle(x, y, r);其中,x和y分别表示圆心的横坐标和纵坐标,r表示圆的半径。
通过调用circle函数,我们可以在屏幕上绘制出一个圆形图形。
接下来,我们可以通过一个简单的例子来演示如何使用C语言circle画圆函数来绘制圆形图形。
具体代码如下:#include <graphics.h>int main(){int gd = DETECT, gm;initgraph(&gd, &gm, "");circle(200, 200, 100);getch();closegraph();return 0;}在上述代码中,我们首先使用了graphics.h头文件中的initgraph函数来初始化图形界面。
然后,我们调用circle函数来绘制一个圆心坐标为(200, 200),半径为100的圆形图形。
最后,我们使用getch函数来等待用户按下任意键,然后使用closegraph函数来关闭图形界面。
通过上述例子,我们可以看到,使用C语言circle画圆函数来绘制圆形图形非常简单。
只需要传入圆心坐标和半径等参数即可。
同时,我们还可以通过调整圆心坐标和半径等参数来绘制不同大小和位置的圆形图形。
总之,C语言circle画圆函数是一种非常实用的绘图函数,它可以帮助我们快速绘制出各种形状的圆形图形。
如果您正在学习C语言编程,那么我强烈建议您学习和掌握这个函数,它将会对您的编程学习和实践产生非常大的帮助。
C语言图形编程函数大全
![C语言图形编程函数大全](https://img.taocdn.com/s3/m/561fb88884868762caaed562.png)
C语言图形编程一、字符屏幕一、屏幕操作函数1. clrscr()清除字符窗口函数2. window()字符窗口函数3. gotoxy()光标定位函数4. clreol() 清除光标行尾字符函数5. insline() 插入空行函数6. delline() 删除一行函数7. gettext() 拷进文字函数8. puttext() 拷出文字函数9. movetext() 移动文字函数二、字符属性函数10. textmode() 文本模式函数11. highvideo()高亮度函数12. lowvideo() 低亮度函数13. normvideo(void);14. textcolor() 文本颜色函数15. textattr() 文本属性函数16.textbackground() 文本背景函数三、屏显状态函数17. wherex() 光标处x坐标函数18. wherey() 光标处y坐标函数19. gettextinfo() 获取文本窗口信息函数在Borland C++里面提供了字符屏幕和图形函数。
字符屏幕的核心是窗口(Window),它是屏幕的活动部分,字符输出或显示在活动窗口中进行。
窗口在缺省时,就是整个屏幕。
窗口可以根据需要指定其大小。
同样,对图形函数的操作,也提供了(Viewport)。
也就是说图形函数的操作都是在视口上进行。
图形视口与字符窗口具有相同的特性,用户可以在屏幕上定义大小不同的视口,若不定义视口大小,它就是整个屏幕。
窗口是在字符屏幕下的概念,只有字符才能在窗口中显示出来,这时用户可以访问的最小单位为一个字符。
视口是在图形屏幕状态下的概念,文本与图形都可以在视口上显示,用户可访问的最小单位是一个像素(像素这一术语最初用来指显示器上最小的、单独的发光点单元。
然而现在,其含义拓宽为指图形显示器上的最小可访问点)。
字符和图形状态下,屏幕上的位置都是由它们的行与列所决定的。
有一点须指出:字符状态左上角坐标为(1,1),但图形左上角坐标为(0,0)。
C语言画图函数
![C语言画图函数](https://img.taocdn.com/s3/m/1d8923582a160b4e767f5acfa1c7aa00b52a9dbd.png)
C语言画图函数与图形有关的函数GRAPHICS.H 库文件bar【功能】画出一条栏目。
【原型】void far bar(int left,int top,int right,int bottom)【位置】graphics.hgraphics.h【参见】bar3d,setfillstyle,rectanglebar3d【功能】画出一条3-D栏目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag) 【位置】graphics.h【参见】barcircle【功能】以(x,y)为圆心按照指定的半径画出一个圆。
【原型】void far circle(int x,int y,int radius)【位置】graphics.h【参见】arccleardevice【功能】清除图形画面。
【原型】void far cleardevice(void)【位置】graphics.h【参见】clearviewportclearviewport【功能】清除当前可视区域。
【原型】clearviewport(void)【位置】graphics.h【参见】setviewport,cleardeviceclosegraph【功能】关闭图形系统。
【原型】void far closegraph(void)【位置】graphics.h【参见】initgraphdetecgraph【功能】通过检查硬件确定使用的图形驱动程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode)【位置】graphics.h【参见】initgraph,graphresultdrawpoly【功能】画出一个多边形的轮廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])【位置】graphics.h【说明】polypoints中包括一共numpoints对数值。
C语言图形编程(三、绘图函数-02)5
![C语言图形编程(三、绘图函数-02)5](https://img.taocdn.com/s3/m/8c1ab0d049649b6648d7479a.png)
返回值: 无
例: 下面的程序画一个封闭星形图与一个不封闭星形图:
#include<graphics.h>
void main()
{
int driver,mode;
static int polypoints1[18]={100,100,110,120,100,130,120,125,140,140,130,120,
printf("aspect ratio: %f",aspectratio);
69. circle()画圆函数
功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。
用法:该函数调用方式为void circle(int x,int y,int radius);
说明: 参数x,y为圆心坐标,radius为圆半径,用像素个素表示。注意,调用circle()函数画圆时不用当前线型。
不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。
此函数对应的头文件为graphics.h
返回值: 无
例: 画六个同心圆,圆心在(100,100)。
#include<graphics.h>
void main()
为了保证几何图形基本按预计情况显示在屏幕上,用屏显的纵横比来计算和纠正不同硬件及显示卡产生的畸变。计算纵横比所需要的水平方向和垂直方向的比例系数可调用函数getaspectratio()获得。
68. getaspectratio()获取纵横比函数
功能: 函数getaspectratio()返回x方向和y方向的比例系数,用这两个整型值可计算某一特定屏显的纵横比。
C语言图像处理函数大全
![C语言图像处理函数大全](https://img.taocdn.com/s3/m/835f94d380eb6294dd886c4b.png)
C语言图像处理函数大全,完整版∙∙1.图像平移图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 +dx, y0+dy),右下角坐标为(x1+dx, y1+dy)。
坐标平移变换公式为:x′ = x +dxy′ = y +dy在屏幕上实现图像的移动分为四个步骤:⑴保存原图像到缓冲区。
⑵擦除原图像。
⑶计算平移后的新坐标。
⑷在新的坐标位置重新显示原图像。
其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。
对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。
此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。
2.图像颠倒图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。
分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换……,依此类推,从而实现了图像的颠倒。
只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。
基本步骤如下:(1) 用getimage()保存原图像,并擦除原图像。
(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息height = bottom -top +1;width = right -left +1;linebytes = (width +7) /8 *4;(3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至全部交换完毕。
(4)把交换后的图像缓冲区内容重新显示在屏幕上。
3.图像镜像变换镜像变换是指将指定区域的图像左右翻转地显示在屏幕。
c语言画图函数
![c语言画图函数](https://img.taocdn.com/s3/m/934df3ce6137ee06eff9184f.png)
(一) 像素函数putpixel() 画像素点函数功能:函数putpixel() 在图形模式下屏幕上画一个像素点。
用法:函数调用方式为void putpixel(int x,int y,int color); 说明:参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。
此函数相应的头文件是graphics.h 返回值:无例:在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);getpixel()返回像素色函数功能:函数getpixel()返回像素点颜色值。
用法:该函数调用方式为int getpixel(int x,int y); 说明:参数x,y为像素点坐标。
函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。
这个函数相应的头文件为graphics.h 返回值:返回一个像素点色彩值。
例:把屏幕上(8,6)点的像素颜色值赋给变量color。
color=getpixel(8,6);编辑本段(二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。
这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。
有两种线宽及几种线型可供选择,也可以自己定义线图样。
下面分别介绍直线和线型函数。
line() 画线函数功能:函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法:该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明:参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
C语言图形库函数.docx
![C语言图形库函数.docx](https://img.taocdn.com/s3/m/0fd67169e87101f69f319507.png)
1•初始化图形系统函数名:ini tgraph功能:初始化图形系统用法:void far initgraph(int far *graphdriver, int far *grciphmode, char far *pathtodriver);程序例:^include <graphics. h>★include <stdlib. h>^include <stdio. h> #includo <conio・ h> int main(void){/* request auto detection */int gdriver = DETEC1\ gmode, errorcode;/* initialize graphics mode */initgraph(&gdriver, &gmode,"“);/* read result of initialization */errorcode 二graphresult():if (errorcode != grOk) /* an error occurred */(prin tf (''Graphics error: %s\n: grapherrormsg (errorcode)):printf("Press any key to halt:"):getch ();exi t(1); /* return wi th error code *//* draw a line */line(0, 0, gctmaxx0, gctmaxy());/* clean up */getch ();closegraph ();return 0;2.#include〈graphics・ h>★include <stdlib. h>^include <stdio. h>#include <conio.h> irH main(void){/* request auto detection */int gdriver = DETECT, gmode, errorcode; int maxx, mcixy;/* our polygon array */int polyL1OJ;/* initialhe graphics and local variables */initgraph(&gdriver, &gmode,;/* read result of initialization */ errorcode = graphresult();if (errorcode != grOk)/* an error occurred */{printf(^Graphics error: %s\n", \ grapherrormsg(orrorcode));prin订("Press any key to halt/); getch ();/♦ terminate with an error code */ exi t (1);}meixx = getmeixx ();mcixy = getmcixy 0 ;poly[0] = 20; /* 1st vertext */poly[1] = maxy / 2;poly[2] = maxx - 20; /* 2nd */ poly[3] = 20;poly [4] = maxx - 50; /* 3rd */ poly [5] = maxy - 20;poly[6] = maxx / 2;/* 4th */poly[7] = maxy / 2;/*drawpoly doesn't automatically close the polygon, so we close il・poly [8] = poly[0]:poly[9] = poly[l]:/* draw the polygon */ drawpoly(5, poly);/* clean up */ getchO ; elosegraph ();return 0;}#include <graphics・h> #include <stdlib. h> #includo <stdio・h> ^include <conio.h> int main(void)/* request auto detection */int gdriver = DETECT, gmode, errorcode;int midx, midy;ini stangle = 0, endangle = 360;int xradius = 100, yradius = 50;/* initidli/e graphics, local variables */ inilgraph(&gdrivg &gmode,"“);/* read result of initialization */ errorcode = graphrcsult();if (errorcode != grOk)/* an error occurred */(prin(『("Graphics error: %s\r)zz, grapherrormsg (errorcode));printf("Press any key to halt:");getch ();exit(1);/* term in ate with an error code */}midx = getmaxx () / 2;midy = getmaxy () / 2;setcolor (getmtixcolor ());/* draw ellipse */ellipse(midx, midy, stangle, endangle, xradius, yradius);/* clean up */getch ();closegraph();return 0;}功能:画出并填充一椭恻用法:void far fillellipse(int x, int y, int xradius, int yradius); 程序例:#includo〈graphics・ h>#include <conio. h>int main(void){int gdriver 二DETECT, gmode;int xcenter, ycenter, i;initgraph(&gdriver, &gmode,"“); xcenter = getmaxxO / 2;ycenter = getmaxy() / 2;for (i=0; i<13; i++){setfillstyle(i, WHITE);fillellipse(xcenter, ycenter, 100, 50); getch ();}closegraph();return 0;}#include <graphics・h> #include <stdlib. h> #includo <string・h> ^include <stdio.h> ^include <conio. h>int main(void)/* request auto detection */int gdriver = DETECT, gmode, errorcode;int bkcolor, midx, midy; char bknamc[35];/* initialize graphics and local variables */ initgraph(&gdrivor, &gmode,"”);/* road result of initializalion */errorcode = graphresult():/* an error occurred */if (errorcode != grOk){printf(z,Grciphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:z/); getch0 ;/* terminate with an error code */exit(1);}midx = getmaxx () / 2;midy 二gelmtixy() / 2; setcolor (getmaxcolor ());/* for centering text on the display */ settextjustify(CENTER_TEXT, CENTER_TEXT);/* get the current background color */ bkcolor = getbkcolor0 ;/* convert color value into a string */ itoa(bkcolor, bkname, 10);strcat (bknamc,"is the current background color・“);/* display a message */outtextxy (midx, midy, bkntune);/* clean up */getch();closegraph ();return 0;函数名:line 功能:在指定两点间画一直线用法:void far line(int xO, int yO, int xl, int yl);程序例:#include <graphics・h>^include <stdlib. h> #includo <stdio. h>^include <conio. h> int main(void){/* request auto detection */int gdriver 二DETECT, gmode, errorcode;int xmax, ymax;/* iniliali/e graphics and 1ocal variables */ initgraph(&gdriver, &gmode,"”):/* read result of initialization */cri^orcodc = graphrcsult ();/* an error occurred */if (errorcode != grOk){prin订("Graphics error: %s\n", grapherrormsg(errorcode));printf("Press any key to halt:"); getch ();exi t (1);setcolor (getmcixcolor ());xmax = getmeixx ();ymeix 二getmtixy ();/* draw a diagonal line */ line(0, 0, xmax, ymax);/* clean up */ getchO ; closegraph ();return 0;}函数名:rectangle功能:画一个矩形)\] 法:void far rectangle(int left, int top, int right, int bottom);函数名:sctbkcolor功能:用调色板设置当前背景颜色用法:void far setbkcolor(int color): 程序例:ttinclude <graphics. h>tfinclude <stdlib. h>ttinclude <stdio. h>ttinclude <conio. h>int main(void){/* select a driver and mode that supports *//* multiple background colors・*/int gdrivcr 二EGA, gmodc = EGAHI, errorcode; int bkcol, maxcolor, x, y;char msg[80];/* initialize graphics and local variables */ initgraph(&gdriver,&gmode,"”);/* read result of initialization */ errorcode = graphresult();if (errorcode != grOk) /* an e门occurred */prinlf ("Graphics error: %s\n/z, grapherrormsg (errorcode)); printf("Press any key to halt/);getch0 ;exit(1) ; /* terminate with an error code */ }/* maximum color index supported */ maxcolor = getmtixcolor ();/* for centering text messages */seitextjustify(CENTER TEXT, CENTER TEXT);x 二getmaxxO / 2;y = getmaxyO / 2;/* loop through the available colors */for (bkcol~0; bkcol<=maxcolor; bkcol++){/* c l ear the screen */cleardevice();/* select a new background color */ sctbkcolor(bkcol);/* output a messsage */if (bkcol == WHITE)setcolor(EGA_BLUE):sprintf (msg, ''Background color: bkcol);outtextxy (x, y, msg);getch ();}/* clean up */closcgraphO ;return 0;}函数名:setcolor功能:设置当前画线颜色用法:void far setcolor(int color);程序例:ttinclude <graphics. h>^include <stdlib. h>ftinclude <stdio.h>#includc <conio.h>int m3in(void){/* select a driver and mode that supports *//* multiple drawing colors・*/int gdriver = EGA, gmode = EGAI11, errorcode;int color, maxcolor, x, y;char msg [80];/* initialize graphics and local variables */ initgraph(&gdrivcr, &gmode,;/* read result of initialization */errorcode = graphresult();if (errorcode != grOk) /* an error occurred */{printf (''Graphics error: %s\n", grapherrormsg (errorcode)); printf("Press any key to halt:,z);gctchO ;exit(1); /* terminate with an error code */}/* maximum color index supported */ mtixcolor 二getmtixcolor ();/* for centering text messages */settextjustify(CENTER_TEXT, CENTER_TEXT);x = getmaxxO / 2;y = getmaxyO / 2;/* loop through the available colors */for (color=i; color<-maxcolor; color++){/* clear the screen */cleardevice();/* select a new background color */ setcolor(color);/* output a messsage */sprintf (msg, "Color: color): outtextxy(x, y, msg); getch ();}/* clean up */ closcgraph ();return 0;}函数名:setfillstyle功能:设登填充模式和颜色用法:void far setfi 1 lstyle(int pattern, int color); 程序例:^include <graphics. h> 廿include <stdlib. h> ^include〈string. h> ^include <stdio.h> #inelude <conio. h>/* the names of the fill styles supported */ char *fname[] = { "EMPTY_FILL","SOLID FILL","LINE FII丄","LTSLASH FILI/;"SLASII_F1LL", "BKSLASII_FILL","LTBKSLASH_FILL","HATCH FILL","XHATCH_FILL","INTERLEAVE_FILL","WIDE DOT FILL","CLOSE DOT FILI/;"USER FILL" int main(void)/* request auto detection */int gdriver = DETECT, gmode, errorcode;int style, midx, midy;char stylestr[40];/* initialize graphics and 1ocal variables */ initgraph(&gdriver, &gmode, ");/* read result of initialization */errorcodc = graphresult();if (errorcode != grOk) /* an error occurred */{printf("Graphics error: %s\n〃,grapherrormsg(errorcode)); printf("Press any key to halt/):getchO ;exi t (1) ; /* term in ate with an error code */}midx = getmtixx () / 2;midy = getmtixy () / 2;for (style = EMPTY_FILL; style < USER一FILL; style++){/* select the fill style */setfillstyle(style, getmaxcolor());/* convert style into a string */strepy(stylestr, fname[style]);/* fill a bar */bar 3d (0, 0, midx-10, midy, 0, 0);/* output a message */outtextxy (midx, midy, stylestr);/* wait for a key */getch ();cleardevice();}/* clean up */getchO ;closegraph();return 0;函数名:set linestyle功能:设置当前画线宽度和类型用法:void far setlinestyle(int linestype, unsigncd upattern); 程序例:#include <graphics・ h>#include <stdlib. h> #include <string・ h>^include <stdio>h>ttinclude <conio. h> /* the names of the line styles supported */ char amc [] = {,,SOL1D_L1NE,\,,DOTTED_LINE,,I"CENTER LTNE\"DASHED_LINE","USERBnjLINE"};int main(void){/* request auto detection */int gdriver = DETECT, gmode, errorcode;int style, midx, midy, userpat;char stylestr[40];/* initialize graphics and local variables */initgraph(&gdrivg &gmodc,"”);/* read result of initialization */errorcode 二graphrcsult():if (errorcode != grOk) /* an error occurred */{printf("Graphics error: grapherrormsg(errorcode));printf(”Press any key to halt:");getchO ;exit(1); /* terminate with an error code */midx = getmaxx () / 2;midy = getmaxy () / 2;/* a user defined line pattern *//* binary: "0000000000000001" */userpat = 1;for (style=SOLTD LTNE; style<=USERBTT LTNE; style++){/* select the line style */setlinestyle(style, userpat, 1);/* convert style into a string */strcpy(stylestr, InameEstyle]);/* draw a line */linc(0, 0, midx-10, midy);/* draw a rectanglc */rectanglc(0, 0, getmaxx (), getmaxy ());/* output a message */outtextxy (midx, midy, stylestr);/* wait for a key */getchO ;cleardevice0 ;}/* clean up */closegraph();return 0;。
c语言plot函数
![c语言plot函数](https://img.taocdn.com/s3/m/aecb6f3c0640be1e650e52ea551810a6f424c858.png)
c语言plot函数plot函数是C语言中常用的绘图函数之一,它能够通过给定的数据集合,将数据以图形的形式展示出来。
在C语言中,我们可以使用plot函数来绘制各种图形,例如折线图、散点图、柱状图等等。
本文将详细介绍plot函数的用法和一些常见的应用场景。
我们需要了解如何使用plot函数。
在C语言中,plot函数通常需要依赖第三方库来实现,比如使用gnuplot库。
我们可以通过在代码中引入gnuplot库,并且使用相关函数来绘制图形。
下面是一个简单的例子,展示了如何使用plot函数绘制一条简单的折线图。
```c#include <stdio.h>#include <stdlib.h>#include <gnuplot.h>int main(){gnuplot_ctrl *h;h = gnuplot_init();gnuplot_setstyle(h, "lines");gnuplot_plot_x(h, "sin(x)", "Sine function");sleep(2);gnuplot_close(h);return 0;}```在上面的例子中,我们首先初始化一个gnuplot控制器,然后设置绘图的样式为线条样式,接着使用gnuplot_plot_x函数来绘制sin(x)函数的图像,并且给图像添加了标题"Sine function"。
最后,我们使用gnuplot_close函数来关闭gnuplot控制器。
通过上面的例子,我们可以看到plot函数的基本用法。
我们可以通过设置不同的样式、添加不同的数据集合以及设置标题等来实现更加丰富多样的图形展示效果。
接下来,我们将介绍一些常见的plot 函数的应用场景。
plot函数可以用来展示数据的趋势变化。
比如我们可以使用plot函数来绘制某个指标随时间变化的折线图,从而直观地观察到指标的趋势。
C语言图形的填充函数
![C语言图形的填充函数](https://img.taocdn.com/s3/m/b6f75bb665ce05087632138a.png)
C语言图形的填充函数一、先画轮廓再填充TURBO C提供了一些先画出基本图形轮廓, 再按规定图模和颜色填充整个封闭图形的函数。
在没有改变填充方式时, TURBO C以默认方式填充。
下面介绍这些函数。
void bar(int x1, int y1, int x2, int y2);确定一个以(x1, y1)为左上角, (x2, y2)为右下角的矩形窗口, 再按规定图模和颜色填充。
说明: 此函数不画出边框, 所以填充色为边框。
void bar3d(int x1,int y1,int x2,int y2,int depth,int topflag);当topflag为非0时, 画出一个三维的长方体。
当topflag为0时, 三维图形不封顶, 实际上很少这样使用。
说明: bar3d()函数中, 长方体第三维的方向不随任何参数而变, 即始终为45度的方向。
void pieslice(int x,int y,int stangle,int endangle,int radius);画一个以(x, y)为圆心, radius为半径, stangle为起始角度, endangle 为终止角度的扇形, 再按规定方式填充。
当stangle=0, endangle=360 时变成一个实心圆, 并在圆内从圆点沿X轴正向画一条半径。
void sector(int x, int y, int stanle, intendangle, int xradius, int yradius);画一个以(x, y)为圆心分别以xradius, yradius为x轴和y轴半径, stangle为起始角, endangle为终止角的椭圆扇形, 再按规定方式填充。
二、设定填充方式TURBO C有四个与填充方式有关的函数。
下面分别介绍:void setfillstyle(int pattern, int color);color的值是当前屏幕图形模式时颜色的有效值。
c语言putimage函数
![c语言putimage函数](https://img.taocdn.com/s3/m/b46194d105a1b0717fd5360cba1aa81144318fec.png)
c语言putimage函数
putimage函数是C语言图形库中的一个函数,用于将一张图片输出到指定的坐标位置上。
该函数的原型为:
void putimage(int x,int y,void *ptr,int op);
其中,x和y分别表示输出图片的左上角坐标位置,ptr表示指向图片数据的指针,op表示图片的输出模式。
在使用putimage函数之前,需要先初始化图形库,通过调用initgraph函数来创建一个窗口并初始化图形库。
使用putimage函数输出图片的步骤如下:
1. 加载图片数据到内存中,通常使用loadimage函数来实现。
2. 调用putimage函数,将图片数据指针以及输出位置传递给函数。
3. 根据需要,可以通过设置op参数来进行图片的缩放或旋转等操作。
putimage函数是C语言图形库中比较常用的函数之一,可以方便地实现各种图形、动画和游戏等应用程序的开发。
- 1 -。
C语言中图形函数及其用法
![C语言中图形函数及其用法](https://img.taocdn.com/s3/m/cc1ac42f7375a417866f8f2b.png)
例如:
arc(300,200,90,180,200);的结果是以点(300,200)为圆心,200为半径,从90度到180度画了四分之一圆弧。当圆弧的起始角angs=0,终止角angs=360时,则可以画出一个整圆。
14.8.4 图形属性控制
图形的属性控制包括控制颜色和线型。颜色有背景色和前景色之分。背景色指屏幕的颜色(即绘图时的底色),前景色指绘图时图形线条所用的颜色。
任何绘图函数都是在当前的颜色(包括背景色和前景色)和线型的状态下进行绘图的。前面所举的例子中没有提当前的颜色和线型,是因为用了系统的缺省值(系统的缺省值是:背景色为黑色,前景色为白色,线型为实线)。
cleardevice();
14.8.3 绘图函数
绘图函数是进行图形操作的基础。用象素点几乎可以画出任何图形,但效率太低。为此TC提供了大量的基本绘图函数,以方便图形设计。
在使用绘图函数时,要随时注意画图的"当前点位置",它是绘图的起始位置。也就是说,图形总是从当前点开始画。画完一个图形后,有时当前点的位置不变,仍在原来的位置;有时则要把当前点移到新的位置。此外,为了从指定位置开始作图,有时需要先改变当前点位置,然后再作图。在调用绘图函数的时候要注意这些问题。
ellipse()函数
函数ellipes()用于画椭圆弧或椭圆。其调用格式为:
ellipse(x,y,angs,ange,xr,yr);
函数的参数均为整型。其中:
x,y为椭圆的中心坐标,angs,ange分别为椭圆弧的起始角和终止角(单位为度),xr,yr分别为椭圆的水平轴半轴和垂直轴半轴。如果args=0,ange=360,则可以画出一个完整的椭圆。另外:
真正实现C语言绘制数学函数图像
![真正实现C语言绘制数学函数图像](https://img.taocdn.com/s3/m/ca6b6cf2700abb68a982fb7d.png)
用C语言画函数图像横纵坐标单位长度比校正(3:5)真正的余弦函数#include<math.h>#include<stdio.h>int sishewuru(float a);void main(){int n = 450;float a[500], b[500];int i,j;a[0] = b[0] = 0;for (i = 1; i < n; i++)a[i] = a[i - 1] + 0.01;b[i] = cos(a[i]);}int A[500],B[500];for (i = 0; i < n; i++){//printf("sin(%f)=%f\n", a[i], b[i]);a[i] = 100 * a[i];b[i] = 55 * b[i];A[i] = sishewuru(a[i]);B[i] = sishewuru(b[i])+60;//printf("sin(%d)=%d\n", A[i], B[i]);}for ( i = 100; i >=0; i--){for ( j = 0; j < n; j++){if (i==B[j]){printf("*");}else{printf(" ");}}printf("\n");}}int sishewuru(float a){int m;if (a-floor(a)<0.5){m = a;return m;}else{m = a + 1;return m;}}1.调节输出框大小,字符显示大小2.确定函数的定义域3.确定定义域上的步长4.计算函数值5.确定函数值放大系数6.确定定义域恰好落在显示的区间内7.确定坐标的单位长度与字符实际长度之间的换算关系8.确定打点的顺序与坐标的关系定义域在),(ππ-的正弦函数图像定义域在),(ππ-的正切函数图像定义域在),(ππ22-的倒正切函数图像#include <math.h>#include <stdio.h>int sishewuru(float a);void main() {float minx = -2*3.14,maxx = 2*3.14,dx,x[500],y[500],k;//确定定义区间int lx = 500, i,j, Y[500]; dx = (maxx - minx) / 450; x[0] = minx; y[0] = 0.1 / sin(x[1]);for (i = 1; i <lx; i++) {x[i] = x[i - 1] + dx;y[i] =0.1/sin(x[i]);}k = 0.6/ dx;//扩大系数for (i = 0; i < lx; i++) {Y[i] = sishewuru(k*y[i]);//printf("%d\n", Y[i]);}for (i = 0; i <130; i++){for (j = 0; j < lx; j++) {if (i == -Y[j]+65) { printf("*"); }else{printf(" ");}}printf("\n");} } int sishewuru(float a ) {int m;if (a -floor(a )<0.5){m = a ;return m;}else{m = a + 1;return m;} }定义域在),(ππ22-半径为π的圆#include<math.h>#include<stdio.h>int sishewuru(float a);void main(){float minx = -2*3.14,maxx = 2*3.14,dx,x[500],y[2*500],k,r=0.5*maxx;//确定定义区间int lx = 500, i,j, Y[2*500];dx = (maxx - minx) / 450;x[0] = minx;y[0] = 0.1 / sin(x[1]);for (i = 1; i <lx; i++){x[i] = x[i - 1] + dx;y[i] =sqrt(r*r-x[i]*x[i]);//确定函数表达式y[lx + i] = -1*y[i];}k = 0.6/ dx;//扩大系数for (i = 0; i < 2*lx; i++){Y[i] = sishewuru(k*y[i]);//printf("%d\n", Y[i]);}for (i = 0; i <136; i++){for (j = 0; j < lx; j++){if (i == -Y[j] + 68 || i == -Y[j+lx] + 68){printf("*");}else{printf(" ");}}printf("\n");}}int sishewuru(float a){int m;if (a-floor(a)<0.5){m = a;return m;}else{m = a + 1;return m;}}。
C语言画图及小动画制作(graphisc.h函数入门)
![C语言画图及小动画制作(graphisc.h函数入门)](https://img.taocdn.com/s3/m/2cb1faf9910ef12d2af9e73e.png)
C 语言 graphics.h 的使用
写此教程的目的是为了给 Sarah 一点小小的入门砖。本人非牛,出错在所 难免。敬请原谅。
我的联系方式:qq:617251408
博客:/gracefulphoenix 学了这么长时间的 C 语言,总不能还停留在对话框上。因此想着弄点图形出来。而 C 语言下有个 graphics.h 这个函数,就是干这事的。我们一起探索一下。 然而,毕竟是 DOS 时代的产物,VC 是不支持此图形库的。因此我们要用 TC 去编译。到 网上去下载一个 win-tc2.0,我们开始我们的旅程。 打开 win-tc 的界面:
pattern,int width);
说明: 参数 style 为线型取值,也可以用相应名称表示,如表 1-10 中所示。
参数 pattern 用于自定义线图样,它是 16 位(bit)字,只有当 style=USERBIT_LINE(值
为 1)时,pattern 的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显
int main(void) {
initgr(); /* BGI 初始化 */
/*****此部分添加你自己的代码,例如 line(25, 25, 220, 220);
share your knowledge with the world
circle(100, 100, 50); 等等*****/ line(20,20,300,300); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复 TEXT 屏幕模式 */ return 0; }
名称
取值
C语言中的形绘制方法
![C语言中的形绘制方法](https://img.taocdn.com/s3/m/6da062c303d276a20029bd64783e0912a2167c84.png)
C语言中的形绘制方法C语言作为一种广泛使用的编程语言,在计算机科学和软件工程领域有着重要的地位。
除了其强大的计算和算法处理能力外,C语言还提供了各种绘制形状的方法,可以通过编程实现各种图形效果。
本文将介绍C语言中常用的形绘制方法,以帮助读者更好地理解和运用这些技术。
1. 点的绘制方法在C语言中,点是最基本的图形元素之一。
我们可以使用坐标系来描述点的位置,其中横坐标表示点在水平方向上的位置,纵坐标表示点在垂直方向上的位置。
在C语言中,我们可以使用图形库(如graphics.h)提供的函数来绘制点,例如:```cputpixel(int x, int y, int color);```这个函数可以在指定位置绘制一个点,其中x和y是点在坐标系中的横纵坐标,color表示点的颜色。
通过循环调用putpixel函数,我们可以绘制出多个点,从而形成任意形状。
2. 线的绘制方法线是由多个相邻的点连接而成的形状。
在C语言中,我们可以使用直线的斜率和截距来描述线的方程,通过计算斜率和截距,可以确定线上各个点的位置。
除了使用直线方程计算点的位置外,C语言还提供了一些绘制线的函数,例如:```cline(int x1, int y1, int x2, int y2);```这个函数可以在坐标系中绘制一条起点为(x1, y1),终点为(x2, y2)的直线。
通过调用line函数,我们可以绘制出直线形状。
3. 矩形的绘制方法矩形是由四条线段组成的形状,有时我们需要在C语言中绘制矩形以实现特定的效果。
在C语言中,我们可以使用以下函数来绘制矩形:```crectangle(int left, int top, int right, int bottom);```这个函数可以在坐标系中绘制一个左上角坐标为(left, top),右下角坐标为(right, bottom)的矩形。
通过调用rectangle函数,我们可以绘制出矩形形状。
cimage draw函数
![cimage draw函数](https://img.taocdn.com/s3/m/21100eb6900ef12d2af90242a8956bec0975a58a.png)
cimage 是一个用于处理图像的C语言库。
它提供了各种函数来处理图像数据,包括读取、写入、转换、绘制等。
在cimage 中,draw 函数通常用于在图像上绘制图形或文本。
具体的函数原型和参数可能会根据库的不同版本而有所变化,但一般来说,draw 函数会接受以下类型的参数:cimage *image:要绘制到的图像的指针。
int x, int y:绘制的起始位置(通常是左上角)。
void *data:要绘制的数据,这可以是图形数据或文本数据。
其他参数:可能包括绘制选项、颜色等。
例如,如果要在图像上绘制一个红色的矩形,可以使用类似于以下的代码:c#include <cimage.h>int main() {cimage image;int width = 640, height = 480;image_init(&image, width, height);color_t red = {255, 0, 0}; // RGB for reddraw_rectangle(&image, 50, 50, 200, 100, red); // Draw a red rectangle starting at (50,50) with width 200 and height 100// ... save or display the image ...image_free(&image);return 0;}注意:以上代码是一个简化的示例,可能需要根据实际使用的cimage 库版本进行适当的调整。
在实际使用中,还需要处理图像的加载、保存和显示等操作。
c语言circle画圆函数
![c语言circle画圆函数](https://img.taocdn.com/s3/m/f8179f22a200a6c30c22590102020740be1ecdef.png)
C语言circle画圆函数介绍在C语言中,我们可以使用数学库函数和循环结构来实现画圆的功能。
本文将详细介绍如何使用C语言编写一个画圆的函数,并提供代码示例和详细解释。
基本原理画圆的基本原理是通过计算圆上每个点的坐标,并将其绘制在屏幕上。
在C语言中,我们可以使用数学库函数来计算圆上的点的坐标,然后使用循环结构将这些点绘制出来。
代码示例下面是一个简单的C语言程序,用于实现画圆的函数:#include <stdio.h>#include <math.h>void drawCircle(int centerX, int centerY, int radius) {int x, y;for (x = centerX - radius; x <= centerX + radius; x++) {y = centerY + sqrt(radius * radius - (x - centerX) * (x - centerX));printf("(%d, %d)\n", x, y);}}函数解析该程序中的drawCircle函数接受三个参数:圆心的x坐标、圆心的y坐标和半径。
函数内部使用一个循环结构来计算圆上的点的坐标,并将其打印出来。
循环结构的起始点为圆心的x坐标减去半径,终止点为圆心的x坐标加上半径。
在每次循环中,我们使用数学库函数sqrt来计算圆上相应x坐标的y坐标。
这里使用了圆的方程y = sqrt(radius * radius - (x - centerX) * (x - centerX))。
下面是一个调用drawCircle函数的示例:int main() {int centerX = 0;int centerY = 0;int radius = 5;drawCircle(centerX, centerY, radius);return 0;}参数说明•centerX:圆心的x坐标。
用C语言实现画图程序
![用C语言实现画图程序](https://img.taocdn.com/s3/m/f2c078fc941ea76e58fa0438.png)
一、选题背景:画图程序,通过画图中的功能绘制出美丽的图案。
二、设计思想:利用数学三角函数制作山峰和花朵出一条曲线、用画圆函数绘制太阳的形状、再进行颜色填充用绘制直线的函数来绘制比较粗的光线、用矩形函数画出矩形的边框、再画地球、直线画赤道、弧线画南北极和钟表的刻度盘。
三、流程图:四、程序清单:#include"graphics.h" /*调用图形库函数*/#include"math.h" /*调用数学函数*/#include"stdio.h" /*调用标准I/O函数*/#define PI 3.141596 /*宏定义PI字符串*/main() /*主函数*/{float i,x,y; /*定义单精度浮点型变量i,x,y*/int gdriver=DETECT,gmode,a=1; /*定义整型变量gdriver,gmode*/initgraph(&gdriver,&gmode,"d:\\tc"); /*定义变量后,初始化图形系统*/cleardevice();setbkcolor(a); /*背景颜色*/printf("\n");printf("\n"); /*C 语言图形函数*/printf("\n");printf(" the following math functions were used in the main function.\n");printf(" setbkcolor(int color);\n"); /* 背景颜色*/printf(" setcolor(int color);\n"); /* 画笔颜色*/printf(" putpexel(x,y,color);\n"); /* 画像素点*/printf(" line(x1,y1,x2,y2)\n"); /* 直线函数*/printf(" rectangle(xl,yt,xr,yb)\n");; /* 矩形函数*/printf(" arc(x,y,as,ae,r)\n"); /* 圆弧函数*/printf(" circle(x,y,r)\n"); /*圆形函数*/printf(" ellipse(x,y,as,ae,rx,ry)\n"); /* 椭圆函数*/printf("\n"); /* 按任意键开始演示*/setcolor(2);setlinestyle(0,0,3);rectangle(4,4,635,475); /*绘制矩形框*/getch();cleardevice();printf("\n"); /* 模拟手工画图*/printf("\n"); /* 函数曲线图形*/setcolor(3);setlinestyle(3,3,3);rectangle(4,4,635,475); /*绘制图纸边框*/for (i=0;i<=2*PI;i+=PI/99999){putpixel(40*i,170-21*i*sin(1.6*i),2);putpixel(40.3*i,170-22*i*sin(1.6*i),3);putpixel(40.6*i,170-23*i*sin(1.6*i),10);}for (i=0;i<=2*PI;i+=PI/99999) /*绘制花朵*/{putpixel(118-15*cos(4*i)*cos(i),160-15*cos(4*i)*sin(i),14);putpixel(118-25*cos(4*i)*cos(i),160-25*cos(4*i)*sin(i),13);putpixel(118-35*cos(4*i)*cos(i),160-35*cos(4*i)*sin(i),10);}for (i=0;i<=PI;i+=PI/99999){putpixel(320-315*cos(i),360-95*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-96*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-97*sin(i),11); /*绘制拱桥*/ }for (a=70;a<=570;a+=50)for (i=0;i<=PI;i+=PI/9999){putpixel(a-25*cos(i),360-40*sin(i),11); /*绘制桥*/}}for (x=0;x<=640;x+=0.001){putpixel(8*x,380-8*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=600;x+=0.001){putpixel(10*x,405-10*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=560;x+=0.001){putpixel(12*x,430-12*sin(x),9); /*绘制曲线水流*/}for(x=60;x<=80;x+=0.01){ellipse(270,360,180 ,0,160-x,25);}for (x=0;x<=520;x+=0.001){putpixel(8*x,455-8*sin(x),9); /*绘制曲线水流*/}setlinestyle(0,0,1);setfillstyle(1,12);fillellipse(320,60,25,25); /*绘制太阳*/for (x=280;x>=250;x-=0.0001)putpixel(x,60,12); /*绘制阳光线*/}for (x=360;x>=390;x+=0.0001){putpixel(x,60,12); /*绘制阳光线*/}for (y=24;y>=12;y-=0.0001){putpixel(320,y,12); /*绘制阳光线*/}for (y=96;y<=108;y+=0.0001){putpixel(320,y,12); /*绘制阳光线*/}setlinestyle(3,0,1);setcolor(12);for (i=0;i<=2*PI;i+=PI/12) /*绘制阳光线*/{line(320+40*cos(i),60-36*sin(i),320+70*cos(i),60-48*sin(i)); for (x=0;x<=55555;x+=0.1){y=y+x; /*延时控制*/}}setcolor(13);setlinestyle(0,0,1);rectangle(460,100,620,200); /*绘制地图框(矩形)*/ setcolor(11);setlinestyle(0,0,3);ellipse(540,150,0,360,77,48); /*绘制地球(椭圆)*/circle(540,150,46); /*绘制经线(圆形)*/ellipse(540,100,210,330,45,16); /*绘制北极圈(椭圆弧)*/ellipse(540,200,30,150,45,16); /*绘制南极圈(椭圆弧)*/setcolor(14);setlinestyle(3,0,1);line(460,150,620,150); /*绘制赤道(水平线)*/line(540,100,540,200); /*绘制经线(垂直线)*/setcolor(11); setlinestyle(0,0,1);for (i=0;i<=2*PI;i+=PI/300){putpixel(590-35*cos(i),50-35*sin(i),11); /*绘制0.1秒刻度*/}setcolor(14);setlinestyle(0,0,1);circle(590,50,2); /*绘制中心轴*/setcolor(13);setlinestyle(0,0,3);for (i=0;i<=2*PI;i+=PI/6){line(590+25*sin(i),50-25*cos(i),590+30*sin(i),50-30*cos(i));/*绘制小时*/for (x=0;x<=5555;x+=0.001){y=y+x; /*延时控制*/}getch();closegraph(); }五、主要解决问题的方法及技术关键1、主要问题及解决方法✓抛物线的画法用插补法画抛物线。
c语言流程图中的函数
![c语言流程图中的函数](https://img.taocdn.com/s3/m/f10ca9900d22590102020740be1e650e52eacf0e.png)
c语言流程图中的函数下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 函数调用。
程序执行期间,遇到函数调用语句时,程序跳转到该函数的入口地址处执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言中的画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。
本节对这些函数作一全面的介绍。
1、画点I. 画点函数 void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点。
对于颜色color 的值可从表3中获得而对x, y是指图形象元的坐标。
在图形模式下,是按象元来定义坐标的。
对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。
屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。
TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。
关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。
II、有关坐标位置的函数int far getmaxx(void);返回x轴的最大值。
int far getmaxy(void); 返回y轴的最大值。
int far getx(void); 返回游标在x轴的位置。
void far gety(void); 返回游标有y轴的位置。
void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。
void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。
2、画线I. 画线函数TURBO C提供了一系列画线函数,下面分别叙述:void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。
void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。
void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。
void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。
void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。
在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周,依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。
void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,画出一个完整的椭圆。
void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。
void far drawpoly(int numpoints, int far *polypoints); 画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。
polypoints整型数组必须至少有2 倍顶点数个无素。
每一个顶点的坐标都定义为x,y,并且x在前。
值得注意的是当画一个封闭的多边形时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。
下面举一个用drawpoly()函数画箭头的例子。
#include<stdlib.h>#include<graphics.h>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;initgraph(&gdriver, &gmode, "c:\\caic\\bgi");setbkcolor(BLUE);cleardevice();setcolor(12); /*设置作图颜色*/drawpoly(8, arw); /*画一箭头*/getch();closegraph();return 0;}II、设定线型函数在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。
线型包括:宽度和形状。
其中宽度只有两种选择:一点宽和三点宽。
而线的形状则有五种。
下面介绍有关线型的设置函数。
void far setlinestyle(int linestyle,unsigned upattern,int thickness); 该函数用来设置线的有关信息,其中linestyle是线形状的规定,见下表。
有关线的形状(linestyle)━━━━━━━━━━━━━━━━━━━━━━━━━符号常数数值含义─────────────────────────SOLID_LINE 0 实线DOTTED_LINE 1 点线CENTER_LINE 2 中心线DASHED_LINE 3 点画线USERBIT_LINE 4 用户定义线━━━━━━━━━━━━━━━━━━━━━━━━━thickness是线的宽度,见下表。
有关线宽(thickness)━━━━━━━━━━━━━━━━━━━━━━━━━符号常数数值含义─────────────────────────NORM_WIDTH 1 一点宽THIC_WIDTH 3 三点宽━━━━━━━━━━━━━━━━━━━━━━━━━对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。
此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。
void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:struct linesettingstype{int linestyle;unsigned upattern;int thickness;}例如下面两句程序可以读出当前线的特性struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。
如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。
如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。
因此,当线的特性不变,进行两次画线操作相当于没有画线。
有关线型设定和画线函数的例子如下所示。
#include<stdlib.h>#include<graphics.h>int main(){int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, "c:\\caic\\bgi");setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*设置三点宽实线*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0xaaaa, 1);/*设置一点宽用户定义线*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;}initgraph函数名: initgraph()功能: 初始化图形系统函数原型: void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver);头文件:graphics.h程序例:#include "graphics.h"#include "stdio.h"int main(void){/* request auto detection */int gdriver = DETECT, gmode, errorcode;/* initialize graphics mode */initgraph(&gdriver, &gmode, "");/* read result of initialization */errorcode = graphresult();if (errorcode != grOk) /* an error occurred */{printf("Graphics error: %s\n", grapherrormsg(errorcode));printf("Press any key to halt:");getch();exit(1); /* return with error code */}/* draw a line */line(0, 0, getmaxx(), getmaxy());/* clean up */getch();closegraph();return 0;}绘图程序例下面的程序可以绘出如下三个图形:源程序如下:#include<stdio.h>#include<graphics.h>#include<math.h>#define P1 180int graphdriver,graphmode;float rr,rs,n;void main(){void snail();void roundshell();void ammonite();clrscr();gotoxy(1,6);printf("Plot your article graph. \n");printf("=======================================================\n");gotoxy(1,9);printf("Enter roundshell radius:(1.0----10000.0)\n");// 输入贝壳图半径sanf("%f",&rr);printf("Enter snail radius:(1.0----10000.0)\n");// 输入蜗牛图半径scanf("%f",&rs);printf("Enter ammonite radius even:(2----6)\n");// 输入菊石图半径scanf("%f",&n);roundshell(); // 调用函数绘出贝売图snail(); // 调用函数绘出蜗牛图ammonite(); // 调用函数绘出菊石图getch(); // 使图形停留在屏幕上closegraph(); // 切换回到文本模式}void roundshell() // 画贝壳图{int i,wx1,wx2,wy1,wy2,sx,sy;struct arccoordstype ArcInfo;float x1,x2,y1,y2,x,y,k1,k2,the,theta,r,minx,maxx,miny,maxy,sx0,sy0,sxr,syr;the=2*Pi/60; // 角度增量maxx=rr*cos(the*0.017453); // 赋初值maxy=rr*sin(the*0.017453); // 赋初值minx=rr*cos(the*0.017453); // 赋初值miny=rr*sin(the*0.017453); // 赋初值for(i=0;i<=59;++i){the=2*Pi*i/60;x=rr*cos(the*0.017453);y=rr*sin(the*0.017453);if(x<minx)minx=x; // 求出最小x值if(x>maxx)maxx=x; // 求出最大x值if(y<miny)miny=y; // 求出最小y值if(y>maxy)maxy=y; // 求出最大y值}x1=minx; // 窗口的左边界x2=maxx; // 窗口的右边界y1=miny; // 窗口的下边界y2=maxy; // 窗口的上边界wx1=56; // 视口的左边界wx2=146; // 视口的右边界wy1=56; // 视口的下边界wy2=146; // 视口的上边界k1=(wx2-wx1)/(x2-x1); // 窗口到视口变换x方向的比例系数k2=(wy2-wy1)/(y2-y1); // 窗口到视口变换y方向的比例系数x=rr*cos(the*0.017453);y=rr*sin(the*0.017453);sxr=wx1+(x-x1)*k1;syr=wy1+(y-y1)*k2;sx0=wx1+(0-x1)*k1;sy0=wy1+(0-y1)*k2;r=sqrt((sxr-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0)) // 求画圆弧的半径graphdriver=DETECT;initgraph(&graphdriver,&graphmode,"\\bc\\bgi");setcolor(WHITE);rectangle(1,1,240,200);for(i=0;i<=59;++i)theta=2*Pi*i/60;x=rr*cos((2*Pi-theta)*0.017453); // 用户坐标下,贝壳上一系列半圆圆心x坐标y=rr*sin((2*Pi-theta)*0.017453); // 用户坐标下,贝壳上一系列半圆圆心y坐标sx=wx1+(x-x1)*k1; // 转换成屏幕上相应的半圆圆心x坐标sy=wy1+(y-y1)*k2; // 转换成屏幕上相应的半圆圆心y坐标setcolor(WHITE);arc(sx,sy,theta,theta+Pi,r); // 画出半圆getarccoords(&ArcInfo); // 获取所画半圆端点的信息line(sx,sy,ArcInfo.xstart,ArcInfo.yend); // 由半圆圆心到半圆弧起点画一线段line(sx,sy,ArcInfo.xend,ArcInfo.yend); // 由半圆圆心到半圆弧终点画一线段}}void snail() // 画蜗牛图{int i,wx1,wx2,wy1,wy2,theta,sx,sy;struct arccoordstype ArcInfo;float x1,x2,y1,y2,x,y,k1,k2,sxr,syr,minx,maxx,miny,maxy,sx0,sy0,r;theta=2*Pi/60;maxx=rs*cos((theta+Pi)*0.017453); // 赋初值maxy=rs*sin((theta+Pi)*0.017453); // 赋初值minx=rs*cos((theta+Pi)*0.017453); // 赋初值miny=rs*sin((theta+Pi)*0.017453); // 赋初值for(i=0;i<=49;++i){theta=2*Pi*i/60;x=rs*cos((theta+Pi)*0.017453);y=rs*sin((theta+Pi)*0.017453);rs=rs*1.012;if(x>maxx) maxx=x; // 求窗口x方向最大值if(y>maxy) maxy=y; // 求窗口y方向最大值if(x<minx) minx=x; // 求窗口x方向最小值if(y<miny) miny=y; // 求窗口y方向最小值}x1=minx; // 窗口左边界赋值x2=maxx; // 窗口右边界赋值y1=miny; // 窗口下边界赋值y2=maxy; // 窗口上边界赋值wx1=280; // 取定视口左边界wx2=330; // 取定视口右边界wy1=195; // 取定视口下边界wy2=245; // 取定视口上边界k1=(wx2-wx1)/(x2-x1);// 窗口到视口变换x方向的比例系数k2=(wy2-wy1)/(y2-y1);// 窗口到视口变换y的比例系数sx0=wx1+(0-x1)*k1;sy0=wy1+(0-y1)*k2;setcolor(WHITE);setfillstyle(0,0);bar3d(200,100,455,300,0,0);// 下面语句的注释见画贝壳函数roundshell()中相应的说明{theta=2*Pi*i/60;x=rs*cos((Pi-theta)*0.017453);y=rs*sin((Pi-theta)*0.017453);sxr=wx1+(x-x1)*k1;syr=wy1+(y-u1)*k2;sx=wx1+(x-x1)*k1;sy=wy1+(y-y1)*k2;setcolor(WHITE);r=sqrt((sxr-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0));arc(sx,sy,theta,theta+Pi,r);getarccoords(&ArcInfo);line(sx,sy,ArcInfo.xstart,ArcInfo.ystart);line(sx.sy,ArcInfo.xend,ArcInfo.yend);rs=rs*1.012; // 这里使半圆半径不断增大}}void ammonite() // 画菊石图{int xasp,yasp;int i,wx1,wx2,wy1,wy2,theta,sx,sy;struct arccoordstype ArxInfo;// 这个结构类型在头文件graphics.h中可以查到float x1,x2,y1,y2,x,y,minx,maxx,sry,l,r,miny,maxy,k1,k2,aspr,sx0,sy0,sxr;getaspectratio(&xasp,&yasp);l=exp(0.02*50);minx=l*cos(0.2*50); // 赋初值miny=l*sin(0.0*50); // 赋初值maxx=l*cos(0.2*50); // 赋初值maxy=l*sin(0.2*50); // 赋初值for(i=50;i<=254;++i){l=exp(0.02*i)x=l*cos(0.2*i);y=l*sin(0.2*i);if(x<minx) mix=x; // 求窗口x方向最小值if(x>maxx) maxx=x; // 求窗口x方向最大值if(y<miny) miny=y; // 求窗口y方向最小值if(y>maxy) maxy=y; // 求窗口y方向最大值}x1=minx; // 窗口左边界赋值x2=maxx; // 窗口右边界赋值y1=miny; // 窗口下边界赋值y2=maxy; // 窗口上边界赋值wx1=460; // 取定视口左边界wx2=590; // 取定视口右边界wy1=260; // 取定视口下边界wy2=390; // 取定视口上边界k1=(wx2-wx1)/(x2-x1); // 变换比例k2=(wy2-wy1)/(y2-y1); // 变换比例sx0=wx1+(0-x1)*k1;sy0=wy1+(0-y1)*k2;setcolor(WHITE);setfillstyle(0,0);bar3d(415,200,636,460,0,0);for(i=50;i<=254;++i){l=exp(0.02*i);x=l*cos(6.2831852-0.2*i); // 用户坐标下圆心x坐标y=l*sin(6.2831852-0.2*i); // 用户坐标下圆心y坐标sxr=wx1+(x-x1)*k1;syr=wy1+(y-y1)*k2;sx=wx1+(x-x1)*k1; // 屏幕坐标下圆心x坐标sy=wy1+(y-y1)*k2; // 屏幕坐标下圆心y坐标r=sqrt((sxr-sx0)*(sxr-sx0)+(syr-sy0)*(syr-sy0));r=r/n; // 画圆的半径setcolor(WHITE);setfillstyle(0,0); // 设置填充图样fillellipse(sx,sy,r,r*aspr); // 画填充圆}}。