zoukankan      html  css  js  c++  java
  • C语言图形函数

    C语言帮助文档

    函数:

    文字处理

    1函数名: remove

    头文件:#include <stdio.h>

    功  能: 删除一个文件

    用  法: int remove(char *filename);

    2函数名: rename

    头文件:#include <stdio.h>

    功  能: 重命名文件

    用  法: int rename(char *oldname, char *newname);

    3函数名: perror

    头文件:#include <stdio.h>

    功  能: 系统错误信息

    用  法: void perror(char *string);

    函数说明:perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 错误 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。

      在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。

     

    菜单管理

    1 函数名: textbackground

    头文件#include <conio.h>

    功  能: 选择新的文本背景颜色

    用  法: void textbackground(int color);

    2 函数名: textcolor

    头文件#include <conio.h>

    功  能: 在文本模式中选择新的字符颜色

    用  法: void textcolor(int color);

    3 函数名: gotoxy

    头文件#include <conio.h>

    功  能: 在文本窗口中设置光标

    用  法: void gotoxy(int x, int y);

    4 函数名: cprintf  

    头文件#include <conio.h>

    功  能: 送格式化输出至屏幕

    用  法: int cprintf(const char *format[, argument, ...]);

    5函数名: window

    头文件:#include <conio.h>

    功  能: 定义活动文本模式窗口

    用  法: void window(int left, int top, int right, int bottom);

    6函数名: kbhit

    头文件:#include <conio.h>

    功  能: 检查当前按下的键

    用  法: int kbhit(void);

    函数说明:kbhit() 在执行时,检测是否有按键按下,有按下返回键值

    没有按下返回0;是非阻塞函数

    getch() 在执行时,检测按下什么键,如果不按键该函数不返回;是阻塞函数

    7函数名: bioskey

    头文件:#include <stdio.h>

    功  能: 直接使用BIOS服务的键盘接口

    用  法: int bioskey(int cmd);

    函数说明:当cmd为1时,bioskey()检测是否有键按下。没有键按下时返回0;有键按下时返回按键码(任何按键码都不为0),但此时并不将检测到的按键码从键盘缓冲队列中清除。 是非阻塞参数。

    当cmd为0时,bioskey()返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除。如果键盘缓冲队列为空,则一直等到有键按下,才将得到的按键码返回。是阻塞调用。

    8函数名: puttext

    头文件:#include <conio.h>

    功  能: 将文本从存储区拷贝到屏幕

    用  法: int puttext(int left, int top, int right, int bottom, void *source);

    9 函数名: gettext

    头文件:#include <conio.h>

    功  能: 将文本方式屏幕上的文本拷贝到存储区

    用  法: int gettext(int left, int top, int right, int  bottom, void *destin);

    图形设计

    直线和线型函数

       有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。

       有两种线宽及几种线型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。

     

    1. line() 画线函数

    功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。

    用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy);

    说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。

           此函数相应的头文件为graphics.h

    返回值: 无

    例: 见函数60.linerel()中的实例。

     

    2. setlinestyle() 设置线型函数

    功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。

    用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int width);

    说明: 参数style为线型取值,也可以用相应名称表示,如表1-10中所示。

           参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0xFFFF,则画实线;pattern=0x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0xFF00和0xF00F,当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。

        参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。

        若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。

        Turbo C提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。

     

    表1-10  线型

    -----------------------------------------------------

       名        称      取 值         含    义

    -----------------------------------------------------

       SOLID_LINE          0             实线

       DOTTED_LINE         1             点线

       CNTER_LINE          2             中心线

       DASHED_LINE         3             虚线

       USERBIT_LINE        4             用户自定义线型

    -----------------------------------------------------

     

    表1-11 线宽

    -----------------------------------------------------------

       名         称            取  值      说   明

    -----------------------------------------------------------

       NORM_WIDTH(常宽)           1         一个像素宽(缺省值)

       THICK_WIDTH(加宽)          3         三个像素宽

    -----------------------------------------------------------

     

    这个函数的头文件是graphics.h

    返回值: 无

    例: 下面的程序显示了BC中所提供的线型图样:

    #i nclude<graphics.h>

    void main()

    {

       int driver,mode;

       driver=DETECT;

       mode=0;

       initgraph(&driver,&mode,"");

       for(i=0;i<4;i++)

       {

          setlinestyle(i,0,1);

          line(i*50,200,i*50+60,200)

       }

       getch();

       restorecrtmode();

    }

     

    arc()

    画圆弧函数

    arc()

    功能: 函数arc()使用当前绘图色并以实线画一圆弧。

    用法: 函数调用方式为void arc(int x,int y,int startangle,int endangle,int radius);

    说明: 参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。同往常一样,360度与0度重合。角度按逆时针方向增加,但并不要求终止角一定比起始角大。例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。大于360度可作为参数,它将被化到0度 ̄360度范围里。函数arc()能画封闭圆,只要取起始角为0度,终止角为360度即可。此函数中,屏显纵横比可自动调节。

       arc()函数对应的头文件为graphics.h

    返回值: 无

    例: 以(200,200)为圆心,100为半径,从0度到120度画圆弧:

    #i nclude<graphics.h

    void main()

    {

       int driver,mode;

       driver=DETECT;

       mode=0;

       initgraph(&drivwer,&mode,"");

       setcolor(WHITE);

       arc(200,200,0,120,100);

       getch();

       restorecrtmode();

    }

     

    屏幕颜色的设置和清屏函数

        对于图形模式的屏幕颜色设置, 同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数。

        设置背景色:        void far setbkcolor( int color);

        设置作图色:        void far setcolor(int color);

    其中color 为图形方式下颜色的规定数值, 对EGA, VGA显示器适配器, 有关颜色的符号常数及数值见下表所示。

    清除图形屏幕内容使用清屏函数, 其调用格式如下:

         voide far cleardevice(void);

    实现动画的两个函数

    void far getimage(int xl,int yl, int x2,int y2, void far *mapbuf);

       void far putimge(int x,int,y,void * mapbuf, int op);

        这两个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到

    屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl), 右上角为(x2,

    y2)的图形屏幕区域内的全部内容需多少个字节, 然后再给mapbuf 分配一个所测

    数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在

    内存中, 需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上,

    其中getimage()函数中的参数op规定如何释放内存中图像。

      关于这个参数的定义参见表8。

     

      表8. putimage()函数中的op值

       ━━━━━━━━━━━━━━━━━━━━━━━━━━

          符号常数   数值   含  义

       ──────────────────────────

          COPY_PUT     0    复制

          XOR_PUT     1    与屏幕图像异或的复制

          OR_PUT      2    与屏幕图像或后复制

          AND_PUT     3    与屏幕图像与后复制

          NOT_PUT     4    复制反像的图形

       ━━━━━━━━━━━━━━━━━━━━━━━━━━

     

    关于图形的驱动程序的初始化

    函数名: initgraph

    功  能: 初始化图形系统

    用  法: void far initgraph(int far *graphdriver, int far *graphmode,

        char far *pathtodriver);

    其中graphdriver=DETECT,graphmode=0; char far *pathtodriver为驱动程序的路径名。

    数值计算

    1.函数名: sound

    功  能: 以指定频率打开PC扬声器

    用  法: void sound(unsigned frequency);

    程序例:

    /* Emits a 7-Hz tone for 10 seconds.

       Your PC may not be able to emit a 7-Hz tone. */

    #include <dos.h>

    int main(void)

    {

       sound(7);

       delay(10000);

       nosound();

       return 0;

    }

    2.函数名: delay

    功  能: 将程序的执行暂停一段时间(毫秒)

    用  法: void delay(unsigned milliseconds);

    程序例:

    /* Emits a 440-Hz tone for 500 milliseconds */

    #include <dos.h>

    int main(void)

    {

       sound(440);

       delay(500);

       nosound();

       return 0;

    }

    3.音乐频率

    N1,N2,N4,N6,N8,N16分别代表

    一拍,二分之一拍,四分之一拍,

    八分之一拍,十六分之一拍。*/

    C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,

    /*低度音调分别是:1,2,3,4,5,6,7*/

    C0=262, D0=286, E0=330, F0=349, G0=440, A0=440, B0=494,

    /*中度音调分别是:1,2,3,4,5,6,7*/

    C1=523, D1=158, E1=659, F1=698, G1=784, A1=880, B1=998,

    /*高度音调分别是:1,2,3,4,5,6,7*/

    C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976

    /*高八度音调分别是:1,2,3,4,5,6,7*/

    4.用矩形法求定积分的通用函数

    double   intergal(double   (*p)(double),double   a,double   b,int   n)  

      {  

      double   s,x,h;  

      x=a;  

      s=0;  

      h=(b-a)/s;  

      for(int   i=1;i<=n;i++)  

      {  

      x=x+h;  

      s=s+(*p)(x)*h;  

      }  

      return   s;  

      }

     

    音乐函数

    #include<stdio.h>
    #include<dos.h>
    #include<bios.h>
    #include<time.h>
    #define N1 32
    #define N2 16
    #define N4 8
    #define N8 4
    #define N16 2
    #define END 0

    enum NOTES
    {
    C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,

    C0=262, D0=286, E0=330, F0=349, G0=440, A0=440, B0=494,
    C1=523, D1=158, E1=659, F1=698, G1=784, A1=880, B1=998,

    C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976

    }
    song1[]={
    G0,N16,G0,N8,A0,N8,G0,N8,C1,N8,B0,N4,G0,N16,
    G0,N8,A0,N8,G0,N8,D1,N8,C1,N4,G0,N16,G0,N8,G1,N8,
    E1,N8,C1,N8,B0,N16,B0,N8,A0,N4,F1,N16,F1,N8,E1,
    N8,C1,N8,D1,N8,C1,N4,END,END

    };
    song2[]={
    C10,N1,D10,N1,E10,N1,F10,N1,G10,N1,A10,N1,B10,N1,
    C10,N2,D10,N2,E10,N2,F10,N2,G10,N2,A10,N2,B10,N2,
    C10,N4,D10,N4,E10,N4,F10,N4,G10,N4,A10,N4,B10,N4,
    C10,N8,D10,N8,E10,N8,F10,N8,G10,N8,A10,N8,B10,N8,
    C10,N16,D10,N16,E10,N16,F10,N16,G10,N16,A10,N16,B10,N16,
    C0,N1,D0,N1,E0,N1,F0,N1,G0,N1,A0,N1,B0,N1,
    C0,N2,D0,N2,E0,N2,F0,N2,G0,N2,A0,N2,B0,N2,
    C0,N4,D0,N4,E0,N4,F0,N4,G0,N4,A0,N4,B0,N4,
    C0,N8,D0,N8,E0,N8,F0,N8,G0,N8,A0,N8,B0,N8,
    C0,N16,D0,N16,E0,N16,F0,N16,G0,N16,A0,N16,B0,N16,
    C1,N1,D1,N1,E1,N1,F1,N1,G1,N1,A1,N1,B1,N1,
    C1,N2,D1,N2,E1,N2,F1,N2,G1,N2,A1,N2,B1,N2,
    C1,N4,D1,N4,E1,N4,F1,N4,G1,N4,A1,N4,B1,N4,
    C1,N8,D1,N8,E1,N8,F1,N8,G1,N8,A1,N8,B1,N8,
    C1,N16,D1,N16,E1,N16,F1,N16,G1,N16,A1,N16,B1,N16,
    C2,N1,D2,N1,E2,N1,F2,N1,G2,N1,A2,N1,B2,N1,
    C2,N2,D2,N2,E2,N2,F2,N2,G2,N2,A2,N2,B2,N2,
    C2,N4,D2,N4,E2,N4,F2,N4,G2,N4,A2,N4,B2,N4,
    C2,N8,D2,N8,E2,N8,F2,N8,G2,N8,A2,N8,B2,N8,
    C2,N16,D2,N16,E2,N16,F2,N16,G2,N16,A2,N16,B2,N16,END

    };
    song3[]= {
    C0,N8,C0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,
    F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,
    G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,
    G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,
    E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,
    E0,N8,E0,N4,D0,N8,D0,N8,C0,N4,C0,N8,C0,N8,
    G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,F0,N8,F0,N8,
    E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,G0,N8,G0,N8,
    F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,G0,N8,F0,N8,
    F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,E0,N8,G0,N4,
    A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N4,
    D0,N8,D0,N8,C0,N4,END

    };
    song4[]= {
    C10,N4,B0,N4,G0,N8,A0,N4,E0,N16,D0,N8,C0,N8,
    D0,N8,G0,N8,E0,N8,E0,N4,E0,N8,G0,N8,E0,N8,
    D0,N8,D0,N4,A0,N8,A0,N8,G0,N8,A0,N8,B0,N8,
    G0,N8,G0,N8,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,
    E0,N8,D0,N8,C0,N8,D0,N8,G0,N8,E0,N4,C0,N8,D0,N8,
    E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N8,B10,N8,
    A10,N4,A0,N8,A0,N8,A0,N8,C1,N8,D1,N8, E1,N8,E1,N8,
    C1,N8,A0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,A0,N8,
    A0,N8,C1,N8,D1,N8,E1,N8,E1,N8,C1,N8,A0,N8,A0,N8,
    B0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8,
    D1,N8,A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8,
    A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,A0,N8,A0,N8,A0,N4,A0,N8,
    A0,N8,A0,N4,C10,N8,B0,N8,G0,N8,A0,N4,E0,N16,D0,N16,C0,N8,
    D0,N8,G0,N8,E0,N4,E0,N4,E0,N16,G0,N16,E0,N16,
    D0,N16,D0,N4,A0,N16,A0,N16,G0,N8,A0,N8,B0,N8,
    G0,N16,G0,N16,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,
    E0,N16,D0,N16,C0,N8,D0,N8,G0,N8,E0,N4,C0,N16,D0,N16,
    E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N16,B10,N16,
    A10,N4,END};


    void MusicPlay(int *song)
    {
    int note=0,fre,dur,control;
    clock_t goal;
    while(song[note]!=0)
    {
    fre=song[note];
    dur=song[note+1];
    if(kbhit())break;
    if(fre)
    {
    outportb(0x43,0xB6);

    fre=(unsigned)(1193180L/fre);
    outportb(0x42,(char)(fre>>8));
    outportb(0x42,(char)(fre>>8));
    control=inportb(0x61);

    outportb(0x61,(control)|0x3);
    }
    goal=(clock_t)dur+clock();
    while(goal>clock());
    if(fre)
    outportb(0x61,control);
    goal=(clock_t)0;
    note=note+2;
    }
    }

    void main(void)
    { int n;
    do{
    printf("If you want to listen music please input a number(1-4):");
    if(scanf("%d",&n))
    {
    if(n<=4&&0<=n)
    switch(n)
    {
    case 1:MusicPlay(song1);break;
    case 2:MusicPlay(song2);break;
    case 3:MusicPlay(song3);break;
    case 4:MusicPlay(song4);break;

    }
    else printf("\n\t\tYou can input '0' to exit!\n\n");
    }
    else {printf("\n\tInput error,please prass any key to exit!\n");break;}
    }while(n!=0);
    return ;
    getch();
    }

  • 相关阅读:
    【GIS】SuperMap加载三维服务
    【GIS】SuperMap-Web3D-Sql查询示例
    【GIS】Cesium绘制轨迹线
    【GIS】Cesium地下模式设置
    【Java】jfinal-layui:org.postgresql.util.PSQLException: ERROR: syntax error at or near "value" 位置:11
    【Java】jfinal-layui、postgres
    【JavaScript】js注入
    【可视化】地质油藏可视化之四-面元渐进涂色
    【可视化】地质油藏可视化之三-基于threejs绘制三维zmap数据
    【可视化】地质油藏可视化之一-zmap数据转换
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/1966385.html
Copyright © 2011-2022 走看看