Проблемы с GUI в Matlab - PullRequest
       20

Проблемы с GUI в Matlab

1 голос
/ 18 мая 2010

У меня есть такой код:

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 с клавиатуры.Я сделал графический интерфейс и попытался сделать это, используя «Редактировать текст» с функцией ниже, но она не работает ((. Я не могу понять, в чем проблема с ним.
<br> function a_edit_Callback(hObject, eventdata, handles) <br>user_entry = str2double(get(hObject,'string'));... <br>a=user_entry;

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Судя по внешнему виду кода, он выглядит как «скрипт», а не как «функция».

Вы просто хотели «диалог (встроенный диалог GUI)»? Если это так, вы можете добавить следующее в начале вашего скрипта:


prompt = {'Введите значение параметра "a":', 'Введите значение параметра "b": ',' Введите значение параметра "c": '};
dlg_title = 'Ввод значений параметров';
num_lines = 1;
def = {'5', '5', '10'};
answer = inputdlg (prompt, dlg_title, num_lines, def);
а = ответ {1}; а = str2double (а);
б = ответ {2}; б = str2double (б);
с = ответ {3}; с = str2double (с);


% Ю.Т.

1 голос
/ 18 мая 2010

Проблема в том, что ваша функция обратного вызова, выполняющая ваш код, не «видит» параметры, которые вы определили в ваших обратных вызовах редактирования текста. Вам необходимо установить переменные в подфункции, поскольку они не являются глобальными.

Используя 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 для каждого из текстовых полей редактирования в руководстве.)

EDIT:

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

Далее найдите строку с 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-файл - не связывайтесь ни с чем другим, пока вы не заработаете столько работы. Если вы не хотите, чтобы анимация появлялась случайным образом в окне фигуры, вы также можете добавить набор осей с помощью направляющей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...