1.使用等值面连接相等的值
1.1液体流数据中的等值面
可以使用 isosurface 和 patch 命令创建等值面。
本示例在 flow 生成的三维体内创建等值面。使用以下命令生成三维体数据:
[x,y,z,v] = flow;
要选择等值,请确定三维体数据中值的范围。
min(v(:)) ans = -11.5417 max(v(:)) ans = 2.4832
通过研究,您可以选择能够揭示有用数据信息的等值。选择等值后,使用它们创建等值面:
-
使用 isosurface 生成可直接传递给 patch 的数据。
-
根据三维体数据的梯度重新计算曲面法线,以产生更好的光照特性 (isonormals)。
-
将补片的
FaceColor
设置为红色并将EdgeColor
设置为none
,以生成平滑、明亮的曲面。 -
调整视图并添加光照(daspect、view、camlight、lighting)。
hpatch = patch(isosurface(x,y,z,v,0)); isonormals(x,y,z,v,hpatch) hpatch.FaceColor = 'red'; hpatch.EdgeColor = 'none'; daspect([1,4,4]) view([-65,20]) axis tight camlight left; lighting gouraud
2.使用等值顶为可视化绘图添加环境
2.1什么是等值顶?
等值顶是切合等值面范围的平面,为等值面提供视觉环境。等值顶显示等值面内部的横截面视图,它为等值面提供一个端顶。
下面两张图说明了等值顶的用法。第一张图是没有等值顶的等值面。
第二张图显示了为同一个等值面添加等值顶后的效果。
2.2等值顶的其他应用
2.2.1定义等值顶
等值顶与等值面一样,都是以 patch 图形对象的形式创建的。可以使用 isocaps 命令生成要传递给 patch
的数据。例如:
patch(isocaps(voldata,isoval),...
'FaceColor','interp',...
...'EdgeColor','none')
在值 isoval
处为标量三维体数据 voldata
创建等值顶。您应该使用相同的三维体数据和等值来创建等值面,以确保等值顶的边切合等值面。
如果将补片的 FaceColor 属性设置为 interp
,则着色方案会将等值顶经过的数据值映射到颜色图条目。您还可以设置其他补片属性来控制等值顶上的光照和着色效果。
2.2.2为等值面添加等值顶
此示例说明如何在使用等值顶时设置着色和光照特性。有五个基本步骤:
1.准备数据
此示例使用随机 (rand) 数据的三维数组来定义三维体数据。然后对数据进行平滑处理 (smooth3)。
data = rand(12,12,12);
data = smooth3(data,'box',5);
2.创建等值面并设置属性
使用 isosurface 和 patch 创建等值面并设置着色和光照属性。减少反射光的 AmbientStrength、SpecularStrength 和 DiffuseStrength,以补偿为了提供更均匀的光照而使用的两个光源的亮度。
重新计算等值面的顶点法线,以产生更平滑的光照 (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 tight
、view)。
daspect([1,1,1])
axis tight
view(3)
5.添加光照
为了添加非常均匀的光照,同时又能利用光源在形状上制造可见的细微变化的能力,本示例使用了两个光源,分别位于相机的左右两侧 (camlight)。使用 Gouraud 光照产生最平滑的颜色变化 (lighting)。
camlight right
camlight left