exponenta event banner

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 в вычисленные нормали, а не возвращать значения.

Примеры

свернуть все

Сравните влияние различных нормалей поверхности на визуальный вид освещенных изоповерхностей. В одном случае треугольники, используемые для построения изоповерхности, определяют нормали. В другом случае функция изонормалий использует данные объема для вычисления нормалей вершин на основе градиента точек данных. Последний подход, как правило, создает более гладкую изоповерхность.

Определите 3-D массив данных тома.

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