函数 varargout = MissileFig(varargin)
% MISSILEFIG M 文件 for MissileFig.fig
% MISSILEFIG 本身会创建一个新的 MISSILEFIG 或提高现有的
% 单例*。
%
% H = MISSILEFIG 将手柄返回给新的 MISSILEFIG,或将手柄返回给
% 现有的单例*。
%
% MISSILEFIG('CALLBACK',hObject,eventData,handles,...) 调用 MISSILEFIG 中名为 CALLBACK 的 local
% 函数。M 与给定的输入参数。
%
% MISSILEFIG('Property','Value',...) 创建一个新的 MISSILEFIG 或提高
现有的单例百分比*。从左侧开始,属性值对在调用 GUI 之前
% 应用于 GUI MissileFig_OpeningFunction。
无法识别的属性名称或无效值使属性应用程序
% 停止。所有输入都通过varargin传递给MissileFig_OpeningFcn。
%
% *请参阅 GUIDE 的“工具”菜单上的 GUI 选项。选择“GUI 仅允许运行一个
实例(单例)”。
%
% 另请参阅: GUIDE, GUIDATA, GUIHANDLES
% 版权所有 2002-2003 The MathWorks, Inc.% 编辑上面的文本以修改响应以帮助 导弹
图
% 最后由 GUIDE v2.5
修改 2007 年 8 月 2 日 10:26:23
% 开始初始化代码 - 不要编辑
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
“gui_Singleton”,gui_Singleton,...
“gui_OpeningFcn”,@MissileFig_OpeningFcn,...
“gui_OutputFcn”,@MissileFig_OutputFcn,...
“gui_LayoutFcn”, [] , ...
“gui_Callback”, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout [varargout{1:nargout
}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
结束
% 结束初始化代码 - 请勿编辑
% --- 在 MissileFig 可见之前执行。
函数 MissileFig_OpeningFcn(hObject, eventdata, handles, varargin)
% 此函数没有输出参数,请参阅 OutputFcn。
% hObject 句柄到数字
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的处理结构(参见 GUIDATA)% MissileFig 的 varargin 命令行参数(参见 VARARGIN)
% 为 MissileFig
句柄选择默认命令行输出。output = hObject;
% 更新句柄结构
guidata(hObject, 句柄);
initialize_gui(hObject, handles, false);
% UIWAIT 使 MissileFig 等待用户响应(参见 UIRESUME)
% uiwait(handles.figure1);
% --- 此函数的输出将返回到命令行。
函数 varargout = MissileFig_OutputFcn(hObject, eventdata, handles)
% varargout 单元格数组,用于返回输出参数(参见 VARARGOUT);
% hObject 句柄到数字
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(请参阅 GUIDATA)
% 从句柄结构
varargout 获取默认命令行输出{1} = handles.output;
% --- 在“计算”中按下按钮时执行。
function Calculate_Callback(hObject, eventdata, handles)
% hObject handle to Calculate (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%¨¨¨ì
%比例导引法拦截目标
%最简单情况:
%目标和拦截导弹在同一平面内,拦截导弹做机动运动,目标做匀速直线运动
%--------------------------------------------------------------------------
%----------------------参数说明---------------------------------------------
%Vt-目标速度大小,Vt=400 m/s;
%Bt-目标速度与水平参考线夹角,为一常量,Bt= 20度=pi/9 弧度;----------
%Vm-拦截弹速度大小,Vm= 800 m/s;
%Am-拦截弹速度与水平参考线夹角,不断变化,初始值Am=0度=0 弧度;
%q-拦截弹与目标之间的连线与水平参考线之间的夹角,变量,初始值q = 0度=0 弧度;
%R-拦截弹与目标的视线距离,初始值R =10 Km=10,000 m;
%dR=Vt*cos(Bt-q)-Vm*cos(Am-q)-对R求导表达式;
%dq=Vt*sin(Bt-q)-Vm*sin(Am-q)-对q求导表达式;
%导引律:dAm=Const*abs(dR)*dq/Vm,其中Const为常量,取值范围3-5,此处取4;
%Ac=Vm*dAm=Const*abs(dR)*dq-拦截弹法向加速度大小;%Rmin-脱靶量;%--------------------------------------------------------------------------
%------------------------------源代码--------------------------------------
clc
Vt= handles.metricdata.Vt;
Bt= handles.metricdata.Bt;
Vm= handles.metricdata.Vm;
Am= handles.metricdata.Am;
R = sqrt(handles.metricdata.X^2+handles.metricdata.Y^2);
Con=handles.metricdata.Const;
Rmin=0;
%下面计算视线角q,必须考虑目标坐标正负
if(handles.metricdata.X>=0)
q = atan(handles.metricdata.Y/handles.metricdata.X);
else
q=pi+atan(handles.metricdata.Y/handles.metricdata.X);
end
%初始化目标和拦截弹的坐标,用来显示运动轨迹
K=20000;
Xm=零(K,1);
Ym=零(K,1);
Xt=零(K,1);
Yt=零(K,1);
Xt(1,1)=handles.metricdata.X;
Yt(1,1)=handles.metricdata.Y;
交流=零(K,1);%存放法向加速度值
D=zeros(K,1);%存放拦截弹和目标间的距离
i=1;
T=handles.metricdata.T;%时间步长
dR=Vt*cos(Bt-q)-Vm*cos(Am-q);
while(R>0) dq=(Vt*sin(Bt-q)-Vm*sin(Am-q)
)/R;
dAm=Con*dq;
%dAm=Con*abs(dR)*dq/Vm;--------此式不能拦截某些方向上的目标
%计算脱靶量
if((dR>=0 |(dR<0 && abs(dR)<1e-10))&& abs(dAm)<=1e-10 && Xt(i,1)>Xm(i,1))
Rmin=R;
破;
end
Ac(i,1)=dAm*Vm;%计算法向加速度
%计算并储存新坐标
D(i,1)=R;
i=i+1;
Xm(i,1)=Xm(i-1,1)+Vm*cos(Am)*T;
Ym(i,1)=Ym(i-1,1)+Vm*sin(Am)*T;
Xt(i,1)=Xt(i-1,1)+Vt*cos(Bt)*T;
Yt(i,1)=Yt(i-1,1)+Vt*sin(Bt)*T;
q=q+dq*T;
Am=Am+dAm*T;
R=R+dR*T;
dR=Vt*cos(Bt-q)-Vm*cos(Am-q);
结束
%-------------------------输出结果------------------------------------------
if(Rmin==0)
disp('拦截所需时间:');
i*T
图(2) 图(Xt(1:i-1),Yt(1:i-1),'红色')
坚持;
plot(Xm(1:i-1),Ym(1:i-1)) title('拦截弹和目标的运动轨迹') xlabel('水平坐标(单位:m)
');
ylabel('垂直坐标(单位:m)');
legend('目标运动轨迹','拦截弹运动轨迹');
网格打开;
推迟;
图(3)
t=1:i-1;
plot(t*T,Ac(1:i-1,1)) title('拦截弹法向加速度的大小变化') xlabel('时间(单位:S)') ylabel('加速度值(单位:m/s^2)')
grid on;
else
disp('拦截失败!');
end
disp('脱靶量(单位:米):');
Rmin
t=1:i-1;
图(4)图(t*T,D(1:i-1,1)
);
title('拦截弹和目标之间距离')xlabel('时间(单位:S)')ylabel('距离(单位:m)')
function X_Callback(hObject, eventdata, handles)% hObject 句柄到 X (参见 GCBO)% eventdata 保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的结构(参见 GUIDATA)
% 提示: get(hObject,'String') 以文本
形式返回 X 的内容% str2double(get(hObject,'String')) 返回 X 的内容作为双精度
X = str2double(get(hObject, 'String'));
handles.metricdata.X = X;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 X_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 X (参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到毕竟 CreateFcns 调用%
提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
函数 Y_Callback(hObject, eventdata, handles)% hObject 句柄到 Y (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(参见 GUIDATA)% 提示: get(hObject,'String')
以文本
形式返回 Y 的内容% str2double(get(hObject,'String')) 返回 Y 的内容作为双精度
Y = str2double(get(hObject, 'String'));
handles.metricdata.Y = Y;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Y_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Y(参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用
% 之后才创建 提示:编辑控件通常在 Windows 上具有白色背景.
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
函数 Bt_Callback(hObject, eventdata, handles)% hObject 句柄到 Bt (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄结构与句柄和用户数据(参见 GUIDATA)% 提示: get(hObject,'String')
以文本
形式返回 Bt 的内容% str2double(get(hObject,'String')) 返回 Bt 的内容作为双精度
X = str2double(get(hObject, 'String'));
handles.metricdata.Bt = X*pi/180;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Bt_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Bt (参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用
% 之后才创建 提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
函数 Am_Callback(hObject, eventdata, handles)% hObject 句柄到 Am (参见 GCBO)% eventdata 保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(参见 GUIDATA)% 提示: get(hObject,'String')
以文本
形式返回 Am 的内容% str2double(get(hObject,'String')) 返回 Am 的内容作为双精度
X = str2double(get(hObject, 'String'));
handles.metricdata.Am = X*pi/180;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Am_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Am (参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用
后才创建 % 提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
结束
函数 Vm_Callback(hObject, eventdata, handles)% hObject 句柄到 Vm (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(参见 GUIDATA)% 提示: get(hObject,'String')
以文本
形式返回 Vm 的内容% str2double(get(hObject,'String')) 将 Vm 的内容作为双精度
返回 X = str2double(get(hObject, 'String'));
handles.metricdata.Vm = X;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Vm_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Vm (参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用
% 之后才创建 提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
结束
函数 Vt_Callback(hObject, eventdata, handles)% hObject 句柄到 Vt (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的结构(参见 GUIDATA)% 提示: get(hObject,'String')
以文本
形式返回 Vt 的内容% str2double(get(hObject,'String')) 将 Vt 的内容作为双精度
返回 X = str2double(get(hObject, 'String'));
handles.metricdata.Vt = X;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Vt_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Vt (参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用%
之后才创建 提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- 在重置中按下按钮时执行。
函数 Reset_Callback(hObject, eventdata, handles)% hObject 句柄重置 (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的结构(参见 GUIDATA)
initialize_gui(gcbf, 句柄, true);
函数 Const_Callback(hObject, eventdata, handles)% hObject handle to Const(参见 GCBO)% eventdata 保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(参见 GUIDATA)% 提示: get(hObject,'String') 以文本
形式返回 Const 的内容% str2double(get(hObject,'String'))
将 Const 的内容作为双精度
X = str2double(get(hObject, 'String'));
handles.metricdata.const = X;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 Const_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 Const(参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到之后才创建所有 CreateFcns 都调用%
提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --------------------------------------------------------------------
函数initialize_gui(fig_handle、句柄、重置)% 如果 metricdata 字段存在并且重置标志为 false,则表示
% 我们只是通过在 cmd 行% 启动时从 cmd 行
% 调用它来重新初始化 GUI。因此,请纾困,因为我们不想重置数据。
如果 isfield(句柄,'metricdata') && ~isreset
返回;
结束
句柄.度量数据.Vm = 800;
handles.metricdata.Am = 0;
handles.metricdata.Vt = 400;
handles.metricdata.Bt = 20;
handles.metricdata.const = 4;
handles.metricdata.X = 10000;
handles.metricdata.Y = 0;
handles.metricdata.T = 0.1;
设置(手柄。Vm, 'String', handles.metricdata.Vm);
设置(手柄。我,“字符串”,handles.metricdata.Am);
设置(手柄。Vt, 'String', handles.metricdata.Vt);
设置(手柄。Bt, 'String', handles.metricdata.Bt);
设置(手柄。Const, 'String', handles.metricdata.Const);
设置(手柄。X, 'String', handles.metricdata.X);
设置(手柄。Y, 'String', handles.metricdata.Y);
设置(手柄。T, 'String', handles.metricdata.T);
i=imread('D:\MATLAB7\work\gui.bmp');
轴(句柄.轴2);
显示(i);
% 更新句柄结构
guidata(句柄.Figure 1, 句柄);
函数 T_Callback(hObject, eventdata, handles)% hObject 句柄到 T (参见 GCBO)% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 带有句柄和用户数据的句柄结构(参见 GUIDATA)% 提示: get(hObject,'String') 以文本
形式返回 T 的内容% str2double(get(hObject,'String'))
返回 T 的内容作为双精度
X = str2double(get(hObject, 'String'));
handles.metricdata.T = X;
guidata(hObject,handles)
% --- 在对象创建期间设置所有属性后执行。
函数 T_CreateFcn(hObject, eventdata, handles)% hObject 句柄到 T(参见 GCBO)
% 事件数据保留 - 将在 MATLAB
% 的未来版本中定义 句柄空 - 句柄直到所有 CreateFcns 调用
% 之后才创建 提示:编辑控件在 Windows 上通常具有白色背景。
% 参见 ISPC 和计算机。
如果 ispc
设置(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
结束