一、简介
说明导弹拦截的计算方法。通过动画和互动演示拦截过程。
二、源代码
%导弹拦截
clear %清除变量
rand('state',0) %随机状态初始化
v2=1.1; %拦截导弹速率与来袭导弹初速度之比
%v2=1; %拦截导弹速率与来袭导弹初速度之比
%v2=0.9; %拦截导弹速率与来袭导弹初速度之比
T=linspace(0,1); %飞行时间
while 1 %做无限循环
figure %创建图形窗口
axis([0,1,-0.2,0.6]) %坐标范围
axis equal off %隐藏坐标
title('导弹拦截','FontSize',20) %标题
text(0,0.5,'导弹来袭时,按空格键发射拦截导弹.','FontSize',16)%显示操作方法
hold on %保持图像
plot([0,1],[0,0]) %画地平线
th=90*rand; %0到90度之间的随机角度
th=th*pi/180; %化为弧度
xx1=0;yy1=0; %来袭导弹的初坐标
xx2=1;yy2=0; %拦截导弹的初坐标
x2=1;y2=0; %拦截导弹的终坐标的初值
c=''; %字符变量置空
dt=0; %时间间隔取0
for t=T %按来袭导弹的时间循环
x1=t*sin(2*th); %计算来袭导弹的横坐标
y1=2*sin(th)^2*(t-t^2); %计算来袭导弹纵坐标
plot([xx1,x1],[yy1,y1],'k','LineWidth',2)%画来袭导弹轨迹
s=sqrt((x2-x1)^2+(y2-y1)^2); %计算两弹之间的距离
if s<=0.02|y1<=0&t~=0 %如果两导弹距离很小或对方导弹落地
plot(x1,y1,'*','MarkerSize',20)%画爆炸射线
break %退出循环
end %结束循环
xx1=x1;yy1=y1; %保存来袭导弹的坐标
c=get(gcf,'CurrentCharacter'); %从键盘取图形窗口的当前字符
if length(c)~=0&&c==' ' %如果c中有字符且为空格
dt=T(2); %取时间间隔
end %结束条件- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
三、运行结果

1940

被折叠的 条评论
为什么被折叠?



