问题背景
解决方法①(时间离散化求解)
思想:将时间离散化为每一个dt处理,代曲为直,计算每一dt时刻两舰连线与正东方向的夹角,以for循环结构实现追击。
n=5000;
x=zeros(n,4);
x(1,1)=0;x(1,2)=0;%走私舰初始坐标
x(1,3)=10;x(1,4)=0;%缉毒舰初始坐标
dt=0.01;
u=8;
v=12;
writerObj=VideoWriter(‘ChaseDrug.avi’);%定义一个视频文件保存追击动画
open(writerObj);%打开该视频文件
for i=1:n-1
d=sqrt((x(i,1)-x(i,3))^ 2+(x(i,2)-x(i,4))^2);
cos=(x(i,3)-x(i,1))/d;
sin=(x(i,2)-x(i,4))/d;
plot(x(i,1),x(i,2),‘ro’,x(i,3),x(i,4),‘bo’);
frame=getframe;%将当前帧存入结构体frame中
writeVideo(writerObj,frame);%将该帧写入视频
hold on
pause(0.1)
if (x(i,1)=x(i,3))||(x(i,2)=x(i,4)) %继续追击的条件
x(i+1,2)=x(i,2)+udt;
x(i+1,3)=x(i,3)-vdtcos;
x(i+1,4)=x(i,4)+vdtsin;
end
if x(i,3)<1E-3
x(i,3)=0; %如果缉毒舰与正北方向偏差小于1m,则认为缉毒舰在正北方向,降低运算量
end
if (x(i,2)>0)&&(abs(x(i,4)-x(i,2))<0.05) %两舰距离在50m以内判定为追上
close(writerObj);%关闭视频文件句柄
break
end
end
t=idt %得出追击所需时间(h)
xlabel(‘正东方向/km’);
ylabel(‘正北方向/km’);
legend(‘走私舰’,‘缉毒舰’);
关于保存作图过程的方法,见https://blog.youkuaiyun.com/weixin_30487317/article/details/97728063
https://blog.youkuaiyun.com/lingyunxianhe/article/details/77857317
解决方法②(微分方程求解)
直线AB与缉私舰路线相切,