1)启动Matlab并进入GUIDE环境:在Command Window下输入“guide”,进入GUIDE环境。出现如下图所示的界面(写到这里,发现文字叙述很繁琐,但还得写,要命)。这里Matlab提供了一个新建空白界面及三个样本界面,它们分别是:GUI with Uicontrols;GUI with Axes and Menu;Modal Question Dialog;当然还有一个标签是用来打开已经编写好的GUI的。一般来说,我们会用Blank GUI,即空白的界面来写自己的东西。进入后,Matlab就新建了一个fig文件(默认名是untitled.fig),同时得到如下的编辑窗口:
从上图我们可以看出Matlab 的Guide环境可以分为三个部分即菜单栏和工具栏、用户控件集、用户界面编辑窗口。菜单栏,暂时不作介绍,我们主要使用用户控件集(其它软件一般称为工具箱),用户控件集主要有命令按钮(Push Button)、切换按钮(Toggle Button)、单选按钮(Radio Button)、复选框按钮(Checkbox)、编辑框(Edit Button)、静态文本框(Static Button)
、滚动杆(Slider)、列表框(Listbox)、弹出式菜单(Pop-menu)、坐标轴(Axes)等。严格地讲, 坐标轴不能算控件的范畴。用户界面编辑窗口用于对受控的图形窗口进行编辑, 比如添加按钮、静态文本框等。
首先,在用户界面编辑窗口添加4个命令按钮(显示是OK的用个PUSH BUTTON),再如下图所示添加5个静态文本框(Static Text)、5个编辑文本框(Edit Text)和一个坐标系(Axes)

其次,按下表设置每个控件的属性值(具体操作是:右击要设置属性的控件——property inspector 命令——在弹出的属性窗口中找到相应的属性名称——将该属性的值修改成自己需要的值)
控件名 |
属性 |
属性修改值 |
PushButton1 |
FontSize |
16 |
|
String |
螺旋线 |
|
Tag |
pushbuttonLxx |
PushButton2 |
FontSize |
16 |
|
String |
内摆线 |
|
Tag |
pushbuttonNBX |
PushButton3 |
FontSize |
16 |
|
String |
圆旋转成圆环 |
|
Tag |
pushbuttonCtoC |
PushButton4 |
FontSize |
16 |
|
String |
退出 |
|
Tag |
pushbuttonExit |
Static Text1 |
String |
大圆半径 |
Static Text2 |
String |
小圆半径 |
Static Text3 |
String |
修正值 |
Static Text4 |
String |
圆半径 |
Static Text5 |
String |
离转轴的距离 |
Edit Text1 |
String |
空或设置成一个适定值,如10 |
|
Tag |
editBCR |
Edit Text2 |
String |
空或设置成一个适定值,如2 |
|
Tag |
editSCR |
Edit Text3 |
String |
空或设置成一个适定值,如1 |
|
Tag |
editXZZ |
Edit Text4 |
String |
空或设置成一个适定值,如4 |
|
Tag |
editCR |
Edit Text5 |
String |
空或设置成一个适定值,如10 |
|
Tag |
editBExit |
注:上面控件名称的编号,比如1,2之类,在界面上是没有的,只是我按照从上到下的次序,为方便叙述而编写的。
最后,添加程序(在添加程序前,最好先将文件保存一下,比如以Exp8.m为文件名保存),添加程序的常用方法是:单击菜单命令view——M-file Editor,此时,得到下面的程序:
function varargout = Exp8(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Exp8_OpeningFcn, ...
'gui_OutputFcn', @Exp8_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{:});
end
%上面的是系统初始化代码,绝对不要去修改它们。
function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%上面的函数返回的量直接到命令窗口。
function pushbuttonLxx_Callback(hObject, eventdata, handles)
%上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
function pushbuttonNBX_Callback(hObject, eventdata, handles)
%上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
% --- Executes on button press in pushbuttonExit.
function pushbuttonExit_Callback(hObject, eventdata, handles)
%上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
function editBCR_Callback(hObject, eventdata, handles)
%上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
BigCircleRadial=str2double(get(hObject,'String'));
function editBCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editBCR的属性值。
function editSCR_Callback(hObject, eventdata, handles)
%上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
function editSCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editSCR的属性值。
function editXZZ_Callback(hObject, eventdata, handles)
%上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
function editXZZ_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editXZZ的属性值。
function pushbuttonCtoC_Callback(hObject, eventdata, handles)
%上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
function editCR_Callback(hObject, eventdata, handles)
%上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
function editCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editCR的属性值。
function editDist_Callback(hObject, eventdata, handles)
function editDist_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editDist的属性值。
下面真正添加自己的程序,最后成的程序如下:自己添加的程序用红色表示。
function varargout = Exp8(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Exp8_OpeningFcn, ...
'gui_OutputFcn', @Exp8_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{:});
end
%上面的是系统初始化代码,绝对不要去修改它们。
function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%这里选择了一个图片文件,作为初始画面,具体的图片可以选择自己喜欢的。
map1=imread('Water lilies.jpg');
image(map1)
%上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%上面的函数返回的量直接到命令窗口。
function pushbuttonLxx_Callback(hObject, eventdata, handles)
%上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
axes(handles.axes1)
cla
v=2;
alf=pi/6;
omg=pi/5;
t=0:0.01:100;
x=v*sin(alf).*cos(omg*t).*t;
y=v*sin(alf).*sin(omg*t).*t;
z=v*cos(alf).*t;
%plot3(x,y,z)
axis([-100 100 -100 100 0 160])
grid on
axis equal on
comet3(x,y,z)
%上面的程序是“一质点,沿着已知圆锥面的一条直母线自圆锥的顶点起,作等速直线运动,另一方面这一条母线在圆锥面上,过圆锥的顶点绕圆锥的轴(旋转轴)作等速的转动,这时质点在圆锥面上的轨迹”的动态形成过程。
function pushbuttonNBX_Callback(hObject, eventdata, handles)
%上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
axes(handles.axes1)
cla
a=str2double(get(handles.editBCR,'String'));
b=str2double(get(handles.editSCR,'String'));
k=str2double(get(handles.editXZZ,'String'));
axis([-a-2 a+2 -a-2 a+2 0 a+2])
line([-a-2,a+2],[0,0]);
hold on
line([0,0],[-a-2,a+2
u=0:pi/30:2*pi;
x=a*cos(u);
y=a*sin(u);
plot(x,y)
x=b*cos(u)+a-b;
y=b*sin(u);
plot(x,y)
axis equal on
grid on
theta=0:pi/1800:k*a*pi;
x=(a-b)*cos(b/a*theta)+b*cos((a-b)/a*theta);
y=(a-b)*sin(b/a*theta)-b*sin((a-b)/a*theta);
comet(x,y)
%上面的程序是内摆线的动态的形成过程
% --- Executes on button press in pushbuttonExit.
function pushbuttonExit_Callback(hObject, eventdata, handles)
%上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
ss=questdlg('你真的要退出吗?','退出信息窗口!','不,我还想看看!','是的,我要退出!','是的,我要退出!');
switch ss
case '是的,我要退出!'
delete(handles.figure1);
end
%上面的程序是退出程序时信息窗口
function editBCR_Callback(hObject, eventdata, handles)
%上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
function editBCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editBCR的属性值。
function editSCR_Callback(hObject, eventdata, handles)
%上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
function editSCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editSCR的属性值。
function editXZZ_Callback(hObject, eventdata, handles)
%上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
function editXZZ_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editXZZ的属性值。
function pushbuttonCtoC_Callback(hObject, eventdata, handles)
%上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
axes(handles.axes1)
cla
%a=4;
%b=10;
a=str2double(get(handles.editCR,'String'));
b=str2double(get(handles.editDist,'String'));
u=0:pi/30:2*pi;
y=a.*cos(u)+b;
z=a.*sin(u);
n=length(u);
x=0*ones(1,n);
if a<b
axis([-b-2 b+2 -b-2 b+2 -a-2 a+2])
else
axis([-a-2 a+2 -a-2 a+2 -b-2 b+2])
end
plot3(x,y,z)
pause(1)
for t=0:pi/60:2*pi
x=y.*sin(t);
y1=y.*cos(t);
plot3(x,y1,z)
pause(0.1)
grid on
hold on
%axis equal on
%view([-20,0])
end
%上面的程序是圆旋转成圆环的动态的形成过程
function editCR_Callback(hObject, eventdata, handles)
%上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
function editCR_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editCR的属性值。
function editDist_Callback(hObject, eventdata, handles)
function editDist_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%上面的函数用来在程序中设置editDist的属性值。