2020年的五一假期只能宅在家里,无所事事看看代码。在这里做一个记录,免的忘记了。matlab作为界面编程的工具十分简单,而且也超级实用。快速的方法是用GUIDE或者APP Design来做,至于拖动几个按键加几个坐标,则没有必要写下来。主要的是要理解编程的框架,理解一些常用的函数,那么才能做出有个性的软件。
从编程框架上来说,非常类似于MFC的编程,各种窗体和对象都是基于类来实现,每一个对象都有一个句柄。Uicontrol,uitab,uipanel,uiaxes可以通过查看help帮助文档,实现各种对象,可以在坐标轴上面画各种图案,这些控件的参数可以指定父类,可以指定是按键还是文本编辑框,可以指定窗体的颜色,可以指定消息响应函数。
- isfield函数,从下面的例子里面可以看到,他的作用就是判断某个数据元组是否在给定的变量里面,真值为1,假值为0。可以在函数内部判断函数参数名称或者类型使用。
S.x = linspace(0,2*pi);
S.y = sin(S.x);
S.title = 'y = sin(x)'
field = {'x','y','z','title','error'};
TF = isfield(S,field)
TF = 1x5 logical array
1 1 0 1 0
- feval函数,从下面的例子可以看到,他接受变量形式的执行函数,特别适合于多个控件的消息响应函数,把函数名称通过变量形式传递给唯一的处理模块,这样就实现了批量处理函数的功能,不用每个函数都写一大堆的代码。
fun = 'round';
x1 = pi;
y = feval(fun,x1)
y = 3
Round the value of pi to two digits to the right of the decimal point.
x2 = 2;
y = feval(fun,x1,x2)
y = 3.1400
- setappdata和getappdata函数,他们两者是成对使用,大致的作用就是把函数体里面的变量存入系统,当调用的时候再从系统里面调出来,省去了把所有参数设置成全局变量的麻烦。如果全局变量满天飞,那么代码很不好管理。
Create a figure window. Then, get the current time using the date function.
f = figure;
val = date
val =
23-Dec-2014
Store the contents of val using the setappdata function. In this case, val is stored in the figure object using the name identifier, 'todaysdate'.
setappdata(f,'todaysdate',val);
Retrieve the data and display it.
getappdata(f,'todaysdate')
ans = Dec-2014
- isa函数,他主要是判断数据类型,放在函数体里面判断输入的参数是否合法,可以增加健壮性。
A = 3.1416;
tf = isa(A,'double')
tf = logical
1
'single' 单精度数
'double' 双精度数
'int8' 有符号 8 位整数
'int16' 有符号 16 位整数
'int32' 有符号 32 位整数
'int64' 有符号 64 位整数
'uint8' 无符号 8 位整数
'uint16' 无符号 16 位整数
'uint32' 无符号 32 位整数
'uint64' 无符号 64 位整数
'logical' 逻辑值 1 (true) 或 0 (false)
'char' 字符
'string' 字符串数组
'struct' 结构体数组
'cell' 元胞数组
'table' 表
'function_handle' 函数句柄
- cla清除坐标区,若指定了句柄,则只对那个句柄的坐标区起作用。clf清除图窗里面的变量。
clf deletes all children of the current figure with visible handles
cla deletes all children of the current axes with visible handles and resets the current axes ColorOrder and LineStyleOrder
- gca和gcf分别是获取当前的坐标区和图窗的句柄,只要得到了句柄,那么剩下的动作该怎么做都可以了。相当于拿到了房间的钥匙。
- mlock和munlock是锁定变量和解锁变量,这样可以在执行clear命令的时候免遭伤害。就像提前吃解药,这样防毒只能杀死敌人,而自己不受影响。
- ancestor - 图形对象的父级,此 MATLAB 函数 返回 h 的最近父级的句柄。type 可以是:
p = ancestor(h,type)
p = ancestor(h,type,'toplevel')
- @函数 At. The at symbol is used to create a function_handle 他的作用是获取函数的句柄,方法就是把函数名称放在@的后面。
h=@sin
h =
@sin
>> h(pi/4)
ans =
0.7071
第二种用法:函数句柄 = @(输入参数列表)运算表达式。显然这也是函数句柄的一种形式,只是这个函数没有名称,但 是他有详细的函数体定义。得到的也是函数的句柄。之后可以执行句柄就是执行这个函数本身一样。原本这样定义并没有 什么实际意义,就像金属货币换成纸币一样,方便里流通和管理。
% In-line correction functions to dpt due to range violations
xminc = @(dpt) [range(1) - initial_extent(1) dpt(2)];
xmaxc = @(dpt) [range(2) - (initial_extent(1) + initial_extent(3)) dpt(2)];
yminc = @(dpt) [dpt(1) range(3) - initial_extent(2)];
ymaxc = @(dpt) [dpt(1) range(4) - (initial_extent(2) + initial_extent(4))];
- set和get,他们可以执行一堆的操作,至于执行什么功能,是由他的句柄决定定,如果句柄是一个坐标,那么传递坐标轴的信息,可以进行相关的操作,如果句柄是按键,那么可以设置按键的各种参数,不一而足。
- Linspace和meshgrid分别生成二维和三维的数据组。这在初始化的时候应该能够用的上。
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
y1 = linspace(-5,5,7)
y1 = 1×7
-5.0000 -3.3333 -1.6667 0 1.6667 3.3333 5.0000
- patch和surf可以用来绘制多边形,如果把多边形的大小无限小,那么类似于微积分的定义,可以绘制任意的图案,然后我们把每一个多边形填充不同的颜色,那么理论上可以绘制各种图案。
- guidata函数,可以存储APP信息,也可以获取APP信息;
-
guidata Store or retrieve application data.
guidata(H, DATA) stores the specified data in the figure's
application data.
H is a handle that identifies the figure - it can be the figure
itself, or any object contained in the figure.
DATA can be anything an application wishes to store for later
retrieval.
DATA = guidata(H) returns previously stored data, or an empty
matrix if nothing was previously stored.