• Matlab GUI编程技巧(十八)【实战一】:自定义线条图像绘制


    🔗 运行环境:Matlab

    🚩 撰写作者:左手の明天

    🥇 精选专栏:《python》

    🔥  推荐专栏:《算法研究》


    💗 大家好🤗🤗🤗,我是左手の明天!💗

    📆  最近更新:2022 年 6 月 19 日,左手の明天的第 261 篇原创博客

    📚 更新于专栏:Matlab GUI编程技巧


    可视化界面效果

    界面 

    当分别点击按钮“螺旋线”、“内摆线”、“圆旋转成圆环”和“退出”命令按钮时,分别出现如下列图示的动态、静态的结果。

    螺旋线图

    内摆线图

    圆动成环图

     退出信息图

     

    操作步骤

    1)启动Matlab并进入GUIDE环境

    在Command Window下输入“guide”,进入GUIDE环境。出现如下图所示的界面(。这里Matlab提供了一个新建空白界面及三个样本界面,它们分别是:GUI with Uicontrols;GUI with Axes and Menu;Modal Question Dialog;当然还有一个标签是用来打开已经编写好的GUI的。一般来说,我们会用Blank GUI,即空白的界面来写自己的东西。进入后,Matlab就新建了一个fig文件(默认名是untitled.fig),同时得到如下的编辑窗口:

     

    从上图我们可以看出Matlab 的Guide环境可以分为三个部分即菜单栏和工具栏、用户控件集、用户界面编辑窗口。

    我们主要使用用户控件集(其它软件一般称为工具箱),用户控件集主要有命令按钮(Push Button)、切换按钮(Toggle Button)、单选按钮(Radio Button)、复选框按钮(Checkbox)、编辑框(Edit Button)、静态文本框(Static Button)、滚动杆(Slider)、列表框(Listbox)、弹出式菜单(Pop-menu)、坐标轴(Axes)等。严格地讲, 坐标轴不能算控件的范畴。用户界面编辑窗口用于对受控的图形窗口进行编辑, 比如添加按钮、静态文本框等。

    2)在用户界面编辑窗口添加相应控件

    首先,在用户界面编辑窗口添加4个命令按钮(显示是OK的用个PUSH BUTTON),再如下图所示添加5个静态文本框(Static Text)、5个编辑文本框(Edit Text)和一个坐标系(Axes)

    其次,按下表设置每个控件的属性值(具体操作是:右击要设置属性的控件——property inspector 命令——在弹出的属性窗口中找到相应的属性名称——将该属性的值修改成自己需要的值)

    控件名

    属性

    属性修改值

    PushButton1

    FontSize

    16

    String

    螺旋线

    Tag

    pushbuttonLxx

    PushButton2

    FontSize

    16

    String

    内摆线

    Tag

    pushbuttonNBX

    PushButton3

    FontSize

    16

    String

    圆旋转成圆环

    Tag

    pushbuttonCtoC

    PushButton4

    FontSize

    16

    String

    退出

    Tag

    pushbuttonExit

    Static Text1

    String

    大圆半径

    Static Text2

    String

    小圆半径

    Static Text3

    String

    修正值

    Static Text4

    String

    圆半径

    Static Text5

    String

    离转轴的距离

    Edit Text1

    String

    空或设置成一个适定值,如10

    Tag

    editBCR

    Edit Text2

    String

    空或设置成一个适定值,如2

    Tag

    editSCR

    Edit Text3

    String

    空或设置成一个适定值,如1

    Tag

    editXZZ

    Edit Text4

    String

    空或设置成一个适定值,如4

    Tag

    editCR

    Edit Text5

    String

    空或设置成一个适定值,如10

    Tag

    editBExit

    最后,添加程序(在添加程序前,最好先将文件保存一下,比如以Exp8.m为文件名保存),添加程序的常用方法是:单击菜单命令view——M-file Editor,此时,得到下面的程序:

    1. function varargout = Exp8(varargin)
    2. gui_Singleton = 1;
    3. gui_State = struct('gui_Name', mfilename, ...
    4. 'gui_Singleton', gui_Singleton, ...
    5. 'gui_OpeningFcn', @Exp8_OpeningFcn, ...
    6. 'gui_OutputFcn', @Exp8_OutputFcn, ...
    7. 'gui_LayoutFcn', [] , ...
    8. 'gui_Callback', []);
    9. if nargin && ischar(varargin{1})
    10. gui_State.gui_Callback = str2func(varargin{1});
    11. end
    12. if nargout
    13. [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    14. else
    15. gui_mainfcn(gui_State, varargin{:});
    16. end
    17. %上面的是系统初始化代码,绝对不要去修改它们。
    18. function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
    19. handles.output = hObject;
    20. guidata(hObject, handles);
    21. %上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
    22. function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
    23. varargout{1} = handles.output;
    24. %上面的函数返回的量直接到命令窗口。
    25. function pushbuttonLxx_Callback(hObject, eventdata, handles)
    26. %上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
    27. function pushbuttonNBX_Callback(hObject, eventdata, handles)
    28. %上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
    29. % --- Executes on button press in pushbuttonExit.
    30. function pushbuttonExit_Callback(hObject, eventdata, handles)
    31. %上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
    32. function editBCR_Callback(hObject, eventdata, handles)
    33. %上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
    34. BigCircleRadial=str2double(get(hObject,'String'));
    35. function editBCR_CreateFcn(hObject, eventdata, handles)
    36. if ispc
    37. set(hObject,'BackgroundColor','white');
    38. else
    39. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    40. end
    41. %上面的函数用来在程序中设置editBCR的属性值。
    42. function editSCR_Callback(hObject, eventdata, handles)
    43. %上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
    44. function editSCR_CreateFcn(hObject, eventdata, handles)
    45. if ispc
    46. set(hObject,'BackgroundColor','white');
    47. else
    48. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    49. end
    50. %上面的函数用来在程序中设置editSCR的属性值。
    51. function editXZZ_Callback(hObject, eventdata, handles)
    52. %上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
    53. function editXZZ_CreateFcn(hObject, eventdata, handles)
    54. if ispc
    55. set(hObject,'BackgroundColor','white');
    56. else
    57. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    58. end
    59. %上面的函数用来在程序中设置editXZZ的属性值。
    60. function pushbuttonCtoC_Callback(hObject, eventdata, handles)
    61. %上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
    62. function editCR_Callback(hObject, eventdata, handles)
    63. %上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
    64. function editCR_CreateFcn(hObject, eventdata, handles)
    65. if ispc
    66. set(hObject,'BackgroundColor','white');
    67. else
    68. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    69. end
    70. %上面的函数用来在程序中设置editCR的属性值。
    71. function editDist_Callback(hObject, eventdata, handles)
    72. function editDist_CreateFcn(hObject, eventdata, handles)
    73. if ispc
    74. set(hObject,'BackgroundColor','white');
    75. else
    76. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    77. end
    78. %上面的函数用来在程序中设置editDist的属性值。

    完整源代码

    1. function varargout = Exp8(varargin)
    2. gui_Singleton = 1;
    3. gui_State = struct('gui_Name', mfilename, ...
    4. 'gui_Singleton', gui_Singleton, ...
    5. 'gui_OpeningFcn', @Exp8_OpeningFcn, ...
    6. 'gui_OutputFcn', @Exp8_OutputFcn, ...
    7. 'gui_LayoutFcn', [] , ...
    8. 'gui_Callback', []);
    9. if nargin && ischar(varargin{1})
    10. gui_State.gui_Callback = str2func(varargin{1});
    11. end
    12. if nargout
    13. [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    14. else
    15. gui_mainfcn(gui_State, varargin{:});
    16. end
    17. %上面的是系统初始化代码,绝对不要去修改它们。
    18. function Exp8_OpeningFcn(hObject, eventdata, handles, varargin)
    19. handles.output = hObject;
    20. guidata(hObject, handles);
    21. %这里选择了一个图片文件,作为初始画面,具体的图片可以选择自己喜欢的。
    22. map1=imread('Water lilies.jpg');
    23. image(map1)
    24. %上面的代码,告诉我们,一般的用户界面的自己设置的初始化状态应添加在这个函数内。
    25. function varargout = Exp8_OutputFcn(hObject, eventdata, handles)
    26. varargout{1} = handles.output;
    27. %上面的函数返回的量直接到命令窗口。
    28. function pushbuttonLxx_Callback(hObject, eventdata, handles)
    29. %上面的函数是点击螺旋线按钮时,执行的代码,即可以在此处添加有关螺旋线的程序代码。
    30. axes(handles.axes1)
    31. cla
    32. v=2;
    33. alf=pi/6;
    34. omg=pi/5;
    35. t=0:0.01:100;
    36. x=v*sin(alf).*cos(omg*t).*t;
    37. y=v*sin(alf).*sin(omg*t).*t;
    38. z=v*cos(alf).*t;
    39. %plot3(x,y,z)
    40. axis([-100 100 -100 100 0 160])
    41. grid on
    42. axis equal on
    43. comet3(x,y,z)
    44. %上面的程序是“一质点,沿着已知圆锥面的一条直母线自圆锥的顶点起,作等速直线运动,另一方面这一条母线在圆锥面上,过圆锥的顶点绕圆锥的轴(旋转轴)作等速的转动,这时质点在圆锥面上的轨迹”的动态形成过程。
    45. function pushbuttonNBX_Callback(hObject, eventdata, handles)
    46. %上面的函数是点击内摆线按钮时,执行的代码,即可以在此处添加有关内摆线的程序代码。
    47. axes(handles.axes1)
    48. cla
    49. a=str2double(get(handles.editBCR,'String'));
    50. b=str2double(get(handles.editSCR,'String'));
    51. k=str2double(get(handles.editXZZ,'String'));
    52. axis([-a-2 a+2 -a-2 a+2 0 a+2])
    53. line([-a-2,a+2],[0,0]);
    54. hold on
    55. line([0,0],[-a-2,a+2
    56. u=0:pi/30:2*pi;
    57. x=a*cos(u);
    58. y=a*sin(u);
    59. plot(x,y)
    60. x=b*cos(u)+a-b;
    61. y=b*sin(u);
    62. plot(x,y)
    63. axis equal on
    64. grid on
    65. theta=0:pi/1800:k*a*pi;
    66. x=(a-b)*cos(b/a*theta)+b*cos((a-b)/a*theta);
    67. y=(a-b)*sin(b/a*theta)-b*sin((a-b)/a*theta);
    68. comet(x,y)
    69. %上面的程序是内摆线的动态的形成过程
    70. % --- Executes on button press in pushbuttonExit.
    71. function pushbuttonExit_Callback(hObject, eventdata, handles)
    72. %上面的函数是点击退出按钮时,执行的代码,即可以在此处添加退出时的程序代码。
    73. ss=questdlg('你真的要退出吗?','退出信息窗口!','不,我还想看看!','是的,我要退出!','是的,我要退出!');
    74. switch ss
    75. case '是的,我要退出!'
    76. delete(handles.figure1);
    77. end
    78. %上面的程序是退出程序时信息窗口
    79. function editBCR_Callback(hObject, eventdata, handles)
    80. %上面的函数是 editBCR这个编辑文本按钮回调时,执行的代码。
    81. function editBCR_CreateFcn(hObject, eventdata, handles)
    82. if ispc
    83. set(hObject,'BackgroundColor','white');
    84. else
    85. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    86. end
    87. %上面的函数用来在程序中设置editBCR的属性值。
    88. function editSCR_Callback(hObject, eventdata, handles)
    89. %上面的函数是editSCR这个编辑文本按钮回调时,执行的代码。
    90. function editSCR_CreateFcn(hObject, eventdata, handles)
    91. if ispc
    92. set(hObject,'BackgroundColor','white');
    93. else
    94. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    95. end
    96. %上面的函数用来在程序中设置editSCR的属性值。
    97. function editXZZ_Callback(hObject, eventdata, handles)
    98. %上面的函数是editXZZ这个编辑文本按钮回调时,执行的代码。
    99. function editXZZ_CreateFcn(hObject, eventdata, handles)
    100. if ispc
    101. set(hObject,'BackgroundColor','white');
    102. else
    103. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    104. end
    105. %上面的函数用来在程序中设置editXZZ的属性值。
    106. function pushbuttonCtoC_Callback(hObject, eventdata, handles)
    107. %上面的函数是点击圆旋转成圆环按钮时,执行的代码,即可以在此处添加圆旋转成圆环时的程序代码。
    108. axes(handles.axes1)
    109. cla
    110. %a=4;
    111. %b=10;
    112. a=str2double(get(handles.editCR,'String'));
    113. b=str2double(get(handles.editDist,'String'));
    114. u=0:pi/30:2*pi;
    115. y=a.*cos(u)+b;
    116. z=a.*sin(u);
    117. n=length(u);
    118. x=0*ones(1,n);
    119. if a<b
    120. axis([-b-2 b+2 -b-2 b+2 -a-2 a+2])
    121. else
    122. axis([-a-2 a+2 -a-2 a+2 -b-2 b+2])
    123. end
    124. plot3(x,y,z)
    125. pause(1)
    126. for t=0:pi/60:2*pi
    127. x=y.*sin(t);
    128. y1=y.*cos(t);
    129. plot3(x,y1,z)
    130. pause(0.1)
    131. grid on
    132. hold on
    133. %axis equal on
    134. %view([-20,0])
    135. end
    136. %上面的程序是圆旋转成圆环的动态的形成过程
    137. function editCR_Callback(hObject, eventdata, handles)
    138. %上面的函数是editCR这个编辑文本按钮回调时,执行的代码。
    139. function editCR_CreateFcn(hObject, eventdata, handles)
    140. if ispc
    141. set(hObject,'BackgroundColor','white');
    142. else
    143. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    144. end
    145. %上面的函数用来在程序中设置editCR的属性值。
    146. function editDist_Callback(hObject, eventdata, handles)
    147. function editDist_CreateFcn(hObject, eventdata, handles)
    148. if ispc
    149. set(hObject,'BackgroundColor','white');
    150. else
    151. set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    152. end
    153. %上面的函数用来在程序中设置editDist的属性值。

     


    🌟全文共 8154 个字码字总结不易老铁们来个三连点赞、关注、评论🌟

    🌟作者左手の明天🌟

    🌟原创不易,转载请联系作者并注明出处🌟


     

  • 相关阅读:
    分布式ETL工具Sqoop实践
    【Python】 - Python的内置函数isinstance()中的参数classinfo一共有多少种,可以判断多少种类型?
    网站文章生成技术-网站文章生成工具免费
    基于Java的健身俱乐部管理系统设计与实现(亮点:健身课程课程、会员下单、在线支付)
    前端使用 Konva 实现可视化设计器(15)- 自定义连接点、连接优化
    SRS Config 二 Stream Caster
    TCP协议详解
    Array类(C#)
    ​搜狐大量员工遭遇“工资补助”诈骗;​腾讯客服回应“借钱就能避免微信号被封”;TypeScript 4.7发布|极客头条
    状态模式:封装对象状态并改变行为的设计模式
  • 原文地址:https://blog.csdn.net/ywsydwsbn/article/details/125359155