这个程序全是物理上的作图程序,改写它具有一定的挑战性。希望得到详细的操作步骤。。希望得到高手指点!!!不胜感激!!!
它们的源代码如下:
#include "dos.h";
#include "graphics.h";
#include "math.h";
#include "stdio.h";
#include "conio.h";
#include "stdlib.h";
void main()
{ double x[101]={0,},y[101]={0,},vx[101]={0,},vy[101]={0,};
double k1,k2,k3,k4,l1,l2,l3,l4,m1,m2,m3,m4,n1,n2,n3,n4,h;
int i=0;
int driver=DETECT;
int graphmode;
initgraph(&driver,&graphmode,"");
line(290,400,450,400);
line(320,0,320,480);
h=0.1;
x[i]=1;
y[i]=0;
vx[i]=0;
vy[i]=1;
for(i=0;i<=99;i++)
{ k1=vx[i];
l1=vy[i];
m1=-vy[i]/x[i];
n1=vx[i]/x[i];
k2=vx[i]+h*m1/2;
l2=vy[i]+h*n1/2;
m2=-l2/(x[i]+h*k1/2);
n2=k2/(x[i]+h*k1/2);
k3=vx[i]+h*m2/2;
l3=vy[i]+h*n2/2;
m3=-l3/(x[i]+h*k2/2);
n3=k3/(x[i]+h*k2/2);
k4=vx[i]+h*m3;
l4=vy[i]+h*n3;
m4=-l4/(x[i]+h*k3);
n4=k4/(x[i]+h*k3);
x[i+1]=x[i]+h*(k1+2*k2+2*k3+k4)/6;
y[i+1]=y[i]+h*(l1+2*l2+2*l3+l4)/6;
vx[i+1]=vx[i]+h*(m1+2*m2+2*m3+m4)/6;
vy[i+1]=vy[i]+h*(n1+2*n2+2*n3+n4)/6;
/*}
for(i=0;i<=100;i++)
{ */
putpixel(320+80*x[i+1],400-80*y[i+1],15);
/*setfillstyle(12,15);
fillellipse(320+80+x[i],400-80+y[i],3,3); */
getch();
/*closegraph(); */
}
}
(第四个)
#include<Mcbp_lib.h>
void main()
{
float x,y,L,a,k,g=9.8,t=0.1;
double l=80,m=1,PI=3.14159265;
int i;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
outhzxy3(115,100,"倒 摆 模 型",5,0,3);
outhzxy1(233,400,"按任意键继续",15);
getch();
A:
cleardevice();
outhzxy3(100,40,"倒摆模型",4,0,10);
outhzxy1(80,350,"以上各值均取国际主单位",4);
outhzxy1(80,320,"本过程中无能量损失!",5);
outhzxy1(60,142,"请输入系数L的初值: L=",15);
gotoxy(34,10);
scanf("%f",&L);
outhzxy1(60,174,"请输入弹簧劲度系数: k=",15);
gotoxy(34,12);
scanf("%f",&k);
outhzxy1(60,206,"请输入初始角度: a= (PI)",15);
outhzxy1(60,238,"角度请在-1与1之间取值",15);
gotoxy(30,14);
scanf("%f",&a);
a=a*PI;
for(i=0;i<1000;i++)
{
setfillstyle(1,0);
bar(350,100,550,320);
L=L+(m*g*l*sin(a)-k*a)*t;
a=a+L*t/(m*l*l);
x=l*sin(a);
y=l*cos(a);
coordc(300,400,300,0,10,15);
setlinestyle(0,4,3);
line(450,210,450+x,210-y);
setfillstyle(1,14);
fillellipse(450+x,210-y,10,10);
setfillstyle(1,5);
fillellipse(450+20*a,400-L/200,1,1);
coordc(450,450,130,90,20,15);
delay(1);
}
outhzxy1(80,400,"按任意键继续,按ESC退出!",9);
if(getch()!=27) goto A;
else
cleardevice();
for(i=450;i>=100;i-=2)
{setfillstyle(1,0);
bar(0,0,640,480);
outhzxy3(100,i,"欢迎您使用本程序",3,0,4);
outhzxy3(225,i+250,"再 见",4,0,14);
}
delay(20000);
closegraph();
}
它们的源代码如下:
#include "dos.h";
#include "graphics.h";
#include "math.h";
#include "stdio.h";
#include "conio.h";
#include "stdlib.h";
void main()
{ double x[101]={0,},y[101]={0,},vx[101]={0,},vy[101]={0,};
double k1,k2,k3,k4,l1,l2,l3,l4,m1,m2,m3,m4,n1,n2,n3,n4,h;
int i=0;
int driver=DETECT;
int graphmode;
initgraph(&driver,&graphmode,"");
line(290,400,450,400);
line(320,0,320,480);
h=0.1;
x[i]=1;
y[i]=0;
vx[i]=0;
vy[i]=1;
for(i=0;i<=99;i++)
{ k1=vx[i];
l1=vy[i];
m1=-vy[i]/x[i];
n1=vx[i]/x[i];
k2=vx[i]+h*m1/2;
l2=vy[i]+h*n1/2;
m2=-l2/(x[i]+h*k1/2);
n2=k2/(x[i]+h*k1/2);
k3=vx[i]+h*m2/2;
l3=vy[i]+h*n2/2;
m3=-l3/(x[i]+h*k2/2);
n3=k3/(x[i]+h*k2/2);
k4=vx[i]+h*m3;
l4=vy[i]+h*n3;
m4=-l4/(x[i]+h*k3);
n4=k4/(x[i]+h*k3);
x[i+1]=x[i]+h*(k1+2*k2+2*k3+k4)/6;
y[i+1]=y[i]+h*(l1+2*l2+2*l3+l4)/6;
vx[i+1]=vx[i]+h*(m1+2*m2+2*m3+m4)/6;
vy[i+1]=vy[i]+h*(n1+2*n2+2*n3+n4)/6;
/*}
for(i=0;i<=100;i++)
{ */
putpixel(320+80*x[i+1],400-80*y[i+1],15);
/*setfillstyle(12,15);
fillellipse(320+80+x[i],400-80+y[i],3,3); */
getch();
/*closegraph(); */
}
}
(第四个)
#include<Mcbp_lib.h>
void main()
{
float x,y,L,a,k,g=9.8,t=0.1;
double l=80,m=1,PI=3.14159265;
int i;
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
outhzxy3(115,100,"倒 摆 模 型",5,0,3);
outhzxy1(233,400,"按任意键继续",15);
getch();
A:
cleardevice();
outhzxy3(100,40,"倒摆模型",4,0,10);
outhzxy1(80,350,"以上各值均取国际主单位",4);
outhzxy1(80,320,"本过程中无能量损失!",5);
outhzxy1(60,142,"请输入系数L的初值: L=",15);
gotoxy(34,10);
scanf("%f",&L);
outhzxy1(60,174,"请输入弹簧劲度系数: k=",15);
gotoxy(34,12);
scanf("%f",&k);
outhzxy1(60,206,"请输入初始角度: a= (PI)",15);
outhzxy1(60,238,"角度请在-1与1之间取值",15);
gotoxy(30,14);
scanf("%f",&a);
a=a*PI;
for(i=0;i<1000;i++)
{
setfillstyle(1,0);
bar(350,100,550,320);
L=L+(m*g*l*sin(a)-k*a)*t;
a=a+L*t/(m*l*l);
x=l*sin(a);
y=l*cos(a);
coordc(300,400,300,0,10,15);
setlinestyle(0,4,3);
line(450,210,450+x,210-y);
setfillstyle(1,14);
fillellipse(450+x,210-y,10,10);
setfillstyle(1,5);
fillellipse(450+20*a,400-L/200,1,1);
coordc(450,450,130,90,20,15);
delay(1);
}
outhzxy1(80,400,"按任意键继续,按ESC退出!",9);
if(getch()!=27) goto A;
else
cleardevice();
for(i=450;i>=100;i-=2)
{setfillstyle(1,0);
bar(0,0,640,480);
outhzxy3(100,i,"欢迎您使用本程序",3,0,4);
outhzxy3(225,i+250,"再 见",4,0,14);
}
delay(20000);
closegraph();
}
解决方案 »
- FindWindow能查找遍历指定类的所有窗口吗?不指定标题.
- 散分兼总结一下DLL声明的一些问题
- 怎样用CFileDialog加载磁盘文件到KODAK控件中?
- vc 动态菜单,动态增加删除菜单,windows窗口退出后怎么保存菜单
- 请问,ctypedptrarray可以作为参数传递么?
- RichEdit 字体颜色的一个奇怪问题
- 如何能获得、查看到通过document.writeln("")写出来的html?
- 送分 那位大虾帮我翻译一下 急 分不够可以加
- 异常退出的问题
- _求Win2000专业版通过ADSL拔号实现上网软件。(是否有ENTERNET 300 FOR 2000?)
- 使用List Control 控件显示数据表中数据的问题,诚请老师指教~
- 程序本身重新启动的问题.
QQ 16831274 联系吧