将代码改成可以输出动态图效果的代码 clear; clc; x0=[500,12000,30/180*pi]; [t,x]=ode45(@dyfun,[0 26],x0); rm=x(:,1); rt=x(:,2); qm=x(:,3); ym=rm.*sin(qm); zm=rm.*cos(qm); yt=rt.*sin(qm); zt=rt.*cos(qm); plot(zm,ym,zt,yt,'--'); xlabel('z/m'); ylabel('x/m'); title('水平攻击面内的弹道曲线'); legend('导弹弹道','目标航迹','Location','SouthEast'); function f=dyfun(t,x) vt=200; v=300; faiv=x(3)+asin((vt/v)*(x(1)/x(2))*sin(x(3))); f(1)=v*cos(x(3)-faiv); f(2)=-vt*cos(x(3)); f(3)=-v/x(1)*sin(x(3)-faiv); f=f(:); end
时间: 2023-10-28 10:04:33 浏览: 120
要实现动态图效果,你可以使用MATLAB自带的`animatedline`函数,将每个时间点的弹道点逐个添加到`animatedline`对象中,然后在循环中不断更新图形即可。下面是修改后的代码:
```
clear; clc;
x0=[500,12000,30/180*pi];
[t,x]=ode45(@dyfun,[0 26],x0);
rm=x(:,1);
rt=x(:,2);
qm=x(:,3);
ym=rm.*sin(qm);
zm=rm.*cos(qm);
yt=rt.*sin(qm);
zt=rt.*cos(qm);
fig = figure(); % 创建图形窗口
xlim([-20000, 20000]); % 设置坐标轴范围
ylim([0, 5000]);
xlabel('z/m');
ylabel('x/m');
title('水平攻击面内的弹道曲线');
legend('导弹弹道','目标航迹','Location','SouthEast');
m = animatedline('Color','r', 'LineWidth', 2); % 创建动态图对象1
t = animatedline('Color','b', 'LineStyle', '--', 'LineWidth', 2); % 创建动态图对象2
for i = 1:length(zm)
addpoints(m, zm(i), ym(i)); % 添加导弹弹道点
addpoints(t, zt(i), yt(i)); % 添加目标航迹点
pause(0.1); % 等待0.1秒,使动态效果更加明显
drawnow; % 更新图形
end
function f=dyfun(t,x)
vt=200;
v=300;
faiv=x(3)+asin((vt/v)*(x(1)/x(2))*sin(x(3)));
f(1)=v*cos(x(3)-faiv);
f(2)=-vt*cos(x(3));
f(3)=-v/x(1)*sin(x(3)-faiv);
f=f(:);
end
```
运行代码后,你将看到一个动态图窗口,显示导弹弹道和目标航迹的运动轨迹。每个时间点的弹道点将逐个添加到图形中,形成动态效果。注意,由于添加点的速度比较慢,你需要等待一段时间才能看到完整的动态效果。你可以根据需要调整`pause`函数的参数,以控制添加点的速度。
阅读全文