Main Content

利用流管显示散度

流管可以显示哪些信息

流管类似于流线,只不过流管具有宽度,为表示信息提供了另外一个维度。

默认情况下,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.定义视图

定义视图并添加光照(viewaxis volumeboundsProjectioncamlight)。

view(-100,30)
axis(volumebounds(x,y,z,wind_speed))
set(gca,'Projection','perspective')
camlight left