使用等值顶为可视化绘图添加环境
什么是等值顶?
等值顶是切合等值面范围的平面,为等值面提供视觉环境。等值顶显示等值面内部的横截面视图,它为等值面提供一个端顶。
下面两张图说明了等值顶的用法。第一张图是没有等值顶的等值面。
第二张图显示了为同一个等值面添加等值顶后的效果。
等值顶的其他应用
以下示例显示了等值顶的其他一些应用:
定义等值顶
等值顶与等值面一样,都是以 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.创建等值面并设置属性
使用 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