一个人在平面上逆时针方向沿着曲线x^2+y^2=25以恒定的速率v跑步,起点在(5,0)点。这时,一只狗坐在坐标原点处以速率w跑向该人,设狗的运动方向始终指向该人,编写MATLAB文件,以不同的v和w动态演示该追逐过程。
你好同学,代码供参考(人和狗狗的速度都可以更改):
% 追逐
dt = 0.0001;
t = 0:dt:10; % 模拟10s
x1 = nan(size(t)); % 初始化人和狗的位置
y1 = nan(size(t));
x2 = nan(size(t));
y2 = nan(size(t));
x1(1) = 5; % 人初始位置x
y1(1) = 0; % 人初始位置y
x2(1) = 0; % 狗初始位置x
y2(1) = 0; % 狗初始位置y
v = 4; % 4m/s的人
R = 5; % 人绕的圆圈半径
omega = v/R; % 人的角速度
w = 5; % 5m/s的狗狗
for i = 2:length(t) %
x1p = R*cos(omega*t(i)); % 人在当前时间的位置x
y1p = R*sin(omega*t(i)); % 人在当前时间的位置y
d = [x1(i-1)-x2(i-1),y1(i-1)-y2(i-1)]; % 狗指向人的矢量
if(norm(d)<1e-2) % 如果人和狗相差1cm,那么就说接近了,终止循环
break;
end
dir = d/norm(d); % 狗指向人的单位矢量
x2p = x2(i-1) + dt*w*dir(1); % 计算狗的位置
y2p = y2(i-1) + dt*w*dir(2);
x1(i) = x1p;
y1(i) = y1p;
x2(i) = x2p;
y2(i) = y2p;
if(mod(i,floor(0.04/dt))==0) % 设置隔0.04s显示1帧
figure(1); clf;
plot(x1,y1,'r-',x2,y2,'b-'); hold on
plot(x1p,y1p,'ro', 'markerfacecolor', 'r', 'markeredgecolor','k')
plot(x2p,y2p,'bo', 'markerfacecolor', 'b', 'markeredgecolor','k')
axis equal
legend('人的路径','狗的路径','人', '狗', 'Location','BestOutside')
pause(0.000001)
end
end