猎狗追兔子问题仿真实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结果分析和结论:
总结和体会: 由于题中并没有给出具体数据,在设计程序时,许多标准都要自己考虑。 因为本题我们给正方形设定的边长为 200,因此为了缩短模拟时间,速
度设定为 10,同时,由于边长较大,如果按照上题,判别精度 d 设为 1 的话, 将会进入死循环。因此,我们在设计时应当注意模拟的精度的选择。
d1 = norm(C-O); d2 = norm(O-A); d3 = norm(A-B); d4 = norm(B-C); v = 10; t=; while d1>2
plot(O(1),O(2),'r+'); plot(A(1),A(2),'b*'); plot(B(1),B(2),'gp'); plot(C(1),C(2),'yo'); e1 = C-O; d1 = norm(e1); e2 = O-A; d2 = norm(e2); e3 = A-B; d3 = norm(e3); e4 = B-C; d4 = norm(e4); e1 = e1/d1; %表示点O的方向,下同 e2 = e2/d2; e3 = e3/d3; e4 = e4/d4; O = O+v*t*e1; A = A+v*t*e2; B = B+v*t*e3; C = C+v*t*e4; pause end
1. 有一只猎狗在 B 点位置发现了一只兔子在正东北方距离它 200 米的地方 O 处, 此时兔子开始以 8 米/秒的速度向正西北方距离为 120 米的洞口 A 全速跑去,假 设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,用计算机仿真法等多 种方法完成下面的实验:
(1) 问猎狗能追上兔子的最小速度是多少 (2) 在猎狗能追上兔子的情况下,猎狗跑过的路程是多少 (3) 画出猎狗追赶兔子奔跑的曲线图。 (4) 假设在追赶过程中,当猎狗与兔 子之间的距离为 30 米时,兔子由于害怕, 奔跑的速度每秒减半,而猎狗却由于兴 奋奔跑的速度每秒增加倍,在这种情 况下,再按前面的(1)—(3)完成实验任务。
程序设计: (1)~(2)问: 流程图:
速度
兔子猎狗的距离是否大于

求下一个点
否否
兔子的纵坐标是否≤120

输出 v
程序代码: G=[-200,0]; T=[0,0];%用向量G,T分别表示狗和兔子的坐标 d=; t=0;dt=; for v=8::100 G=[-200,0]; T=[0,0]; t=0; while (norm(G-T)>d&&norm(T)<120) t=t+dt; e=T-G; D=norm(T-G); e=e/D; G=G+v*dt*e; T(2)=8*t; end if T(2)<=120 break end end fprintf('狗的最小速度是:%.2f',v) s=v*t; fprintf('狗跑过的距离是:%.2f',s)
的坐标分别为
,点 O 的速度沿单位向量:
,从
而得出 个时间点的坐标。
。其他四个点也用类似的方法,即可得到所有点在每
程序设计: 流程图:
标出四个点坐标; 求四个方向单位向量

距离是否够小是结束程序代码: hold on axis([0,200,0,200]) O = [0,0]; A = [200,0]; B = [200,200]; C = [0,200];
t=t+dt; x=x-v*dt*x/sqrt(x^2+(u*t-y)^2); xb=[xb,x]; y=y+v*dt*(u*t-y)/sqrt(x^2+(u*t-y)^2); yb=[yb,y]; Y=u*t; Yb=[Yb,Y]; end xb; yb; Yb; Xb=zeros(length(Yb)); plot(xb,yb,'m*',Xb,Yb,'c*') gtext('猎狗') gtext('兔子')
第(4)问: ① 最小速度:
流程图:在(1)的高亮部分后方加上:
距离是否≤30


v=v*^dt
求下一个点
程序代码: u=u*^dt u=8; G=[-200,0]; T=[0,0];% 用向量G,T分别表示狗和兔子的坐标 d=; t=0;dt=; for v=8::100 G=[-200,0]; T=[0,0]; t=0;
结果分析和结论: (1)~(2)问
第(3)问:
第(4)问: ①

总结和体会: 本题其实整体上采取的一个模拟的思想。通过一次一次迭代模拟追捕过
程。从本题速度和仿真时,我们可以发现,在单纯的计算时,直接用向量计 算可以简化很多步骤。但是在仿真时,直接描述各个坐标会更为方便。我们 要根据自己的需求选择表示方法。
c=v; u=8; while (norm(G-T)>d&&norm(T)<120)
if (norm(G-T)<=30) v=v*^dt; u=u*^dt;
end t=t+dt; e=T-G; D=norm(T-G); e=e/D; G=G+v*dt*e; T(2)=T(2)+u*dt; end if T(2)<=120 v=c; break end end fprintf('狗的最小速度是:%.2f',v)
第(3)问: 流程图:


x,y,X,Y
描每一个(X,Y),(x,y) 点
求新的 x,y,X,Y 坐

程序代码: c=-200; u=8; v=; xb=[];yb=[];Xb=[];Yb=[]; d=1; dt=; t=0;
x=c;y=0;X=0;Y=0; hold on axis([-200,0,0,150]) title('猎狗追兔子') text(0,120,'A') text(-200,0,'B') text(0,0,'O') while (sqrt((x-X)^2+(y-Y)^2)>d)
Y=Y+u*dt; plot(x,y,'r*',X,Y,'b*') pause else
t=t+dt; if(m==0||m==1)
u=u/2; v=*v; m=0; end m=m+dt; x=x-v*dt*x/sqrt(x^2+(Y+u*dt-y)^2); y=y+v*dt*(Y+u*dt-y)/sqrt(x^2+(Y+u*dt-y)^2); Y=Y+u*dt; plot(x,y,'r+',X,Y,'b+') pause end s=s+v*dt; end gtext('猎狗') gtext('兔子') x,y,X,Y,t,s
问题分析: (1) 以 O 点为原点,OA 为 y 轴正方向建立平面直角坐标系。用 T(X,Y),G(x,y)
分别表示兔子和狗的位置。用 e 来表示猎狗速度方向的单位向量。则

则有


由于兔子的速度是 8m/s,狗要追上兔子,速度一定大于 8m/s。我们根据 常识估算狗的速度不会超过 100m/s。不妨建立一个 for 循环,逐个尝试 从 8 开始的速度。直到得到一个可以使追击到时,T 的纵坐标小于等于 120 的速度。 (2) 由于狗是匀速运动,路程 s 即(1)中得到的 v 和 t 的积。 (3) 根据(1)中的思路,以 dt=为时间步长我们可以算得每个时间点 T 与 G 的坐标。这里为了方便描点,不再用向量表示,而是直接用坐标 x,y,X,Y 表示。 (4) 只需要在前面的基础上加上:①一个 if 条件,当距离 d≤30 时,狗的速 度 vk+1=vk·^dt,兔子的速度 uk+1=uk·^dt;②s 的计算改为 sk+1=sk+vdt。
2. 使用计算机仿真方法求解下述问题:在正方形的四个顶点上各有一人,如下 图所示,在某一时刻,四人同时出发以匀速按顺时针方向追赶下一个人,如果他 们始终保持对准目标,试确定每个人的行进路线。
问题分析: 以左边为 y 轴,下边为 x 轴建立平面直角坐标系。可以得到四个人的点坐标
为 O(0,0),A(200,0),B(,200,200),C(0,200)。以点 O 为例:设 t 时刻,点 O,C
② 模拟及跑过的距离: 流程图:同上 程序代码: u=8; v=; dt=; t=0; s=0; D=30; d=1; m=0; x=-200;y=0;X=0;Y=0; hold on axis([-200,0,0,150]) title('猎狗追兔子') text(0,120,'A') text(-200,0,'B') text(0,0,'O') while (sqrt((x-X)^2+(y-Y)^2)>d) if(sqrt((x-X)^2+(y-Y)^2)>D) t=t+dt; x=x-v*dt*x/sqrt(x^2+(u*t-y)^2); y=y+v*dt*(u*t-y)/sqrt(x^2+(u*t-y)^2);
相关文档
最新文档