⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.c

📁 C语言源码
💻 C
📖 第 1 页 / 共 3 页
字号:
                    LineToCircle(x0,y0,oldr);
                    LineToCircle(x0,y0,r);
                    last_x=x1;
                    last_y=y1;
                    oldr=r;
                }          
            }
            /*绘制结束后,记录圆的圆心和半径*/
            Rx=x0;
            Ry=y0;
            R=r;

         while(1)
        {
            key=bioskey(0);
            if(key==ESC)
               break;
            /*放大圆*/
            if(key==PAGEUP)
                {
                    if(Rx-R>10 && Ry-R>40 && Rx+R<620 && Ry+R<445)
                    {
                        /*如果半径和初始状态一样大,则保留原来的圆*/
                        if(R==r)
                        {
                            setcolor(WHITE);
                            R+=10;
                            circle(Rx,Ry,R);
                        }
                        else
                        {
                            setcolor(BLACK);
                            /*用背景色画圆,覆盖原有的*/
                            circle(Rx,Ry,R);
                            /*增加半径*/
                            R+=10;
                            setcolor(WHITE);
                            /*绘制新圆*/
                            circle(Rx,Ry,R);
                        }
                     }
                }
            /*缩小圆*/
             if(key==PAGEDOWN)
                {
                    if(Rx-R>10 && Ry-R>40 && Rx+R<620 && Ry+R<445)
                    {
                        /*如果半径和初始状态一样大,则保留原来的圆*/
                        if(R==r)
                        {
                            setcolor(WHITE);
                            R-=10;
                            circle(Rx,Ry,R);

                        }
                        else
                        {
                            setcolor(BLACK);
                            /*用背景色画圆,覆盖原有的*/
                            circle(Rx,Ry,R);
                            setcolor(WHITE);
                            /*减小半径*/
                            R-=10;
                            circle(Rx,Ry,R);
                        }

                     }
                }

            }
            DrawMouse(x1,y1);
        }
   }
   DrawMouse(last_x,last_y);
}       

/*求阶乘函数*/
long factorial(int n)
{ 
    long s=1;
    if(n==0)
        return 1;

    while(n>0)
    {
        s*=n;
        n--;
    }
    return s;
}

/*伯恩斯坦基函数*/
float berFunction(int i,int n,double t)
{
    if(i==0&&t==0||t==1&&i==n)
        return  1;
    else if(t==0||t==1)
        return 0;
    return  factorial(n)/(factorial(i)*factorial(n-i))*pow(t,i)*pow(1-t,n-i);

}

/*绘制Bezier曲线函数*/
void DrawBezier()
{
    int x,y,x0,y0,x1,y1;
    float j,t,dt;
    int i,n;
    int endFlag=0;
    int last_x=0,last_y=0;
    n=0;

    DrawMouse(last_x,last_y);
    while(mouseStatus(&x1,&y1)==LEFT_PRESSED);
    while(1)
    {
            while((mouseStatus(&x1,&y1)==RIGHT_PRESSED))
                endFlag=1;
            if(endFlag==1)
                break;
            /*如果有两个以上的点,则将其连接,即画直线*/ 
            if(n>1)
               line(linePoint_x[n-1],linePoint_y[n-1],linePoint_x[n-2],linePoint_y[n-2]);

            /*移动鼠标*/
            while(mouseStatus(&x1,&y1) == NO_PRESSED)
            {
                if(last_x!=x1||last_y!=y1)
                {
                    DrawMouse(last_x,last_y);
                    DrawMouse(x1,y1);
                    last_x=x1;
                    last_y=y1;
                }
            }

            /*单击左键时,绘制点*/
            while(mouseStatus(&x0,&y0)==LEFT_PRESSED);
            putpixel(x0,y0,14);
            /*记录每次鼠标左键单击的点坐标*/
            linePoint_x[n]=x0;
            linePoint_y[n]=y0;
            n++;
      }
      DrawMouse(x1,y1);

      dt=1.0/10;
      setwritemode(0);
      for(j=0;j<=10;j+=0.5)
      {
        t=j*dt;
        x=0;
        y=0;
        i=0;
        while(i<n-1)
        {
            x+=berFunction(i,n-2,t)*linePoint_x[i];
            y+=berFunction(i,n-2,t)*linePoint_y[i];
            i++;
        }
        if(j==0)
           moveto(x,y);

        lineto(x,y);

      }
      setwritemode(1);
}

void main()
{
    int gdriver,gmode;
    int x0,y0,x1,y1;
    int last_x,last_y;
    int i;

    x0=250;
    y0=250;
    gdriver=DETECT;
    while( 1)
    {
        initgraph(&gdriver,&gmode,"");
        setbkcolor(0);
        setcolor(14);
        /*绘制画布*/
        rectangle(5,30,630,445);
        setfillstyle(1,2);
        /*填充画布以外的颜色,画布仍呈背景色*/
        floodfill(10,10,14);

        /*绘制按钮框*/
        for(i=0;i<=7;i++)
        {
            setcolor(RED);
            line(60*i+1,2,60*i+1,25);
            line(60*i+1,2,60*i+55,2);
            setcolor(RED);
            line(60*i+1,25,60*i+55,25);
            line(60*i+55,2,60*i+55,25);
        }

        setcolor(RED);
        line(0,446,639,446);
        line(0,478,639,478);

        setcolor(8);
        /*绘制退出按钮框*/
        rectangle(570,2,625,25);
        setfillstyle(1,RED);
        floodfill(620,5,8);
        setcolor(WHITE);
        outtextxy(585,10,"EXIT");

        /*显示“直线”*/
        outChinese(zhi16K, 16, 10,6, WHITE);
        outChinese(xian16K, 16, 28,6, WHITE);

        /*显示“矩形”*/
        outChinese(ju16K, 16, 70,6, WHITE);
        outChinese(xing16K, 16, 88,6, WHITE);

        /*显示“圆形”*/
        outChinese(yuan16K, 16, 130,6, WHITE);
        outChinese(xing16K, 16, 148,6, WHITE);

        outtextxy(185,10,"Bezier");

        /*显示“清屏”*/
        outChinese(qing16K, 16, 250,6, WHITE);
        outChinese(ping16K, 16, 268,6, WHITE);

        /*显示“保存”*/
        outChinese(bao16K, 16, 310,6, WHITE);
        outChinese(cun16K, 16, 328,6, WHITE);

        /*显示“加载”*/
        outChinese(jia16K, 16, 370,6, WHITE);
        outChinese(zai16K, 16, 388,6, WHITE);

        /*显示“帮助”*/
        outChinese(bang16K, 16, 430,6, WHITE);
        outChinese(zhu16K, 16, 448,6, WHITE);

        setMousePos(x0,y0);
        setwritemode(1);
        DrawMouse(x0,y0);

        last_x=x0;
        last_y=y0;
        while(!((mouseStatus(&x1,&y1)==NO_PRESSED) && x1>240 &&x1<295&&y1>1&&y1<25))
        {
            /*单击退出按钮*/
            if((mouseStatus(&x1,&y1)==NO_PRESSED) && x1>570 &&x1<625&&y1>1&&y1<25)
                exit(0);
            /*鼠标移动*/
            while(mouseStatus(&x1,&y1) == NO_PRESSED||y1>25)
            {
                if(last_x!=x1 && last_y!=y1)
                {
                    DrawMouse(last_x,last_y);
                    DrawMouse(x1,y1);
                    last_x=x1;
                    last_y=y1;
                }
            }

            DrawMouse(last_x,last_y);
            /*在按钮框中单击左键后*/
            while(mouseStatus(&x1,&y1)==LEFT_PRESSED);
            /*绘制直线*/
            if(x1>0 && x1<60 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                /*呈凹陷状态*/
                line(1,2,1,25);
                line(1,2,55,2);
                setcolor(15);
                line(1,25,55,25);
                line(55,2,55,25);
                setwritemode(1);

                DrawLine();

                setwritemode(0);
                setcolor(RED);
                /*还原成初始状态*/
                rectangle(1,2,55,25);
                setcolor(15);
                setwritemode(1);

                DrawMouse(last_x,last_y);
            }

            /*绘制矩形*/
            if(x1>60 && x1<115 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                line(61,2,61,25);
                line(61,2,115,2);
                setcolor(15);
                line(61,25,115,25);
                line(115,2,115,25);
                setwritemode(1);

                DrawRectangle();

                setwritemode(0);
                setcolor(RED);
                rectangle(61,2,115,25);
                setcolor(15);
                setwritemode(1);

                DrawMouse(last_x,last_y);
            }

            /*绘制圆形*/
            if(x1>120 && x1<175 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                line(121,2,121,25);
                line(121,2,175,2);
                setcolor(15);
                line(121,25,175,25);
                line(175,2,175,25);
                setwritemode(1);

                DrawCircle();

                setwritemode(0);
                setcolor(RED);
                rectangle(121,2,175,25);
                setcolor(15);
                setwritemode(1);

                DrawMouse(last_x,last_y);
            }

            /*绘制Bezier曲线*/
            if(x1>180 && x1<235 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                line(181,2,181,25);
                line(181,2,235,2);
                setcolor(15);
                line(181,25,235,25);
                line(235,2,235,25);
                setwritemode(1);

                DrawBezier();

                setwritemode(0);
                setcolor(RED);
                rectangle(181,2,235,25);
                setcolor(15);
                setwritemode(1);
                DrawMouse(last_x,last_y);
            }

            /*保存文件*/
            if(x1>300 && x1<355 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                line(301,2,301,25);
                line(301,2,355,2);
                setcolor(15);
                line(301,25,355,25);
                line(355,2,355,25);
                setwritemode(1);

                save();

                setwritemode(0);
                setcolor(RED);
                rectangle(301,2,355,25);
                setcolor(15);
                setwritemode(1);
                DrawMouse(last_x,last_y);
            }

            /*加载已有的文件*/
           if(x1>360 && x1<415 && y1>1 && y1<25)
           {
                setwritemode(0);
                setcolor(8);
                line(361,2,361,25);
                line(361,2,415,2);
                setcolor(15);
                line(361,25,415,25);
                line(415,2,415,25);
                setwritemode(1);

                load();

                setwritemode(0);
                setcolor(RED);
                rectangle(361,2,415,25);
                setcolor(15);
                setwritemode(1);
                DrawMouse(last_x,last_y);
            }

            /*显示用户帮助*/
            if(x1>420 && x1<475 && y1>1 && y1<25)
            {
                setwritemode(0);
                setcolor(8);
                line(421,2,421,25);
                line(421,2,475,2);
                setcolor(15);
                line(421,25,475,25);
                line(475,2,475,25);
                setwritemode(1);

                showHelp();

                setwritemode(0);
                setcolor(RED);
                rectangle(421,2,475,25);
                setcolor(15);
                setwritemode(1);
                DrawMouse(last_x,last_y);
            }

        }
        closegraph();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -