利用流管显示散度
流管可以显示哪些信息
流管类似于流线,只不过流管具有宽度,为表示信息提供了另外一个维度。
默认情况下,MATLAB® 图形通过流管的宽度显示向量场的散度。您还可以为每个流管顶点定义宽度,从而将其他数据映射到宽度。
本示例使用以下方法:
利用流管指示
wind
数据集中向量场的流向和散度利用着色的切片平面指示叠加的风流的速度,并利用等高线提高可见性
输入项包括三维体坐标、向量场分量以及流管的起点位置。
1.加载数据并计算所需的值
加载数据并计算绘图所需的值。这些值包括:
切片平面的位置(最大
x
值、最小y
值和海拔值)流管起点的最小
x
值风速(向量场的模)
load wind xmin = min(x(:)); xmax = max(x(:)); ymin = min(y(:)); alt = 7.356; % z value for slice and streamtube plane wind_speed = sqrt(u.^2 + v.^2 + w.^2);
2.绘制切片平面
绘制切片平面 (slice
) 并设置 surface
属性以创建平滑着色的切片。使用 hsv
colormap
中的 16 种颜色。
hslice = slice(x,y,z,wind_speed,xmax,ymin,alt); set(hslice,'FaceColor','interp','EdgeColor','none') colormap hsv(16)
3.在切片平面上添加等高线
在切片平面上添加等高线 (contourslice
)。调整等高线间隔,使线条与切片平面上的颜色边界匹配:
调用
clim
以获取当前颜色范围。在 R2022a 之前: 使用
caxis
,它具有与clim
相同的语法和参量。将
contourslice
使用的插值方法设置为linear
,以便与slice
使用的默认值匹配。color_lim = clim; cont_intervals = linspace(color_lim(1),color_lim(2),17); hcont = contourslice(x,y,z,wind_speed,xmax,ymin,... alt,cont_intervals,'linear'); set(hcont,'EdgeColor',[.4 .4 .4],'LineWidth',1)
4.创建流管
使用 meshgrid
创建流管起点数组,起点从最小 x
值开始,在 y
方向上的范围为 20 到 50,并位于 z
方向上的单个平面中(对应于其中一个切片平面)。
流管 (streamtube
) 绘制在指定的位置,并放大为默认宽度的 1.25 倍,以突出散度(宽度)的变化。向量 [1.25 30] 中的第二个元素指定流管周长上的点数(默认值为 20)。随着流管大小的增加,您可能需要增加此值的大小,以保持光滑的流管外观。
在调用 streamtube
之前设置数据纵横比 (daspect
)。
流管是曲面对象,因此您可以通过设置曲面属性来控制其外观。本示例通过设置曲面属性获得明亮的红色曲面。
[sx,sy,sz] = meshgrid(xmin,20:3:50,alt);
daspect([1,1,1]) % set DAR before calling streamtube
htubes = streamtube(x,y,z,u,v,w,sx,sy,sz,[1.25 30]);
set(htubes,'EdgeColor','none','FaceColor','r',...
'AmbientStrength',.5)
5.定义视图
定义视图并添加光照(view
、axis
volumebounds
、Projection
、camlight
)。
view(-100,30) axis(volumebounds(x,y,z,wind_speed)) set(gca,'Projection','perspective') camlight left