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) вычисляет нормали изоповерхностей из списка вершин, vertices, используя градиент данных V. Массивы X, Y, и Z определить координаты для объема V. Вычисленные нормали возвращаются в n.

n = isonormals(V,vertices) принимает массивы X, Y, и Z определяются как [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) установите VertexNormals свойство закрашенной фигуры, идентифицированного указателем p к вычисленным нормалям вместо возврата значений.

Примеры

свернуть все

Сравните эффект различных поверхностных нормалей на визуальный внешний вид освещенных изоповерхности. В одном случае треугольники, используемые для рисования изоповерхности, определяют нормали. В другом случае функция 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. The axes 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. Axes 1 with title Triangle Normals contains an object of type patch. Axes 2 with title Data Normals contains an object of type patch.

Эти изоповерхности иллюстрируют различие между треугольником и нормалями данных.

Расширенные возможности

Представлено до R2006a