Matlab GUI等待,直到按下按钮

22次浏览(最近30天)
伯克·奥古尔坎·帕拉克
评论: 图像分析 2020年5月2日
大家好,我在尝试模拟四杆机构。有两个按钮:启动和停止。当我按下开始按钮时,模拟将开始,模拟将停止,直到我再次按下开始按钮。
这是我的GUI:
这是我的密码:
%---在开始按钮中按按钮时执行。
函数startButton_Callback (hObject eventdata处理)
L1=str2double(handles.L1.String);
L2 = str2double (handles.L2.String);
L3 = str2double (handles.L3.String);
L4 = str2double (handles.L4.String);
一个= (0,0);%A noktasının [x,y] konumları -fix olduğu için buraya yazıldı。
D = (L1, 0);%D noktasının[x,y]konumları-修复buraya yazıldı的olduğu iç。
%---------------------------------自动轴定标器-------------------------------
k = 1;
对于θ= 0:0.1:2 *π
BD =√L1, L2 ^ 2 + * L2-2 * L1 * L2 * cos(θ));%karesi中的L1'等于L1。^2
fi=acos((L3*L3+L4*L4-BD*BD)/(2*L3*L4));
1 = 2 *: (l2 * sin(θ)+ L4 * sin (fi)) / (L1 + L3-L2 * cos(θ)L4 * cos (fi)));
θ4=2*atan((L2*sin(θ2)-L3*sin(fi))/(L4-L1+L2*cos(θ2)-L3*cos(fi));
%2)联合noktalarının konumları girilir。
B(k,:)=[(L2*cos(theta2)),(L2*sin(theta2))];%B noktasının [x,y] konumları
C(k,:)=[(L2*cos(θ2)+L3*cos(θ3)),(L2*sin(θ2)+L3*sin(θ3));
k = k + 1;
结束
Cx=C(:,1);
Cy=C(:,2);
Bx = B (: 1);
By=B(:,2);
Cx_min = min (Cx);
Cx_max=max(Cx);
Cy_min = min (Cy);
Cy_max=max(Cy);
Bx_min = min (Bx);
Bx_max = max (Bx);
By_min = min ();
By_max = max ();
F = [Bx_min Cx_min];
G=[由_min,Cy_min];
= (Cx_max-L1) + (Cx_max-L1) + (Cx_max-L1);
下_x=min(F)-(L1/10);
上_y=Cy_max+(L1/10);
lower_y = min(G) - (L1/10);
清晰的通过Cx_min Cx_max Cy_min Cy_max
清晰的Bx_min Bx_max By_min By_max F G BD B C fi
清晰的1 theta4θ
%------------------------------------------------------------------------------------
轴(gca,“平等”);%长宽比:亚尼·达哈·奥兰比尔·格拉菲克·格吕努特·苏萨奥拉。
轴([lower_x upper_x、lower_y upper_y]);%X ekseni -2.5'den 6'ye,Y ekseni -2.5'den 6'e kadar olsun。
对于θ= 0:0.1:2 *π
% getappdata (handles.FuncName VarName);
J = getappdata (handles.stopButton,“停止”);
如果J = = 0
rmappdata (handles.stopButton“停止”)
%1) Pozisyon analizi ile bulunan açı değerleri girilir。
BD =√L1, L2 ^ 2 + * L2-2 * L1 * L2 * cos(θ));%karesi中的L1'等于L1。^2
fi=acos((L3*L3+L4*L4-BD*BD)/(2*L3*L4));
1 = 2 *: (l2 * sin(θ)+ L4 * sin (fi)) / (L1 + L3-L2 * cos(θ)L4 * cos (fi)));
θ4=2*atan((L2*sin(θ2)-L3*sin(fi))/(L4-L1+L2*cos(θ2)-L3*cos(fi));
%2)联合noktalarının konumları girilir。
B = [(L2 * cos(θ)),(L2 * sin(θ)));%B noktasının [x,y] konumları
C=[(L2*cos(θ2)+L3*cos(θ3)),(L2*sin(θ2)+L3*sin(θ3));
%3) 林克勒·奥卢图鲁尔。
l2_line =线([A(1),(1)]、[A (2), (2)),“线宽”4“颜色”,“k”);
l3_line =线([B (1), C(1)]、[B (2), C (2)),“线宽”4“颜色”,“k”);
l4_line =线([C(1)、D(1)]、[C(2)、D (2)),“线宽”4“颜色”,“k”);
%线([x1,x2],[y1,y2])科穆图x1,y1'denx2,y2科努穆纳ç伊兹吉çeker。
%一(1)个ifadesi,一个vektörünün 1.elemanınıifade eder。
%线宽:切兹吉宁·卡隆勒·阿亚尔拉纳比尔。
%颜色:Cizginin rengi ayarlanabilir。
% 4) Jointler oluşturulur。
a_joint = viscircles ((L2/20),“颜色”,“r”,“线宽”,6);%关节横突
b_joint = viscircles (B (L2/20)“颜色”,“r”,“线宽”,6);
c_joint = viscircles (C (L2/20)“颜色”,“r”,“线宽”,6);
d_joint = viscircles (D (L2/20),“颜色”,“r”,“线宽”,6);
% viscircles (cemberin merkez konumu,纱线ı帽ı);
%线型='-'实心'-'虚线':'虚线'-.'虚线'.'
%5轨道(varsa)oluşturulur。
C_traj = viscircles (C (L2/2000)“颜色”,“k”);% C的轨迹
%-在这里等待直到startButton被按下-
删除(a_joint);
删除(b_接头);
删除(c_joint);
删除(d_joint);
删除(l2_行);
删除(l3_行);
删除(l4_line);
结束
%1) Pozisyon analizi ile bulunan açı değerleri girilir。
BD =√L1, L2 ^ 2 + * L2-2 * L1 * L2 * cos(θ));%karesi中的L1'等于L1。^2
fi=acos((L3*L3+L4*L4-BD*BD)/(2*L3*L4));
1 = 2 *: (l2 * sin(θ)+ L4 * sin (fi)) / (L1 + L3-L2 * cos(θ)L4 * cos (fi)));
θ4=2*atan((L2*sin(θ2)-L3*sin(fi))/(L4-L1+L2*cos(θ2)-L3*cos(fi));
%2)联合noktalarının konumları girilir。
B = [(L2 * cos(θ)),(L2 * sin(θ)));%B noktasının [x,y] konumları
C=[(L2*cos(θ2)+L3*cos(θ3)),(L2*sin(θ2)+L3*sin(θ3));
%3) 林克勒·奥卢图鲁尔。
l2_line =线([A(1),(1)]、[A (2), (2)),“线宽”4“颜色”,“k”);
l3_line =线([B (1), C(1)]、[B (2), C (2)),“线宽”4“颜色”,“k”);
l4_line =线([C(1)、D(1)]、[C(2)、D (2)),“线宽”4“颜色”,“k”);
%线([x1,x2],[y1,y2])科穆图x1,y1'denx2,y2科努穆纳ç伊兹吉çeker。
%一(1)个ifadesi,一个vektörünün 1.elemanınıifade eder。
%线宽:切兹吉宁·卡隆勒·阿亚尔拉纳比尔。
%颜色:Cizginin rengi ayarlanabilir。
% 4) Jointler oluşturulur。
a_joint = viscircles ((L2/20),“颜色”,“r”,“线宽”,6);%关节横突
b_joint = viscircles (B (L2/20)“颜色”,“r”,“线宽”,6);
c_joint = viscircles (C (L2/20)“颜色”,“r”,“线宽”,6);
d_joint = viscircles (D (L2/20),“颜色”,“r”,“线宽”,6);
% viscircles (cemberin merkez konumu,纱线ı帽ı);
%线型='-'实心'-'虚线':'虚线'-.'虚线'.'
%5轨道(varsa)oluşturulur。
C_traj = viscircles (C (L2/2000)“颜色”,“k”);% C的轨迹
暂停(0.01);%她的0.01萨尼耶德·比尔格吕恩图·甘塞莱梅西·亚帕
删除(a_joint);
删除(b_接头);
删除(c_joint);
删除(d_joint);
删除(l2_行);
删除(l3_行);
删除(l4_line);
%删除fonksiyonu sayesinde biönceki adımda oluşan görüntütemizlenir
结束
%cla:Eksenleri temizlemek için kullanılır!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
%——在停止按钮按下按钮时执行。
函数stopButton_Callback (hObject eventdata处理)
% setappdata (hObject VarName,价值)
setappdata (hObject“停止”, 0 )%停止=0
2评论
伯克·奥古尔坎·帕拉克
抱歉,问题是我如何提供这样的代码#在这里等待直到按下startButton#

登录以发表评论。

接受的答案

图像分析
图像分析 2020年5月2日
我有这个确切的功能在附加的非常小的演示。我以前已经贴过很多次了,现在又来了。单击Go和stop将启动或暂停计数器的更新及其在GUI上的显示。

更多答案(2)

亚当·丹兹
亚当·丹兹 2020年5月1日
编辑:亚当·丹兹 2020年5月1日
以下是一个概念性计划,您可以实施该计划,以便在模拟停止时重新启动模拟。如果您不确定如何解释或实施其中一个步骤,请在下面留下具体评论,我可以帮助您完成。
  1. 确定在模拟开始后应保存哪些变量。换句话说,在模拟暂停后,哪些变量包含在模拟暂停的相同位置启动模拟所需的数据。
  2. 这些变量应该列在代码的顶部,并声明为持久变量.持久变量存储函数结束后的值,因此下次调用函数时,它保留它们的值。
  3. 在函数的开头,确定持久变量是否为空(参见空空如也).如果持久变量为空,则模拟应该从头开始。如果持久变量不是空的,模拟应该从它停止的地方开始。有两种方法可以做到这一点。首先,可以基于持久变量重新定义for循环。第二,您可以在for循环的顶部使用一个条件来跳过下一个迭代,直到循环计数器到达它停止的位置。它看起来是这样的:如果先前的循环计数<=θ2;持续终止
  4. 当模拟结束或如果您决定重新启动模拟时,您必须清除持久变量,以便下次调用函数时,它将从头开始模拟。
2评论
亚当·丹兹
亚当·丹兹 2020年5月2日
啊,对了。停止按钮应该在GUI中设置一个从1到0的标志。对停止按钮的回调只会使用 guidata
控制模拟的循环应在每次迭代时检查此标志的值。如果标志为0,则模拟停止,然后将标志重置为1。

登录以发表评论。


伯克·奥古尔坎·帕拉克
编辑:伯克·奥古尔坎·帕拉克 2020年5月2日
我为我的目的安排了图像分析演示。谢谢大家。
1评论
图像分析
图像分析 2020年5月2日
如果我的回答解决了你的问题,那么你能“接受”我的回答吗?提前谢谢。

登录以发表评论。

下载188bet金宝搏


释放

R2016a

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!