Matlab中GUI的问题

时间:2010-05-17 20:21:01

标签: user-interface matlab animation

我有这样的代码:

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;

2 个答案:

答案 0 :(得分:1)

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

使用guide,设置uicontrol按钮,以便在将参数输入uicontrol编辑文本框时单击。在按钮的回调下,放置上面的代码,顶部有以下内容:

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_editb_editc_edit。然后使用指南创建一个按钮,并通过双击打开属性检查器。找到“标记”字段,并将其命名为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文件的唯一代码 - 除非您得到这么多工作,否则不要乱用任何其他内容。如果您不希望动画在图形窗口中随机弹出,您也可以使用指南添加一组轴。

答案 1 :(得分:1)

从代码的外观来看,它似乎是一个“脚本”,而不是一个“功能”。

您是否只想要一个'对话框(内置GUI对话框)'?如果是这样,您可以在脚本的开头添加以下内容:


prompt = {'输入参数值“a”:','输入参数值 “b”:','输入参数值“c”:'};
dlg_title ='输入参数值';
num_lines = 1;
def = {'5','5','10'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
一个答案= {1}; A = str2double(一);
B =答案{2}; B = str2double(b)中;
C =答案{3}; C = str2double(C);


%Y.T。