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

📄 noname.c

📁 模拟物体平抛系统。对于建筑学的学生来说很有帮助
💻 C
字号:
#define HEIGHT (maxy-150)
#define STARTX 10
#define STARTY 120
#define ABIASX 10
#define ABIASY 10
#define RADIUS 8
#define VX 20
#define WIDTH 70
#define STEP 5
#define G 9.8
#define F 1.8
#include "graphics.h"
#include "math.h"
main()
{
   int i,j,maxx,maxy,flag=1;
   int poly[]={STARTX-ABIASX,STARTY+RADIUS+ABIASY,STARTX+ABIASX,STARTY+RADIUS+ABIASY,STARTX+WIDTH+ABIASX,STARTY+RADIUS-ABIASY,STARTX+WIDTH-ABIASX,STARTY+RADIUS +ABIASY,STARTX-ABIASX,STARTY+RADIUS+ABIASY};
   float x=STARTX,y=STARTY;
   float x0=STARTX+WIDTH,y0=0;
   float vy=0,g=G-F;
   float distancex,distancey;
   int graphdriver=VGA;
   int graphmode=1;
   registerbgidriver(EGAVGA_driver);
   initgraph(&graphdriver,&graphmode,"");
   maxx=getmaxx();
   maxy=getmaxy();
   cleardevice();
   do
   {
      setvisualpage(0);
      delay(2500);
      setactivepage(1);
      cleardevice();
      setbkcolor(LIGHTGRAY);
      setcolor(DARKGRAY);
      setfillstyle(1,BROWN);
      fillpoly(5,poly);
      floodfill((poly[0]+poly[4])/2,(poly[1]+poly[5])/2,DARKGRAY);
      line(STARTX+WIDTH,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS+HEIGHT);
      setlinestyle(DOTTED_LINE,0,NORM_WIDTH);
      line(STARTX,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS);
      setlinestyle(SOLID_LINE,0,THICK_WIDTH);
      line(0,STARTY+RADIUS+HEIGHT,maxx,STARTY+RADIUS+HEIGHT);
      setcolor(LIGHTMAGENTA);
      setfillstyle(1,LIGHTRED);
      setlinestyle(SOLID_LINE,0,NORM_WIDTH);
      circle(x,y,RADIUS);
      floodfill(x,y,LIGHTMAGENTA);
      x=x+STEP;
      if(x>maxx)
         {
            x=STARTX;
            y=STARTY;
            x0=STARTX+WIDTH;
            y0=0;
            g=G-F;
            flag=1;
          }
      else if(x>STARTX+WIDTH)
      if(x-STARTX-WIDTH<STEP)
         x=STARTX+WIDTH;
         else
             if(flag==1)
             {
                 distancex=x-x0;
                 distancey=pow(distancex/VX,2)*g/2;
                 y=y0+STARTY+distancey;
                 if(distancey>HEIGHT-y0)
                 {
                     flag=0;
                     distancey=HEIGHT-y0;
                     distancex=sqrt(2*distancey/g)*VX;
                     x=x0=x0+distancex;
                     y=distancey+y0+STARTY;
                     vy=g*distancex/VX;
                     g=G+F;
                  }
              }
              else
              {
                     distancex=x-x0;
                     distancey=vy*distancex/VX-pow(distancex/VX,2)*g/2;
                     y=STARTY+HEIGHT-distancey;
                     if(vy<g*distancex/VX)
                     {
                         flag=1;
                         distancex=vy*VX/g;
                         distancey=pow(vy,2)/2/g;
                         x=x0=x0+distancex;
                         y0=HEIGHT-distancey;
                         y=STARTY+y0;
                         g=G-F;
                      }
               }
      setvisualpage(1);
      delay(2500);
      setactivepage(0);
      cleardevice();
      setbkcolor(LIGHTGRAY);
      setcolor(DARKGRAY);
      setfillstyle(1,BROWN);
      fillpoly(5,poly);
      floodfill((poly[0]+poly[4])/2,(poly[1]+poly[5])/2,DARKGRAY);
      line(STARTX+WIDTH,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS+HEIGHT);
      setlinestyle(DOTTED_LINE,0,NORM_WIDTH);
      line(STARTX,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS);
      setlinestyle(SOLID_LINE,0,THICK_WIDTH);
      line(0,STARTY+RADIUS+HEIGHT,maxx,STARTY+RADIUS+HEIGHT);
      setcolor(LIGHTMAGENTA);
      setfillstyle(1,LIGHTRED);
      setlinestyle(SOLID_LINE,0,NORM_WIDTH);
      circle(x,y,RADIUS);
      floodfill(x,y,LIGHTMAGENTA);
      x=x+VX;
      if(x>maxx)
      {
            x=STARTX;
            y=STARTY;
            x0=STARTX+WIDTH;
            y0=0;
            g=G-F;
            flag=1;
       }
       else if(x>STARTX+WIDTH)
       {   if(flag==1)
               {
                     distancex=x-x0;
                     distancey=pow(distancex/VX,2)*g/2;
                     y=y0+STARTY+distancey;
                     if(distancey>HEIGHT-y0)
                     {
                          flag=0;
                          distancey=HEIGHT-y0;
                          distancex=sqrt(2*distancey/g)*VX;
                          x=x0=x0+distancex;
                          y=distancey+y0+STARTY;
                          vy=g*distancex/VX;
                          g=G+F;
                      }
                }
           else
           {
                     distancex=x-x0;
                     distancey=vy*distancex/VX-pow(distancex/VX,2)*g/2;
                     y=STARTY+HEIGHT-distancey;
                     if(vy<g*distancex/VX)
                     {
                         flag=1;
                         distancex=vy*VX/g;
                         distancey=pow(vy,2)/2/g;
                         x=x0=x0+distancex;
                         y0=HEIGHT-distancey;
                         y=STARTY+y0;
                         g=G-F;
                      }
            }
        }
    }while(!kbhit());
    getch();
    closegraph();
}

⌨️ 快捷键说明

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