📄
字号:
#include "ccbp.h"
#include"wuli.h"
#define PI 3.1415926
#define N 5
void main()
{
int s;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setfillstyle(1,9);
bar(0,0,600,480);
outhzxy3(50,150,"物理模拟实验",4,0,12);
outhzxy3(200,350,"指导老师 李元杰",1,0,12);
getch();
while(1)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setfillstyle(1,9);
bar(0,0,600,480);
outhzxy3(100,80,"小船过河请选1",1,0,12);
outhzxy3(100,140,"追击请选2",1,0,12);
outhzxy3(100,200,"弹簧连接体请选3",1,0,12);
outhzxy3(100,260,"碰撞请选4",1,0,12);
outhzxy3(100,320,"驻波请选5",1,0,12);
outhzxy3(100,380,"退出请选0",1,0,12);
switch(getch())
{
case '1':{xcgh();break;}
case '2':{zhuiji();break;}
case '3':{tanhuang();break;}
case '4':{pengzhuang();break;}
case '5':{zhubo();break;}
case '0':s=0;break;
defaut:break;
}
if(s==0)break;
}
}
void zhuiji()
{
float x1=100,y1=400,x2=0,y2=0,dt=0.2;
int i,a;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setbkcolor(1); label1:;cleardevice();
outhzxy1(0,10," 请输入飞机路线",15);
outhzxy1(20,30," 1.直线 2.正弦曲线",15);
if(getch()=='1')
{
for(i=0;i<=455;i++)
{
setfillstyle(1,1);
bar(0,0,800,280);
setcolor(15);
x1=100+i;
y1=0;
wood_b(60+x1,y1+50,20,3.,0);
wood_b(70+x1,y1+50-3,10,1.5,120.);
wood_b(70+x1,y1+50,10,1.5,240);
wood_b(60+x1,y1+50,8,1.5,120);
setcolor(11);
x2=x1-(500-i)*dt;
y2=y1-i*dt*2.2;
circle(x2+70,y2+250,2);
circle(x2+70,y2+250,1);
setcolor(15);
circle(x1+70,y1+300,1);
setcolor(11);
circle(x2+80,y2+500,1);
delay(N) ;
}
setcolor(4);
for(i=0;i<=30;i++)
{
circle(x1+60,y1+50,i);delay(N);}
cleardevice();
outhzxy1(1,1," 是否从新运行?(y/n)",15);
if(getch()=='y'){gotoxy(0,100);goto label1;}
if(getch()=='n') goto label2;
}
if(getch()=='2')
{
x1=100,y1=400;
for(i=0;i<=399;i++)
{
setfillstyle(1,1);
bar(0,0,100,100);
bar(150,0,640,250);
bar(150,225,102,350);
bar(75,100,165,480);
bar(65,0,260,130);
setcolor(15);
x1=x1+1;
y1=50*cos(5*i*0.01-x1*0.1);
wood_b(60+x1,y1+50,20,3.,0);
wood_b(70+x1,y1+50-3,10,1.5,120.);
wood_b(70+x1,y1+50,10,1.5,240.);
wood_b(60+x1,y1+50,8,1.5,120);
setcolor(11);
x2=x1-(450-i)*dt;
y2=y1-i*dt*2.5;
circle(x2+70,y2+250,2);
circle(x2+70,y2+250,1);
setcolor(15);
circle(x1+60,y1+300,1);
setcolor(11);
circle(x2+70,y2+500,1);
delay(N) ;
}
setcolor(4);
for(i=0;i<=30;i++)
{ circle(x1+70,y1+50,i) ;
delay(N);
}
cleardevice();
outhzxy1(1,1," 是否从新运行?(y/n)",15);
if(getch()=='y'){ gotoxy(0,100);goto label1; }
if(getch()=='n') goto label2;
}
label2:;
getch();
closegraph();
}
void zhubo()
{
float j=0.001,i=0.03,y,y1,y2;
int t,k,A=20;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
setfillstyle(1,5);
setbkcolor(4);
outhzxy3(250,200,"叠加前的波",1,0,14);
outhzxy3(250,400,"叠加后的波",1,0,14);
setfillstyle(1,5);
for(t=0;150*i*t<=500;t++)
{
line(550,40,550,160);
line(550,240,550,360);
for(k=0;100*j*k<=150*t*i;k++)
{
y=A*sin(PI*6*t*i-PI*4*j*k);
putpixel(100*j*k+50,y+300,12);
putpixel(100*j*k+50,y+100,12);
}
delay(N+15);
bar(0,30,600,170);
bar(0,230,600,370);
}
for(t=0;150*t*i<=500;t++)
{
line(550,40,550,160);
line(550,240,550,360);
for(k=0;k<=5000;k++)
{
y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
putpixel(100*j*k+50,y+100,12);
}
for(k=0;100*j*k<=150*i*t;k++)
{
y=A*sin(PI*6*t*i-PI*4*j*k);
putpixel(500-100*j*k+50,y+100,14);
}
for(k=5000;(500-100*j*k)<=150*t*i;k--)
{
y1=A*sin(PI*6*t*i-PI*4*j*(5000-k));
y2=A*sin(PI*6*t*i-PI*4*j*k);
putpixel(100*j*k+50,y1+y2+300,11);
}
for(k=0;100*j*k<(500-150*i*t);k++)
{
y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
putpixel(100*j*k+50,y+300,12);
}
delay(N+15);
bar(0,30,600,170);
bar(0,230,600,370);}
for(t=0;t<=30;t++)
{
line(550,40,550,160);
line(550,240,550,360);
for(k=0;k<=5000;k++)
{ y=A*sin(PI*6*(t+200/9)*i-PI*4*j*k);
putpixel(100*j*k+50,y+100,12);
}
for(k=0;k<=5000;k++)
{
y=A*sin(PI*6*(t+100/9)*i-PI*4*j*k);
putpixel(500-100*j*k+50,y+100,14);
}
for(k=5000;k>=0;k--)
{
y1=A*sin(PI*6*(t+100/9)*i-PI*4*j*(5000-k));
y2=A*sin(PI*6*t*i-PI*4*j*k);
putpixel(100*j*k+50,y1+y2+300,11);
}
delay(N+15);
bar(0,30,600,170);
bar(0,230,600,370);}
}
void pengzhuang()
{
float v1,v2,v3,m1,m,M,x5,l=50,w,w1,w2,x1,x2,y1,y2,t=0.05,x,y,m2,x3,x4;
int i;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setbkcolor(2);label1:;
cleardevice();
outhzxy1(1,5,"球撞杆或者杆撞杆?(B or S)",15);
if(getch()=='b')
{ v1=1;
outhzxy1(200,120,"球的质量大于杆的质量(8M>9m)",15);
outhzxy1(200,270,"球的质量等于杆的质量(8M=9m)",15);
outhzxy1(200,400,"球的质量小于杆的质量(8M<9m)",15);
for(i=0;i<=1000;i++)
{
setbkcolor(6);
setcolor(13);
line(400,100,400,0);
line(400,150,400,250);
line(400,290,400,390);
setfillstyle(1,4);
fillellipse(450-i*v1*t,75,5,5);
fillellipse(450-i*v1*t,225,5,5);
fillellipse(450-i*v1*t,365,5,5);
setfillstyle(1,3);
bar(0,100,640,0);
bar(0,150,640,250);
bar(0,290,640,390);
if(fabs(50-i*v1*t<5))
break;
}
{M=9,m=7;
for(i=0;i<=3000;i++)
{ setfillstyle(1,3);
bar(0,100,640,0);
setcolor(14);
v2=(9*m-8*M)/(9*m+8*M)*v1;
v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
w=3*v1/(100*((9*m)/8*M)+1);
x=400-i*t*v3;
x1=x+50*cos(w*i*t*100);
x2=x-50*cos(w*i*t*100);
y1=50+50*sin(w*i*t*100);
y2=50-50*sin(w*i*t*100);
line(x1,y1,x2,y2);
setfillstyle(1,4);
fillellipse(405+i*v2*t,75,5,5);
}}
{M=9,m=8;
for(i=0;i<=3000;i++)
{ setfillstyle(1,3);
bar(0,150,640,250);
setcolor(14);
v2=(9*m-8*M)/(9*m+8*M)*v1;
v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
w=3*v1/(100*((9*m)/8*M)+1);
x=400-i*t*v3;
x1=x+50*cos(w*i*t*100);
x2=x-50*cos(w*i*t*100);
y1=200+50*sin(w*i*t*100);
y2=200-50*sin(w*i*t*100);
line(x1,y1,x2,y2);
setfillstyle(1,4);
fillellipse(405+i*v2*t,225,5,5);
}}
{M=7,m=9;
for(i=0;i<=3000;i++)
{ setfillstyle(1,3);
bar(0,290,640,390);
setcolor(14);
v2=(9*m-8*M)/(9*m+8*M)*v1;
v3=(2*m*v1)/(M*((9*m)/(8*M))+1);
w=3*v1/(100*((9*m)/8*M)+1);
x=400-i*t*v3;
x1=x+50*cos(w*i*t*100);
x2=x-50*cos(w*i*t*100);
y1=340+50*sin(w*i*t*100);
y2=340-50*sin(w*i*t*100);
line(x1,y1,x2,y2);
setfillstyle(1,4);
fillellipse(405+i*v2*t,365,5,5);
}}
cleardevice();
outhzxy1(1,5,"是否重新运行?(y/n)",15);
if(getch()=='y')goto label1;if(getch()=='n')goto label2;
}
if(getch()=='s')v1=2;
{
for(i=0;i<=2000;i++)
{ setbkcolor(1);
setcolor(14);
line(400,300,400,200);
setcolor(4);
line(500-i*v1*t,400,500-i*v1*t,300);
cleardevice();delay(N);
if(fabs(100-i*v1*t)<0.1)
break;
}
{m1=2,m2=4;
for(i=0;i<=3000;i++)
{ setfillstyle(1,2);
outhzxy1(200,180,"M = 2",14);
outhzxy1(400,410,"M = 4",4);
outhzxy1(200,440,"红色杆的质量是黄色杆的两倍",15);
bar(0,200,640,400);
setcolor(14);
v3=sqrt((3*m2*m2*m2/m1/m1*v1*v1+3*m1*v2*v2-m2*v1*v1)/m1);
v2=(m2*v1-m1*v3)/m2;
w2=3*v1/l;
w1=m2*w2/m1;
x1=400-i*v3*t;
x2=x1+50*cos(w1*i*t);
x3=x1-50*cos(w1*i*t);
y1=250+50*sin(w1*i*t);
y2=250-50*sin(w1*i*t);
line(x2,y1,x3,y2);
x2=400+i*v2*t;
x4=x2+50*cos(w2*i*t);
x5=x2-50*cos(w2*i*t);
y1=350+50*sin(w2*i*t);
y2=350-50*sin(w2*i*t);
setcolor(4);
line(x4,y1,x5,y2);
delay(N);
if(kbhit())break;
}}
outhzxy1(1,5,"是否重新运行?(y/n)",15);
if(getch()=='y')goto label1;if(getch()=='n')goto label2;
}label2:;
getch();
closegraph();
}
void xcgh()
{
float x,y,x1,y1;
float t=0.01;
char s;
int v,i,m,j;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setbkcolor(0);
setfillstyle(1,2);
bar(0,100,600,400);
outhzxy1(10,450,"小船过河",4);
outhzxy3(150,450,"程序运行时击任意键推出该次运行 击e键退出",1,0,4);
for(v=27;v>=3;v=v-3)
{
for(i=0;i<=30000/v;i++)
{
setfillstyle(1,9);
bar(0,100,600,400);
x=3*v*(i*t)*(i*t)/32-v*v*(i*t)*(i*t)*(i*t)/4800+10;
y=400-v*(i*t);
setfillstyle(1,4);
fillellipse(x,y,2,4);
for(j=0;j<=i;j++)
{
x1=3*v*(j*t)*(j*t)/32-v*v*(j*t)*(j*t)*(j*t)/4800+10;
y1=400-v*(j*t);
putpixel(x1,y1,4);
}
if(kbhit())break;
}
getch();
if(getch()=='e')
break;
}
}
void tanhuang()
{
int m1=10,m2=5,m3=7,l1=80,l2=80,k1=5,k2=5,v1=50,v2=0,v3=-50;
float x=10,x1=100,x2=110+l1,x3=120+l1+l2,i=0.005,p1,p2,p3,temp;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
setfillstyle(1,0);
bar(540,0,640,480);
outhzxy3(550,100,"弹性势能",1,0,14);
outhzxy3(550,230,"动能",1,0,14);
outhzxy3(550,400,"总能量",1,0,14);
p1=m1*v1;p2=m2*v2;p3=m3*v3;
while(x<=640)
{ setfillstyle(1,6);
bar(1,1,1000,70);
setfillstyle(1,9);
fillellipse(x1,50,5,5);fillellipse(x2,50,5,5);fillellipse(x3,50,5,5);
spring(x1+5,50,x2-5,50,3,20);spring(x2+5,50,x3-5,50,3,20);
x1=x1+p1/m1*i;
x2=x2+p2/m2*i;
x3=x3+p3/m3*i;
p1=p1+k1*(x2-x1-l1-10)*i;
p2=p2-k1*(x2-x1-l1-10)*i+k2*(x3-x2-l2-10)*i;
p3=p3-k2*(x3-x2-l2-10)*i;
temp=0.01;
putpixel(x+=temp,200-p1*p1/m1/600,11);
putpixel(x+=temp,200-p2*p2/m2/600,12);
putpixel(x+=temp,200-p3*p3/m3/600,13);
putpixel(x+=temp,200-p1*p1/m1/600-p2*p2/m2/600-p3*p3/m3/600,14);
putpixel(x+=temp,300-k1*(x2-x1-l1-10)*(x2-x1-l1-10)/600,10);
putpixel(x+=temp,300-k2*(x3-x2-l2-10)*(x3-x2-l2-10)/600,9);
putpixel(x+=temp,300-k1*(x2-x1-l1-10)*(x2-x1-l1-10)/600-k2*(x3-x2-l2-10)*(x3-x2-l2-10)/600,8);
putpixel(x+=temp,400-p1/m1,7);
putpixel(x+=temp,400-p2/m2,6);
putpixel(x+=temp,400-p3/m3,5);
} getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -