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