isosurface

Извлеките изоповерхности из объемных данных

Синтаксис

fv = isosurface(X,Y,Z,V,isovalue)
fv = isosurface(V,isovalue)
fvc = isosurface(...,colors)
fv = isosurface(...,'noshare')
fv = isosurface(...,'verbose')
[f,v] = isosurface(...)
[f,v,c] = isosurface(...)
isosurface(...)

Описание

fv = isosurface(X,Y,Z,V,isovalue) вычисляет изоповерхность данные из объемных данных V по изоповерхность значению, указанному в isovalue. То есть изоповерхность соединяет точки, которые имеют заданное значение, в значительной степени так, как контурные линии соединяют точки равного повышения.

Массивы X, Y, и Z представляет Декартову, выровненную по оси сетку. V содержит соответствующие значения в этих точках сетки. Массивы координат (X, Y, и Z) должна быть монотонной и соответствовать формату, произведенному meshgrid. V должен быть 3D объемным массивом того же размера, что и X, Y, и Z.

struct fv содержит грани и вершины изоповерхности, которые можно передать непосредственно в patch команда.

fv = isosurface(V,isovalue) принимает массивы X, Y, и Z определяются как [X,Y,Z] = meshgrid(1:n,1:m,1:p) где [m,n,p] = size(V).

fvc = isosurface(...,colors) интерполирует массив colors в скалярное поле и возвращает интерполированные значения в facevertexcdata поле fvc структура. Размер colors массив должен быть таким же, как и V. The colors Аргумент позволяет вам управлять отображением цвета изоповерхности с данными, отличными от данных, используемых для вычисления изоповерхности (например, данные о температуре, наложенные на изоповерхность ветряного тока).

fv = isosurface(...,'noshare') не создает общие вершины. Это быстрее, но создает больший набор вершин.

fv = isosurface(...,'verbose') печатает сообщения о ходе выполнения в командное окно по мере выполнения расчетов.

[f,v] = isosurface(...) или [f,v,c] = isosurface(...) возвращает грани и вершины (и faceVertexcCData) в отдельных массивах вместо struct.

isosurface(...) без выходных аргументов создает закрашенную фигуру в текущей системе координат с вычисленными гранями и вершинами. Если текущих систем координат не существует, создается новая ось с 3-D видом.

Поведение в особых случаях - изоповерхность, вызываемая без выходных аргументов

Если нет текущей системы координат, и вы вызываете isosurface не присваивая выходных аргументов, MATLAB® создает новые оси, устанавливает ее на 3-D вид и добавляет подсветку в график изозерфей.

Примеры

Нарисуйте изоповерхность с подсветкой

Загрузите набор данных о потоке, который представляет профиль скорости погруженной струи в бесконечном баке. Нарисуйте изоповерхность при значении данных -3 и подготовить изоповерхность для подсветки при помощи:

  • Пересчет нормалей изоповерхности на основе объемных данных.

  • Установка цвета грани и ребра.

  • Определение вида.

  • Добавление огней.

[x,y,z,v] = flow;
p = patch(isosurface(x,y,z,v,-3));
isonormals(x,y,z,v,p)
p.FaceColor = 'red';
p.EdgeColor = 'none';
daspect([1 1 1])
view(3); 
axis tight
camlight 
lighting gouraud

Figure contains an axes. The axes contains an object of type patch.

Установите цвета Isourface

Визуализируйте данные о потоке, но цвет-кодируйте поверхность, чтобы указать величину вдоль оси X. Используйте шестой аргумент, чтобы isosurface, что обеспечивает средство для наложения другого набора данных путем окрашивания полученной изоповерхности. The colors переменная является вектором, содержащим скалярное значение для каждой вершины изоповерхности, которое должно быть отображено с текущей цветовой картой. В этом случае это одна из переменных, которые определяют поверхность, но она может быть полностью независимой. Можно применить другую цветовую схему путем изменения текущей цветовой карты фигуры.

[x,y,z,v] = flow; 
[faces,verts,colors] = isosurface(x,y,z,v,-3,x); 
patch('Vertices',verts,'Faces',faces,'FaceVertexCData',colors,...
    'FaceColor','interp','EdgeColor','interp')
view(30,-15)
axis vis3d
colormap copper

Figure contains an axes. The axes contains an object of type patch.

Совет

Вы можете пройти fv структура, созданная isosurface непосредственно к patch команда, но вы не можете передать отдельные грани и массивы вершин (f, v) к patch без указания имен свойства. Для примера,

patch(isosurface(X,Y,Z,V,isovalue))

или

[f,v] = isosurface(X,Y,Z,V,isovalue);
patch('Faces',f,'Vertices',v)

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

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