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. Массивы XY, и Z задайте координаты для объема V. Вычисленные нормали возвращены в n.

n = isonormals(V,vertices) принимает массивы XY, и 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');

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

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