与在Matlab
GUI问题我有这样的代码:与在Matlab
a=5;
b=a;
c=10;
u = (0:0.05*pi:2*pi)'; %'
v = [0:0.05*pi:2*pi];
X = a*sin(u)*cos(v);
Y = a*sin(u)*sin(v);
Z = c*cos(u)*ones(size(v));
Z(Z>0)=0; % cut upper
V1=4/3*pi*a*b*c;
d=1/2;
e=2^d;
a2=a/e;
b2=a/e;
c2=c;
V2=4/3*pi*a2*b2*c2;
X2 = a2*sin(u)*cos(v);%-2.5;
Y2 = b2*sin(u)*sin(v);
Z2 = c2*cos(u)*ones(size(v));%+0.25;
Z2(Z2>0)=0; % cut
h=1/3;
for j = 1:20
k1=(sin(pi*j/20)+0.5)^h;
a=a*k1;
c=c*k1;
X = a*sin(u)*cos(v);
Y = a*sin(u)*sin(v);
Z = c*cos(u)*ones(size(v));
Z(Z>0)=0;
a2=a2*k1;
b2=a2*k1;
c2=c2*k1;
X2 = a2*sin(u)*cos(v)+5;%-2.5;
Y2 = b2*sin(u)*sin(v);
Z2 = c2*cos(u)*ones(size(v));%+0.25;
Z2(Z2>0)=0;
hS1=surf(X,Y,Z);
alpha(.11)
hold on
hS2=surf(X2,Y2,Z2);
hold off
axis([-20 20 -20 20 -20 20]);
F(j) = getframe;
end
movie(F,4)
我不得不输入参数a,b,c从键盘。我做了GUI &试图通过使用“编辑文本”下面一个函数来做到这一点,但它不工作(( 我不明白什么是它的问题。
function a_edit_Callback(hObject, eventdata, handles)
user_entry = str2double(get(hObject,'string'));...
a=user_entry;
的问题是你的回调函数执行你的代码并不是'看到'你在编辑文本回调中定义的参数,你需要在子函数中建立你的变量,因为它们不是全局变量
使用guide
,设置一个uicontrol
按钮,当你输入你的参数到你的uicontrol编辑文本框中时,点击按钮。在你的按钮回调下,将上面的代码放在t他顶部:
a=str2double(get(handles.a_edit,'String'));
b=str2double(get(handles.b_edit,'String'));
c=str2double(get(handles.c_edit,'String'));
这将拉入编辑文本uicontrols的当前字符串。 (假设你已经分配给每个在引导编辑文本框的标签格式x_edit。)
编辑:
打开你已经在编辑文本框创建的身影。接下来,通过使用属性检查器检查以确保每个文本框都具有标记a_edit
,b_edit
,c_edit
。然后使用向导创建按钮,然后通过双击打开属性检查器。找到'tag'字段,并将其命名为run
。保存你的身影,并打开相应的M文件。
接下来,找到run_Callback(hObject, eventdata, handles)
的行。将其下的以下内容:
a=str2double(get(handles.a_edit,'String'));
b=str2double(get(handles.b_edit,'String'));
c=str2double(get(handles.c_edit,'String'));
%# Add the rest of your code from above verbatim, minus the first three lines
这应该是唯一的代码,添加到自动生成的M-文件 - 不乱用别的,直到你获得这么多的工作。如果您不想在动画窗口中随机弹出动画,则还可以使用向导添加一组轴。
从代码的外观来看,它似乎是一个'脚本'而不是'函数'。
你只是想要一个'对话框(内置GUI对话框)'吗?
提示= {“输入参数值‘一’:”,“输入参数值 ‘B’:”,“Enter如果是这样,你可以在你的脚本的开头添加以下参数值“c”:'};
dlg_title ='输入参数值';
num_lines = 1;
def = {'5','5','10'};
answer = inputdlg(提示,dlg_title,num_lines,def);
a = answer {1}; a = str2double(a);
b = answer {2}; b = str2double(b);
c = answer {3}; c = str2double(c);
%Y.T.
什么不起作用? 我怀疑你是从GUI获得这些值,但是当你需要它们时,它们超出了范围。你是否理解子函数中变量的范围? – MatlabDoug 2010-05-17 21:11:57