c语言船动画编程,小船过河追踪动画最佳模型

小船过河追踪动画最佳模型

水的流速成抛物线分布,敌船在对岸跑,警船在另一头自动追踪。

大家可以运行一下,欢迎提意见。

头文件应该

#include

#include

#include

#include

#include

#include

#include

#include

main()

{

float X,Y,x,y,U,u,ux,c,d,k,v1,v2,t=0.0001,m,mm;

void *p1,*p2;

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

m=sqrt(3);

mm=20+6*m;

setcolor(4);/*draw the ship*/

arc(20,228,210,330,12);

arc(20,216,240,300,12*m);

line(20,216+12*m,20,216);

line(20,216,mm,222);

line(mm,222,20,228);

setfillstyle(1,4);

floodfill(20,239,4);

floodfill(21,222,4);

p1=malloc(imagesize(20-6*m,216,mm,240));

getimage(20-6*m,216,mm,240,p1);

setcolor(14);/*draw the except ship*/

arc(80,68,210,330,12);

arc(80,56,240,300,12*m);

line(80,56+12*m,80,56);

line(80,56,60+mm,62);

line(60+mm,62,80,68);

setfillstyle(1,14);

floodfill(80,79,14);

floodfill(81,62,14);

p2=malloc(imagesize(80-6*m,56,80+6*m,80));

getimage(80-6*m,56,80+6*m,80,p2);

y=d=160;c=50;u=120;v2=20;

do

{

cleardevice();

clrscr();

if(v2+20>u) break;

x=60;

X=Y=0;

setfillstyle(1,10);

bar(0,55,640,242);

outtextxy(240,45,"Ship Catching Mode");

outtextxy(240,260,"red is the catcher");

outtextxy(240,280,"whrite is water");

outtextxy(240,300,"blue is excapter");

coordc(20,240,600,0,600,3);

coordc(20,240,180,90,180,3);

do{x=x+v2*t;

k=atan((y-Y)/(x-X));

v1=(-4*c*Y*Y)/(d*d)+(4*c*Y)/d;

ux=(-v1*tan(k)*tan(k)+sqrt(u*u+tan(k)*tan(k)*u*u-tan(k)*tan(k)*v1*v1))/(1+tan(k)*tan(k));

U=sqrt(v1*v1+u*u+2*v1*ux);

X=X+U*cos(k)*t;

Y=Y+U*sin(k)*t;

putimage(20+X-6*m,216-Y,p1,1);

putimage(20+x-6*m,56,p2,1);

setcolor(10);

putimage(20+X-6*m,216-Y,p1,1);

putimage(20+x-6*m,56,p2,1);

putpixel(20+x,240-y,1);

putpixel(20+X,240-Y,5);

putpixel(20+v1,240-Y,15);

if(fabs(Y-y)<=0.01&&fabs(X-x)<=0.01) break;}while(1);

v2+=20;

printf("Press any key to continue\nPress Esc to end ");}while(getch()!=27);

closegraph();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值