Проблемы с 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;

1
задан Kate 17 May 2010 в 20:21
поделиться

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'));

Это подтянет текущие строки ваших пользовательских элементов управления текстом редактирования. (Предполагая, что вы назначили формат тега x_edit для каждого из текстовых полей редактирования в руководстве.)

EDIT:

Откройте рисунок, который вы уже создали, с помощью текстовых полей редактирования. Затем убедитесь, что каждое из ваших текстовых полей имеет тег a_edit , b_edit , c_edit , используя инспектор свойств. Затем создайте кнопку с помощью направляющей и откройте инспектор свойств, дважды щелкнув по нему. Найдите поле «tag» и назовите его run . Сохраните фигуру и откройте соответствующий M-файл.

Затем найдите строку с run_Callback (hObject, eventdata, handle) . Поместите под ним следующее:

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
ответ дан 3 September 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: