изонормали

Вычислите нормали вершин изоповерхности

Синтаксис

n = изонормали (X, Y, Z, V, вершины)
n = изонормали (V, вершины)
n = изонормали (V, p)
n = изонормали (X, Y, Z, V, p)
n = изонормали (..., 'инвертируйте'),
изонормали (V, p)
изонормали (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 к вычисленным нормалям вместо того, чтобы возвратить значения.

Примеры

свернуть все

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

Задайте трехмерный массив данных объема.

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');

Чертите изоповерхность от данных объема и добавьте световые сигналы. Эта изоповерхность использует треугольные нормали.

figure
subplot(1,2,1)
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')

Чертите ту же освещенную изоповерхность с помощью нормалей, вычисленных от данных объема.

subplot(1,2,2)
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')

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

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

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

Была ли эта тема полезной?