Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

isonormals

计算等值面顶点的法向量

语法

n = isonormals(X,Y,Z,V,vertices)
n = isonormals(V,vertices)
n = isonormals(V,p)
n = isonormals(X,Y,Z,V,p)
n = isonormals(...,'negate')
isonormals(V,p)
isonormals(X,Y,Z,V,p)

说明

n = isonormals(X,Y,Z,V,vertices) 使用数据 V 的梯度计算顶点列表 vertices 中等值面顶点的法向量。数组 XYZ 定义三维体 V 的坐标。计算的法向量在 n 中返回。

n = isonormals(V,vertices) 假定数组 XYZ 定义为 [X,Y,Z] = meshgrid(1:n,1:m,1:p),其中 [m,n,p] = size(V)

n = isonormals(V,p)n = isonormals(X,Y,Z,V,p) 基于句柄 p 确定的补片的顶点计算法向量。

n = isonormals(...,'negate') 对法向量求反(反转法向量方向)。

isonormals(V,p)isonormals(X,Y,Z,V,p) 将句柄 p 确定的补片的 VertexNormals 属性设置为已计算的法向量,而不是返回值。

示例

全部折叠

比较不同曲面法向量在光照等值面的视觉外观上的效果。在一种情况下,由用于绘制等值面的三角形定义法向量。在另一情况下,isonormals 函数使用体数据基于数据点的梯度计算顶点法向量。后一种方法通常会生成外观更平滑的等值面。

定义体数据的三维数组。

data = cat(3,[0 .2 0; 0 .3 0; 0 0 0],...
    [.1 .2 0; 0 1 0; .2 .7 0],...
    [0 .4 .2; .2 .4 0;.1 .1 0]);
data = interp3(data,3,'cubic');

基于体数据绘制等值面并添加光源。此等值面使用三角形法向量。

tiledlayout(1,2)
nexttile
fv = isosurface(data,.5);
p1 = patch(fv,'FaceColor','red','EdgeColor','none');
view(3)
daspect([1,1,1])
axis tight
camlight
camlight(-80,-10)
lighting gouraud
title('Triangle Normals')

Figure contains an axes object. The axes object with title Triangle Normals contains an object of type patch.

使用基于体数据计算的法向量绘制相同的光照等值面。

nexttile
fv = isosurface(data,.5);
p2 = patch(fv,'FaceColor','red','EdgeColor','none');
isonormals(data,p2)
view(3) 
daspect([1 1 1])
axis tight
camlight 
camlight(-80,-10) 
lighting gouraud
title('Data Normals')

Figure contains 2 axes objects. Axes object 1 with title Triangle Normals contains an object of type patch. Axes object 2 with title Data Normals contains an object of type patch.

这些等值面展示三角形与数据法向量之间的差异。

扩展功能

版本历史记录

在 R2006a 之前推出