MATLAB实战 | APP设计

news/2024/10/25 13:28:30/

 

01、应用实战

【例1】生成一个用于观察视点仰角和坐标轴着色方式对三维图形显示效果影响的App,界面如图1所示。界面右上部的列表框用于选择绘图数据、切换按钮组用于选择绘图方法,中间的旋钮用于设置视点方位角和仰角,右下部的分档旋钮用于设置坐标轴着色方式、跷板开关用于显示网格线。

■ 图1 App运行界面

操作步骤如下。

1. 打开App设计工具窗口,添加组件

在App设计工具组件库选中“坐标区”组件,将其拖动至编辑区,调整好大小和位置。再添加一个列表框、一个切换按钮组、两个旋钮、一个分挡旋钮和一个跷板开关,然后按图2调整组件的位置和大小。

■ 图2 App界面设计

 

操作步骤如下。

1. 打开App设计工具窗口,添加组件

在App设计工具组件库选中“坐标区”组件,将其拖动至编辑区,调整好大小和位置。再添加一个列表框、一个切换按钮组、两个旋钮、一个分挡旋钮和一个跷板开关,然后按图11-9调整组件的位置和大小。

2. 利用属性面板设置组件对象的属性

在设计视图的编辑区依次选择各个组件对象,在对应的属性面板中按表1设置组件对象的属性。

■ 表1 组件对象的主要属性

3. 编写代码,实现组件功能

(1) 编写自定义函数,包括用于绘制图形的my_plot函数和调整视点的my_view函数。

①  my_plot函数。切换到App设计工具的代码视图,选择功能区的“编辑器”选项卡,单击“插入”命令组中的“添加函数”按钮,这时,在代码中增加了一个私有函数框架,结构如下: 

function results = func(app.
end

也可以在App设计工具的代码浏览器中选择“函数”选项卡,单击“搜索”栏右端的“添加函数”按钮,添加一个私有函数框架。若需要添加公共函数,则单击“添加函数”下拉按钮,从展开的列表中选“公共函数”选项。

将上述函数的名称func更改为my_plot。由于不需要返回值,删去函数头中的“results=”。然后在my_plot函数体中加入以下代码:

%根据在列表框中的选择项目,确定绘图数据
switch app.ListBox.Value
case'Sinc
[x,y] = meshgrid( - 8:0.3:8);
r= sqrt(x.^2 +y.^2);
z= sin(r)./r;
case'Peaks!
[x,Y,z]= peaks;
Spherecase
[x,Y,z]= sphere;
end
%根据在切换按钮组中按下的按钮,确定绘图方法
switch app.ButtonGroup.SelectedObject
case app.Button
surf(app.UIAxes,x,y,z)
app.Knob3.Enable ='On';
case app.Button2
mesh(app.UIAxes,x,Y,z)
app.Knob3.Enable ='Off';
case app.Button3
contour3(app.UIAxes,x,Y,z)
app.Knob3.Enable = 'Off';
end

②my_view函数。按同样方式建立用于更新坐标轴视点的my_view函数框架,然后在my_view函数体中加入以下代码:

app.Knob2.Value;
az =app.Knob.Value;
view(app.UIAxes,az,el)

(2) 编写组件对象回调函数。

①  为打开用户界面窗口编写响应代码。在设计视图中的图形窗口空白处右击,从快捷菜单中选择“回调”菜单项下的“添加StartupFcn回调”命令,这时,将切换到代码视图,并且在代码中增加了StartupFcn函数框架,结构如下:

function startupEcn(app
% Code that executes after component creation
...
end

 也可以在代码视图的代码浏览器中选择“回调”选项卡,单击搜索栏右端的“添加回调函数以响应用户交互”按钮,在弹出的“添加回调函数”对话框中选组件、回调,修改回调函数名(默认名称与回调相同),然后单击“确定”按钮来添加StartupFcn函数框架。要在运行中打开用户界面窗口时,使用默认数据和绘图函数绘制图形,则在StartupFcn函数体中加入以下代码:

my_plot(app)

②为列表框和切换按钮组编写响应代码。在设计视图中,右击列表框对象ListBox,从快捷菜单中选择“回调”菜单项下的“添加ValueChangedFcn回调”命令,这时,将切换到代码视图,并且在代码的methods段中增加了ListBoxValueChanged函数框架,如下所示:

% Value changed function: ListBox
function ListBoxValueChanged(app,event)
end

当程序运行时,用户在列表框中选择一个绘图数据源,将调用my_plot函数绘制图形,因此在ListBoxValueChanged函数体中输入以下代码:

my_plot(app)

单击切换按钮组的某个按钮也将重绘图形,因此按同样方式建立按钮组的回调函数ButtonGroupSelectionChanged,并在函数体中输入以下代码:

my_plot(app)

③  为旋钮对象编写响应代码。建立用于设置视点方位角的旋钮对象的回调函数KnobValueChanged和设置视点仰角的旋钮对象的回调函数Knob2ValueChanged,并在两个函数的函数体中输入以下代码:

(dde)MTA Aw

④  为分挡旋钮编写响应代码。分挡旋钮用于设置着色方式,建立该对象的回调函数Knob3ValueChanged,并在函数体中输入以下代码:

shading(app.UIAxes,app.Knob3.Value)

⑤  为跷板开关编写响应代码。

跷板开关用于显示/隐藏网格,建立该对象的回调函数SwitchValueChanged,并在函数体中输入以下代码:

switch app.Switch.Value
case'On'
grid(app.UIAxes,On')
caseOff'
grid(app.UIAxesOff')
end

4. 运行App

单击App设计工具窗口功能区“设计工具”选项卡中的 “运行”按钮,或快速访问工具栏的“运行”按钮,或按F5键,即可运行程序,结果如图1所示。

5. 打包App

App设计成功后,可以将它打包为一个MATLAB应用模块。在设计视图下单击“设计工具”选项卡中“共享”按钮下的MATLAB App选项,弹出如图3所示的对话框。

■ 图3 应用程序打包对话框

在对话框中“描述您的App”区域输入图标名称等信息,在对话框右边“打包为安装文件”区域的“输出文件夹”栏指定打包文件的输出文件夹,然后单击“打包”按钮。

打包完成后,对话框右边出现“打开输出文件夹”链接。单击此链接,可以看到在输出文件夹生成了两个文件: app1.prj和app1.mlappinstall。

在MATLAB桌面的“当前文件夹”中找到文件app1.mlappinstall,双击这个文件,将弹出如图4所示“安装”对话框。

■ 图4 App“安装”对话框

 

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/1249872.html

相关文章

Spring Boot项目Service类单元测试自动生成

在Spring Boot项目中,对Service类进行单元测试对于开发工程师而言具有重大意义和作用: 验证业务逻辑的正确性和完整性 核心业务逻辑的准确实现:Service类通常包含核心业务逻辑。单元测试确保这些逻辑被正确实现,满足业务需求。处…

stm32 can滤波器接收指定的ID

CAN 文章目录 CAN一、配置1、对扩展数据帧进行过滤:(只接收扩展数据帧)CAN_FilterIdHigh:CAN_FilterIdLow:2、对扩展远程帧过滤:(只接收扩展远程帧)3、对标准远程帧过滤:(只接收标准远程帧)4、对标准数据帧过滤:(只接收标准数据帧)5、对扩展帧进行过滤:(…

主要分布式文件系统架构对比分析:GFS vs. Tectonic vs. JuiceFS

随着技术的进步和数据的不断爆炸,传统的磁盘文件系统已经暴露出它们的局限性。为了满足不断增长的存储需求,分布式文件系统作为动态且可扩展的解决方案应运而生。在本文中,我们探讨了三种代表性分布式文件系统的设计原则、创新和解决的挑战&a…

纹理烘焙:原理及实现

纹理烘焙是计算机图形学中常见的技术,用于将着色器的细节传输到纹理中。 如果你的着色器计算量很大,但会产生静态结果,例如,这非常有用。 复杂的噪音。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器…

DELETE 请求,如何通过ajax进行发送

基本的 DELETE 请求概念 DELETE 请求用于向服务器发送删除资源的请求。它是 RESTful API 中的一个重要方法,用于删除指定的资源。 在 Axios 中,发送 DELETE 请求需要指定目标 URL,并可选地传递一些参数,例如请求头、请求体等。DE…

智能手表上的音频(四):语音通话

上篇讲了智能手表上音频文件播放。本篇开始讲语音通话。同音频播放一样有两种case:内置codec和BT。先看这两种case下audio data path,分别如下图: 内置codec下的语音通话audio data path 蓝牙下的语音通话audio data path 从上面两张图可以看…

刷题笔记(第九天)

1. 求最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”]输出:“fl” 示例 2: 输入:strs [“…

Android12移植busybox

在Android 12中移植busybox,可以通过以下步骤实现: 1. 下载busybox源码:访问https://busybox.net/downloads.html,选择合适的版本下载。 2. 解压源码包:将下载的源码包解压到一个目录中,例如/path/to/bus…