Main Content

利用切片平面探索三维体

切片液体流数据

切片平面(不一定是平面)是基于切片所在区域中的三维体数据的值进行着色的曲面。切片平面可用于探测三维体数据集,以找到感兴趣的区域位置,然后可以利用其他类型的图对这些区域进行可视化(请参阅 slice 示例)。当同时使用其他绘图方法时,切片平面还可用于在三维体范围内添加视觉环境(有关示例,请参阅 coneplot使用向量数据显示流线图)。

可使用 slice 函数创建切片平面。本示例对 flow 生成的三维体进行切片。

1.调查数据

使用以下命令生成三维体数据:

[x,y,z,v] = flow;

通过查找坐标数据的最小值和最大值,确定三维体的范围。

xmin = min(x(:)); 
ymin = min(y(:)); 
zmin = min(z(:));

xmax = max(x(:)); 
ymax = max(y(:)); 
zmax = max(z(:));

2.创建与 X 轴呈一定角度的切片平面

要创建与某个坐标区平面呈一定角度的切片平面,请先定义一个曲面,然后将其旋转到所需角度。本示例使用与三维体具有相同 xy 坐标范围的曲面。

hslice = surf(linspace(xmin,xmax,100),...
   linspace(ymin,ymax,100),...
   zeros(100));

将曲面绕 x 轴旋转 -45 度,保存曲面 XDataYDataZData 以定义切片平面,然后删除曲面。

rotate(hslice,[-1,0,0],-45)
xd = get(hslice,'XData');
yd = get(hslice,'YData');
zd = get(hslice,'ZData');

delete(hslice)

3.绘制切片平面

绘制旋转后的切片平面,将 FaceColor 设置为 interp 以便使用图窗颜色图进行着色,并将 EdgeColor 设置为 none。添加光源后,将 DiffuseStrength 增加到 .8 以使平面更亮。

colormap(turbo)
h = slice(x,y,z,v,xd,yd,zd);
h.FaceColor = 'interp';
h.EdgeColor = 'none';
h.DiffuseStrength = 0.8;

hold 设置为 on,并在 xmaxymaxzmin 处再添加三个正交切片平面,形成第一个平面(按一定角度对三维体进行切片所得)的环境。

hold on
hx = slice(x,y,z,v,xmax,[],[]);
hx.FaceColor = 'interp';
hx.EdgeColor = 'none';

hy = slice(x,y,z,v,[],ymax,[]);
hy.FaceColor = 'interp';
hy.EdgeColor = 'none';

hz = slice(x,y,z,v,[],[],zmin);
hz.FaceColor = 'interp';
hz.EdgeColor = 'none';

4.定义视图

要按正确的比例显示三维体,请将数据纵横比设置为 [1,1,1] (daspect)。调整坐标轴,使之紧密切合三维体的轮廓 (axis)。坐标区的角度可以先行使用 rotate3d 进行选择,以确定最佳视图 (view)。

放大场景以获取更大的三维体视图 (camzoom)。相比默认的正交投影,选择 perspective 投影类型可使长方体的比例更自然 (camproj)。

daspect([1,1,1])
axis tight
view(-38.5,16)
camzoom(1.4)
camproj perspective

5.添加光照并指定颜色

在场景中添加光源可使四个切片平面之间的边界更清晰,因为每个平面与光源之间形成不同的角度 (lightangle)。选择只有 24 种颜色的颜色图(默认值为 64)可以产生明显的渐变,从而有助于表现三维体内的变化。

lightangle(-45,45)
colormap(turbo(24))

修改颜色映射介绍了如何修改数据与颜色之间的映射。

修改颜色映射

当前颜色图决定切片平面的颜色。这使您能够通过以下方式更改切片平面的着色:

  • 更改颜色图

  • 更改数据值与颜色之间的映射

例如,假设您只对 -5 到 2.5 之间的数据值感兴趣,并且希望所用的颜色图将低值映射到红色、将高值映射到蓝色(即与默认的 turbo 颜色图相反)。

1.自定义颜色图

使用 colormapflipud 翻转颜色图:

colormap(flipud(turbo(24)))

2.调整颜色范围

调整颜色范围以突出感兴趣的特定数据范围。将颜色范围调整到 -5 到 2.4832,以便将所有小于 -5 的值映射到同一种颜色(原来的数据范围是从 -11.5417 到 2.4832)。

clim([-5,2.4832])

在 R2022a 之前: 使用 caxis 调整颜色范围,它具有与 clim 相同的语法和参量。

3.添加颜色栏

添加颜色栏,以便为数据到颜色的映射提供对照标准。

colorbar('southoutside')