在科研出图中,经常需要在底图上绘制流速图、受力图、磁场方向图等,而MATLAB正好拥有一个对应的quiver函数可以使用。本文以冰流速制图为例介绍quiver函数的使用和注意事项。
语法1:quiver(x,y,u,v)
这是quiver最常用的命令形式,表示在(x,y)位置上绘制向量(u,v)。(x,y)为箭头的起始坐标,(u,v)为箭头的方向矢量,sqrt(uu+vv)为物理量的大小,arctan(v/u)为物理量的方向。
语法2:quiver(x,y,u,v,scale)
数值scale是指箭头的放大缩小比例。在默认情况下,quiver命令会自动调整箭头的大小,以保证箭头之间不重叠。例如,scale为2时,表示箭头放大2倍,以此类推。
语法3:quiver(x,y,u,v,scale,‘LineSpec’)
'LineSpec’表示绘制箭头的颜色、线型、 标志样式。例如’LineSpec’为’y’时,表示箭头显示为黄色。
quiver()要求(x,y,u,v)为同型矩阵,即x,y,u,v的行列数要相等,假设均为m行n列。(x,y)可以使用meshgrid()生成,例如要生成3行4列的矩阵索引,可以如下代码举例
// An highlighted block
[x,y] = meshgrid(1:4,1:3);
%x =
% 1 2 3 4
% 1 2 3 4
% 1 2 3 4
%y =
% 1 1 1 1
% 2 2 2 2
% 3 3 3 3
可以看出,meshgird(1:n,1:m),第一个参数是列数,第二个参数是行数,结果中,x表示列数,y表示行数。这与MATLAB中的矩阵表示"先行后列"是相反的,因此在使用meshgrid()生成矩阵索引时需要注意调整行数和列数的位置。
quiver()绘制箭头所在的坐标系是常见的笛卡尔坐标系,如下图所示,x轴向右为正,y轴向上为正,因此这解释了【注意1】中为何x表示列数,y表示行数。
但是,考虑到矩阵格式的图像时,矩阵的左上角为(1,1),矩阵描述的坐标系是向右为正,向下为正。因此,(u,v)同样分别表示水平方向和垂直方向,注意v可能前面要加负号。
下图是用quiver(x,y,u,v)绘制的达尔克冰川流速图,这与冰流方向是不一致的。
用quiver(x,y,u,-v)绘制箭头时,箭头沿水平轴镜像反转,显示是符合实际情况的。
quiver()函数原本是用于笛卡尔坐标系中的,当用quiver()函数显示矩阵形式的矢量场时,需要考虑到矩阵索引大小和笛卡尔坐标之间的区别,做好(x,y)与(u,v)在含义和正负符号上的一致性,才能画出准确的矢量场图形。
链接:https://pan.baidu.com/s/1MPgeLzTnde7st3yHS7VnFA
提取码:4f5w
链接