狗追兔子问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三
实验问题:
如图所示,有一个猎狗在B 点位置发现了一只兔子正东北方距离它200米的地方O 处,此时兔子开始一8米/秒的速度正西北方距离位120米的洞口A 全速跑去,假设猎狗在追逐兔子的时候始终朝着兔子的方向全速奔跑,,按要求完成下面的实验:
(1) 问猎狗能追上兔子的最小速度是多少?
(2) 在猎狗能追上兔子的情况下,猎狗跑过的路程是多少?
(3) 画出猎狗追赶兔子奔跑的曲线图。
(4) 假设在追赶过程中,当猎狗与兔子之间的距离为30米时,兔子由于害怕, 奔跑的速度每秒减半,而猎狗却由于兴奋奔跑的速度每秒增加0.1倍,在这种情况下,再按前面的(1)—(3)完成实验任务。
问题分析:
此题是以缉私船追赶走私船为背景的一道数学追击问题。 理论基础:
设t 时刻狗的位置: ,兔子的位置是:(,k y )追赶方向可用方向余弦表示为:22)()(cos k k k k k k k y y x x x x -+--=α 22)()(sin k k k k k k k y y x y y x -+--=α
),(k k y x
取时间步长为△t ,则在t+△t 时,狗的位置),(11++k k y x ,可表示为:
之后比较追击点的纵坐标与兔子洞的纵坐标,以判断是否可以追上。
在第一问中,利用狗的速度的循环,以是否能在规定范围内追击到为限制条件,找出能追击到的最小速度,作为狗的最小速度。在循环的过程中,避免超出界限而造成无限循环。
运用了if 语句,对是否可以追击到进行了选择,以达到预期的筛选目标。
程序设计流程图:
⑴.建立狗与兔子的横纵坐标的数组→对兔子和狗的坐标赋初值并赋值变量→按照狗速度的可能值设定循环范围→循环的条件(即追击住的条件)→按照数学理论基础编写循环内容→判断是否能在入洞追击住→①是,则退出循环,此时的速度即为狗的最小速度→②否,速度递加,再次进行循环→输出狗的最小速度
⑵输入狗的速度→对坐标以及一些重要的变量进行初始化赋值→进入循环,循环的条件是是否追击上兔子并且循环中追击的纵坐标不超过兔子洞的纵坐标→按照数学理论基础编写循环内容→循环结束→if 语句判断追击情况→①追击过程中追击的纵坐标超过兔子洞的纵坐标,说明在规定距离没有追上,则输出速度太小→②追击点的纵坐标不超过兔子洞的纵坐标,说明在规定距离内兔子被追到了,则输 ∆≈∆=-+,cos 1k k k k t b x x x αk k k k t b y y y αsin 1∆≈∆=-+
出追击时间与兔子的逃跑路程
⑶根据上面运算时的得到的四个数组,可以画出追击图来
程序内容:
第一问:
a=8;
dogxa=[];cabbitxa=[];dogya=[];cabbitya=[];
d=1;
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;
t=0;
dt=0.01;
for b=10:0.5:40
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;
t=0;
while(sqrt((dogx-cabbitx)^2+(dogy-cabbity)^2)>d&cabbi ty<200)
t=t+dt;
dogx=dogx+b*dt*(cabbitx-dogx)/sqrt((dogx-cabbitx )^2+(dogy-cabbity)^2);
dogy=dogy+b*dt*(cabbity-dogy)/sqrt((dogx-cabbitx )^2+(dogy-cabbity)^2);
cabbitx=-a*cos(pi/4)*t;
cabbity=a*sin(pi/4)*t;
end
if cabbity<=60*sqrt(2)
break
end
end
fprintf('the minspeed of dog id:%2f',b);
第二问:
a=8;
b=17;
d=0.1;
dogxb=[];cabbitxb=[];dogyb=[];cabbityb=[];
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;
t=0;
dt=0.01;
s=0;
while(sqrt((dogx-cabbitx)^2+(dogy-cabbity)^2)>d)
t=t+dt;
dogx0=dogx;
dogy0=dogy;
dogx=dogx+b*dt*(cabbitx-dogx)/sqrt((cabbitx-dogx)^2+( cabbity-dogy)^2);
dogxb=[dogxb,dogx];
dogy=dogy+b*dt*(cabbity-dogy)/sqrt((cabbitx-dogx)^2+( cabbity-dogy)^2);
dogyb=[dogyb,dogy];
cabbitx=-a*cos(pi/4)*t;
cabbity=a*sin(pi/4)*t;
cabbitxb=[cabbitxb,cabbitx];
cabbityb=[cabbityb,cabbity];
s=s+sqrt((dogx0-dogx)^2+(dogy0-dogy)^2);
end
fprintf('the length dog run is:%.1f',s);
第三问:
plot(dogxb,dogyb,cabbitxb,cabbityb,'*')
第四问:
①
a=8;
dogxa=[];cabbitxa=[];dogya=[];cabbitya=[];
d=1;
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;
t=0;
dt=0.01;
for b=8:0.5:40
dogx=-100*sqrt(2);dogy=-100*sqrt(2);cabbitx=0;cabbity =0;
t=0;
c=b;