猎狗追击兔子问题.pptVIP

  • 143
  • 0
  • 约2.48千字
  • 约 8页
  • 2017-07-16 发布于四川
  • 举报
2009级信息与计算科学专业、统计专业 猎狗追兔子问题 开始跑! 题目:狗追兔子问题 y x h y=f(x) B (0,60) A(100,0) O 现有一只兔子,一只猎狗,兔子位于猎狗的正西100米处。假设兔子与猎狗同时发现对方并一起起跑,兔子往正北60米处的巢穴跑,而猎狗在追兔子,已知兔子、猎狗是匀速跑且猎狗的速度是兔子的两倍。问题是兔子能否安全逃回到巢穴? 问题分析: 由题意得,这是一道数学追击问题。 模型: 假设兔子沿直线逃回巢穴,而猎狗始终追击方向始终朝向兔子。即猎狗追击路线为一条曲线。 y x y=f(x) B (0,60) 巢穴 A(100,0) O兔子起始位置 兔子逃跑路线 猎狗追击路线 猎狗起始位置 y x y=f(x) B (0,60) 巢穴 A(100,0) O兔子起始位置 (0,y1)E (X1,Y1)C D(X2,Y2) (0,y2)F At1 At2 如图所示,f(x)上每一点的切线为此时刻兔子与猎狗位置的连线。 这样就可以得到f(x)上 每一点的斜率,即:f’(xt)=tanAt; 又由题可知: y0=f(x0)=100; y0=f(x0)=100 dy/dx=tan At 这样就可以求得一条 与f(x)近似的折线(就是常 微分方程中学得欧拉折线), 当时间步长△t取得足够小时, 可以认为这条折线就是f(x). y x y=f(x) B (0,60) 巢穴 A(100,0) O兔子起始位置 At (Xt,Yt) (0,yt) 猎狗追击路线:y=f(x),速度:2v,t时刻位置为(Xt,Yt); 兔子逃跑路线:x=0,速度:v, t时刻位置为(0,yt); 由模型得:猎狗t时刻追击方向与水平方向的夹角At满足: tanAt= (Yt-yt)/(Xt-0); cosAt=-Xt/sqrt(Xt2+(Yt-yt)2); sinAt=(yt-Yt)/ Xt/sqrt(Xt2+(Yt-yt)2) 设时间步长为△t,则在t+△t时,狗的位置 ,可表示为: Xt+1=Xt-(2*v* △t)*cosAt; Yt+1=Yt+(2*v* △t)*sinAt; yt=yt+v* △t; y0=0;Y0=0;X0=100; 显然,当猎狗追上兔子时 Xt=0;此时在比较Yt与B点的纵坐标 大小,若Yt大于60则追不上,若Yt小 于或等于60则能追上。 #includestdio.h #includemath.h void main() { double Y[10000],X[10000],y[10000],T=0.01,v=10,sinA,cosA;//T为时间步长取:0.01 y[0]=0;Y[0]=0;X[0]=100;//X[i],y[i],Y[i]表示i时刻的坐标点 for(int i=0;;i++) { sinA=(y[i]-Y[i])/sqrt(X[i]*X[i]+(y[i]-Y[i])*(y[i]-Y[i])); cosA=X[i]/sqrt(X[i]*X[i]+(y[i]-Y[i])*(y[i]-Y[i])); X[i+1]=X[i]-2*v*T*cosA; Y[i+1]=Y[i]+2*v*T*sinA; y[i+1]=y[i]+v*T; if(X[i+1]=0)//X[i]第一次小于或等于0时追到兔子,根据此时Y[i]是否大于60判断猎狗能否在兔子到达巢穴之前追到它 { if(Y[i+1]=60)printf(“猎狗在%f米时 能够追上兔子!\n,Y[i+1]); else printf(“猎狗在兔子回巢穴前不能追上兔子!); break; } } } 运行结果大概为在66.699946米时,猎狗能追上兔子。(取兔子实际速度约为10m/s) function sequient(m,n) Y=zeros(m,n); y=zeros(m,n); X=zeros(m,n); x=zeros(m,n); v=10;A=1;B=0;T=0.01; Y(m,1)=0;y(m,1)=0;X(m,1)=100; for i=1:(n-1) A=X(m,i)./sqrt(X(m,i).^2+(Y(m,i)-y(m,i)).^2);

文档评论(0)

1亿VIP精品文档

相关文档