与在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;

+0

什么不起作用? 我怀疑你是从GUI获得这些值,但是当你需要它们时,它们超出了范围。你是否理解子函数中变量的范围? – MatlabDoug 2010-05-17 21:11:57

的问题是你的回调函数执行你的代码并不是'看到'你在编辑文本回调中定义的参数,你需要在子函数中建立你的变量,因为它们不是全局变量

使用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-文件 - 不乱用别的,直到你获得这么多的工作。如果您不想在动画窗口中随机弹出动画,则还可以使用向导添加一组轴。

+0

我按照您的建议操作,但发生的错误相同: ???引用清除的变量user_a。 错误==> GUI_1> Ok_btn_Callback at 266 a = user_a; – Kate 2010-05-18 06:59:03

+0

variable user_a = str2double(get(handles.a_edit,'String')) – Kate 2010-05-18 07:53:15

+0

你在哪个回调中放置了那一行?需要任何代码的唯一回调是你的“运行”按钮回调。 – Doresoom 2010-05-18 13:43:03

从代码的外观来看,它似乎是一个'脚本'而不是'函数'。

你只是想要一个'对话框(内置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.