Main Content

使用等值顶为可视化绘图添加环境

什么是等值顶?

等值顶是切合等值面范围的平面,为等值面提供视觉环境。等值顶显示等值面内部的横截面视图,它为等值面提供一个端顶

下面两张图说明了等值顶的用法。第一张图是没有等值顶的等值面。

第二张图显示了为同一个等值面添加等值顶后的效果。

等值顶的其他应用

以下示例显示了等值顶的其他一些应用:

定义等值顶

等值顶与等值面一样,都是以 patch 图形对象的形式创建的。可以使用 isocaps 命令生成要传递给 patch 的数据。例如:

patch(isocaps(voldata,isoval),...
   'FaceColor','interp',...
...'EdgeColor','none')

在值 isoval 处为标量三维体数据 voldata 创建等值顶。您应该使用相同的三维体数据和等值来创建等值面,以确保等值顶的边切合等值面。

如果将补片的 FaceColor 属性设置为 interp,则着色方案会将等值顶经过的数据值映射到颜色图条目。您还可以设置其他补片属性来控制等值顶上的光照和着色效果。

为等值面添加等值顶

此示例说明如何在使用等值顶时设置着色和光照特性。有五个基本步骤:

1.准备数据

此示例使用随机 (rand) 数据的三维数组来定义三维体数据。然后对数据进行平滑处理 (smooth3)。

data = rand(12,12,12);
data = smooth3(data,'box',5);

2.创建等值面并设置属性

使用 isosurfacepatch 创建等值面并设置着色和光照属性。减少反射光的 AmbientStrengthSpecularStrengthDiffuseStrength,以补偿为了提供更均匀的光照而使用的两个光源的亮度。

重新计算等值面的顶点法线,以产生更平滑的光照 (isonormals)。

isoval = .5;
h = patch(isosurface(data,isoval),...
   'FaceColor','blue',...
   'EdgeColor','none',...
   'AmbientStrength',.2,...
   'SpecularStrength',.7,...
   'DiffuseStrength',.4);
isonormals(data,h)

3.创建等值顶并设置属性

使用与等值面相同的数据和等值定义 isocaps。指定插补着色并选择合适的颜色图,从而为蓝色等值面提供较默认颜色图 (colormap) 更好的对比色。

patch(isocaps(data,isoval),...
   'FaceColor','interp',...
   'EdgeColor','none')
colormap hsv

4.定义视图

将数据纵横比设置为 [1,1,1],以便按正确的比例显示 (daspect)。消除坐标区内的空白并将视图设置为三维(axis tightview)。

daspect([1,1,1])
axis tight
view(3)

5.添加光照

为了添加非常均匀的光照,同时又能利用光源在形状上制造可见的细微变化的能力,本示例使用了两个光源,分别位于相机的左右两侧 (camlight)。使用 Gouraud 光照产生最平滑的颜色变化 (lighting)。

camlight right
camlight left