我有这样的代码:
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 :(得分: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_edit
,b_edit
,c_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。