MATLAB quiver函数使用:绘制矢量箭头

介绍

在科研出图中,经常需要在底图上绘制流速图、受力图、磁场方向图等,而MATLAB正好拥有一个对应的quiver函数可以使用。本文以冰流速制图为例介绍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’时,表示箭头显示为黄色。

注意1:quiver()对(x,y,u,v)的要求

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()生成矩阵索引时需要注意调整行数和列数的位置

注意2:quiver()绘制箭头时所在的坐标系

quiver()绘制箭头所在的坐标系是常见的笛卡尔坐标系,如下图所示,x轴向右为正,y轴向上为正,因此这解释了【注意1】中为何x表示列数,y表示行数。
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
链接

  • 16
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙子在流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值