matlab追击问题
展开全部
% 正方形追击问题:
%
% 在正方形的四个顶点上各有一人.在某一时刻四人同时出发以匀速v按顺时针方向追赶下一个人,
% 如果他们始终保持对准目标,试确定每个人的行进路线.
%
% 假设A追B,B追C,C追D,D追A;
% 以B作为参考系,那么A就朝B方向做速度为v的匀速直线运动,显然当他追上B时,
% 需要走的路程是初始条件下AB的距离,即正方形边长,设为L,时间则为L/v
% 求轨迹解析的方法需要解微分方程组,在matlab下可以用数值方法来做。
% 假设正方形边长为1,将整个过程分为1000步来实现:
% 1.确定初始值;
% 2.根据t时刻4个点的的坐标,求出t+1时刻的坐标
% 3.绘制曲线
% 当然这样做存在误差,减小误差的方法是减小步长。
clear all;clc;close all;
Ax=zeros(1,1000);Ay=Ax;% 存放四个点的轨迹坐标
Bx=zeros(1,1000);By=Bx;
Cx=zeros(1,1000);Cy=Cx;
Dx=zeros(1,1000);Dy=Dx;
Ax(1)=0;Ay(1)=0; %初始坐标
Bx(1)=1;By(1)=0;
Cx(1)=1;Cy(1)=1;
Dx(1)=0;Dy(1)=1;
for t=1:999
Ax(t+1)=Ax(t)+0.001*(Bx(t)-Ax(t))/sqrt((Bx(t)-Ax(t))^2+(By(t)-Ay(t))^2);%A向B前进了千分之一
Ay(t+1)=Ay(t)+0.001*(By(t)-Ay(t))/sqrt((Bx(t)-Ax(t))^2+(By(t)-Ay(t))^2);
Bx(t+1)=Bx(t)+0.001*(Cx(t)-Bx(t))/sqrt((Cx(t)-Bx(t))^2+(Cy(t)-By(t))^2);
By(t+1)=By(t)+0.001*(Cy(t)-By(t))/sqrt((Cx(t)-Bx(t))^2+(Cy(t)-By(t))^2);
Cx(t+1)=Cx(t)+0.001*(Dx(t)-Cx(t))/sqrt((Dx(t)-Cx(t))^2+(Dy(t)-Cy(t))^2);
Cy(t+1)=Cy(t)+0.001*(Dy(t)-Cy(t))/sqrt((Dx(t)-Cx(t))^2+(Dy(t)-Cy(t))^2);
Dx(t+1)=Dx(t)+0.001*(Ax(t)-Dx(t))/sqrt((Ax(t)-Dx(t))^2+(Ay(t)-Dy(t))^2);
Dy(t+1)=Dy(t)+0.001*(Ay(t)-Dy(t))/sqrt((Ax(t)-Dx(t))^2+(Ay(t)-Dy(t))^2);
end
figure;
plot(Ax,Ay,Bx,By,Cx,Cy,Dx,Dy);
自己执行上面程序,看看画出的图!
%
% 在正方形的四个顶点上各有一人.在某一时刻四人同时出发以匀速v按顺时针方向追赶下一个人,
% 如果他们始终保持对准目标,试确定每个人的行进路线.
%
% 假设A追B,B追C,C追D,D追A;
% 以B作为参考系,那么A就朝B方向做速度为v的匀速直线运动,显然当他追上B时,
% 需要走的路程是初始条件下AB的距离,即正方形边长,设为L,时间则为L/v
% 求轨迹解析的方法需要解微分方程组,在matlab下可以用数值方法来做。
% 假设正方形边长为1,将整个过程分为1000步来实现:
% 1.确定初始值;
% 2.根据t时刻4个点的的坐标,求出t+1时刻的坐标
% 3.绘制曲线
% 当然这样做存在误差,减小误差的方法是减小步长。
clear all;clc;close all;
Ax=zeros(1,1000);Ay=Ax;% 存放四个点的轨迹坐标
Bx=zeros(1,1000);By=Bx;
Cx=zeros(1,1000);Cy=Cx;
Dx=zeros(1,1000);Dy=Dx;
Ax(1)=0;Ay(1)=0; %初始坐标
Bx(1)=1;By(1)=0;
Cx(1)=1;Cy(1)=1;
Dx(1)=0;Dy(1)=1;
for t=1:999
Ax(t+1)=Ax(t)+0.001*(Bx(t)-Ax(t))/sqrt((Bx(t)-Ax(t))^2+(By(t)-Ay(t))^2);%A向B前进了千分之一
Ay(t+1)=Ay(t)+0.001*(By(t)-Ay(t))/sqrt((Bx(t)-Ax(t))^2+(By(t)-Ay(t))^2);
Bx(t+1)=Bx(t)+0.001*(Cx(t)-Bx(t))/sqrt((Cx(t)-Bx(t))^2+(Cy(t)-By(t))^2);
By(t+1)=By(t)+0.001*(Cy(t)-By(t))/sqrt((Cx(t)-Bx(t))^2+(Cy(t)-By(t))^2);
Cx(t+1)=Cx(t)+0.001*(Dx(t)-Cx(t))/sqrt((Dx(t)-Cx(t))^2+(Dy(t)-Cy(t))^2);
Cy(t+1)=Cy(t)+0.001*(Dy(t)-Cy(t))/sqrt((Dx(t)-Cx(t))^2+(Dy(t)-Cy(t))^2);
Dx(t+1)=Dx(t)+0.001*(Ax(t)-Dx(t))/sqrt((Ax(t)-Dx(t))^2+(Ay(t)-Dy(t))^2);
Dy(t+1)=Dy(t)+0.001*(Ay(t)-Dy(t))/sqrt((Ax(t)-Dx(t))^2+(Ay(t)-Dy(t))^2);
end
figure;
plot(Ax,Ay,Bx,By,Cx,Cy,Dx,Dy);
自己执行上面程序,看看画出的图!
展开全部
%追击问题
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
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
参考资料: http://www.labfans.com/showthread.php?t=2090
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询