登录论坛

查看完整版本 : 【分享】追击问题!


chenhuips2
2008-02-21, 21:16
刚刚看到论坛有人问一个关于4人追击的问题~
于是花了点时间把问题处理了一下~
分享出來哈~~
:redface: :redface:

问题简要描述,4人分别从正方形的四个定点出发以相同速率以环式追击。

%追击问题
clear
zb=[0,0;10,0;10,10;0,10];%原始坐标点设置
v=[0.3,0.3,0.3,0.3];%速度设置
t=0.01;%最小时间步长
d0=0.05;%判断追到的最小距离
s=size(zb);%确认追击人数
for i=1:10000
zb(s(1,1)+1,:,i)=zb(1,:,i);%使最后一人的追击对象变成第一人,做成环式追击
zbjl(:,:,i)=zb(:,:,i);%坐标数据记录
if sqrt((zb(1,1,i)-zb(2,1,i))^2+(zb(1,2,i)-zb(2,2,i))^2)<d0%判断结束条件,这里是第一人追到第二人为结束条件
break
end
for j=1:s(1,1)
x=zb(j+1,1,i)-zb(j,1,i);%计算追击2人的坐标差
y=zb(j+1,2,i)-zb(j,2,i);
zb(j,1,i+1)=zb(j,1,i)+v(j)*t*x/sqrt(x^2+y^2);%通过坐标差计算和速度计算出在时间步长的时间内坐标移动的位移
zb(j,2,i+1)=zb(j,2,i)+v(j)*t*y/sqrt(x^2+y^2);
end
end
s=size(zbjl);
hold on
for j=1:s(1,1)-1%绘图
for i=1:s(1,3)
x(i)=zbjl(j,1,i);
y(i)=zbjl(j,2,i);
end
plot(x,y)
end

运行结果见图:

chenhuips2
2008-02-21, 21:34
简要说明:
前面4行是设置一些追击的基本参数,各种参数我都做了动态处理,理论上可以支持N多人环式追击;追击条件这里我选取的是第一个人追上第二个人为结束,当然也可以按照自己的需求来改变追击结束条件~
:redface: :redface:

设置追击速度和最小时间步长以及追到的最小距离这三个参数的时候一定要稍微注意,不要设置出永远追不上的情况~
:smile: :smile:

举例来说:
把前4改为:
zb=[0,0;10,0;10,10;0,10;5,15];%原始坐标点设置
v=[0.3,0.4,0.2,0.3,0.2];%速度设置
t=0.01;%最小时间步长
d0=0.05;%判断追到的最小距离
运行结果就会改变,具体见图:

mathjiang
2008-02-22, 21:29
谢谢分享。我也在考虑这个问题。我曾经做了一个三人追踪的问题,呵呵呵。