surfnorm

Нормали к поверхности

Описание

пример

surfnorm(X,Y,Z) создает трехмерную объемную поверхностную диаграмму и отображает ее нормали к поверхности. Нормаль к поверхности - это мнимая линия, перпендикулярная плоской поверхности или перпендикулярная касательной плоскости в точке на нефатиновой поверхности.

А графики функций значения в матрице Z как высоты над сеткой в плоскости x - y заданные X и Y. Цвет поверхности изменяется в зависимости от высот, заданных Z. Матрицы X, Y, и Z должен быть одинаковым размером.

surfnorm(Z) создает поверхность с нормалями и использует индексы столбцов и строк элементов в Z как x и y -координаты, соответственно.

surfnorm(ax,___) графики в осях заданные ax вместо текущей системы координат. Задайте оси в качестве первого входного параметра.

пример

surfnorm(___,Name,Value) задает свойства поверхности, используя один или несколько аргументы пары "имя-значение". Для примера, 'FaceAlpha',0.5 создает полупрозрачную поверхность.

пример

[Nx,Ny,Nz] = surfnorm(___) возвращает x, y и z компоненты трехмерных нормалей поверхности, ничего не строя.

Примеры

свернуть все

Создайте конус. Затем постройте график данных как поверхности и отобразите нормали поверхности. Поверхность использует Z для высоты и цвета.

[X,Y,Z] = cylinder(1:10);
surfnorm(X,Y,Z)

Figure contains an axes. The axes contains 2 objects of type surface, line.

Создайте поверхность без ребер путем определения EdgeColor Пара "имя-значение" с 'none' как значение.

[X,Y,Z] = cylinder(1:10);
surfnorm(X,Y,Z,'EdgeColor','none')

Figure contains an axes. The axes contains 2 objects of type surface, line.

Используйте нормали поверхности кривой поверхности, чтобы осветить плоскую поверхность.

Сначала отобразите плоскую поверхность.

surf(ones(49),'EdgeColor','none');

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

Отобразите изогнутую поверхность, которая будет использоваться в качестве источника подсветки.

surf(peaks);

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

Теперь снова нарисуйте плоскую поверхность, на этот раз с подсветкой от изогнутой поверхности. Для этого сначала вычислите нормали поверхности изогнутой поверхности.

[nx, ny, nz] = surfnorm(peaks);

Объедините x, y, и поверхность z нормальные компоненты в единственный массив 49 на 49 на 3.

b = reshape([nx ny nz], 49,49,3);

Снова создайте плоскую поверхность, на этот раз предоставив этот массив как значение для VertexNormals свойство. MATLAB ® использует VertexNormals свойство для вычисления подсветки поверхности. Установите алгоритм подсветки равным gouraud и добавить свет используя camlight.

surf(ones(49),'VertexNormals',b,'EdgeColor','none');
lighting gouraud
camlight

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

Входные параметры

свернуть все

x -cordinates, заданная в виде матрицы того же размера, что и Y и Z.

Вы можете использовать meshgrid функция для создания X и Y матрицы.

The XData свойство Surface объект сохраняет x -cordinates.

Пример: X = [1 2 3; 1 2 3; 1 2 3]

Пример: [X,Y] = meshgrid(-5:0.5:5)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

y -cordinates, заданная в виде матрицы того же размера, что и X и Z.

Вы можете использовать meshgrid функция для создания X и Y матрицы.

The YData свойство объекта surface сохраняет y -cordinates .

Пример: Y = [1 1 1; 2 2 2; 3 3 3]

Пример: [X,Y] = meshgrid(-5:0.5:5)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z -координаты, заданные как матрица. Z должно иметь не менее трех строк и трех столбцов. Z также устанавливает цвета поверхности.

The ZData свойство объекта surface сохраняет z -cordinates .

Пример: Z = [1 2 3; 4 5 6; 7 8 9]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Графическое изображение осей, заданное как axes объект. Если вы не задаете оси, то surfnorm графики в текущей системе координат.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: surfnorm(X,Y,Z,'FaceAlpha',0.5,'EdgeColor','none') создает полупрозрачную поверхность без нарисованных ребер.

Примечание

Перечисленные здесь свойства являются только подмножеством. Полный список см. в разделе Свойств поверхности».

Цвет ребра, заданный как одно из значений, перечисленных здесь. Цвет по умолчанию [0 0 0] соответствует чёрным ребрам.

ЗначениеОписание
'none'Не рисуйте ребер.
'flat'

Используйте другой цвет для каждого ребра на основе значений в CData свойство. Сначала необходимо задать CData свойство как матрица того же размера, что и ZData. Значение цвета в первой вершине каждой грани (в положительном x и y направлениях) определяет цвет для смежных ребер. Вы не можете использовать это значение, когда EdgeAlpha для свойства задано значение 'interp'.

'interp'

Используйте интерполированную раскраску для каждого ребра на основе значений в CData свойство. Сначала необходимо задать CData свойство как матрица того же размера, что и ZData. Цвет изменяется между каждым ребром путем линейной интерполяции значений цвета в вершинах. Вы не можете использовать это значение, когда EdgeAlpha для свойства задано значение 'flat'.

Триплет RGB, шестнадцатеричный цветовой код или название цвета

Используйте указанный цвет для всех ребер. Эта опция не использует значения цветов в CData свойство.

Триплеты RGB и шестнадцатеричные цветовые коды полезны для определения пользовательских цветов.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должна быть в области значений [0,1]; например, [0.4 0.6 0.7].

  • Шестнадцатеричный код цвета - это вектор символов или строковый скаляр, который начинается с хэш-символа (#), за которым следуют три или шесть шестнадцатеричных цифр, которые могут варьироваться от 0 на F. Значения не зависят от регистра. Таким образом, цветовые коды '#FF8800', '#ff8800', '#F80', и '#f80' являются эквивалентными.

Кроме того, вы можете задать имена некоторых простых цветов. В этой таблице перечислены именованные опции цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое имяТриплет RGBШестнадцатеричный цветовой кодВнешность
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

Вот триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию MATLAB® использует на многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешность
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Стиль линии, заданный как одно из опций, перечисленных в этой таблице.

Стиль линииОписаниеРезультирующая линия
'-'Сплошная линия

'--'Штриховая линия

':'Пунктирная линия

'-.'Штрих-пунктирная линия

'none'Нет линииНет линии

Цвет грани, заданный как одно из значений в этой таблице.

ЗначениеОписание
'flat'

Используйте другой цвет для каждой грани на основе значений в CData свойство. Сначала необходимо задать CData свойство как матрица того же размера, что и ZData. Значение цвета в первой вершине каждой грани (в положительном x и y направлениях) определяет цвет для всей грани. Вы не можете использовать это значение, когда FaceAlpha для свойства задано значение 'interp'.

'interp'

Используйте интерполированную раскраску для каждой грани на основе значений в CData свойство. Сначала необходимо задать CData свойство как матрица того же размера, что и ZData. Цвет изменяется по каждой грани путем интерполяции значений цвета в вершинах. Вы не можете использовать это значение, когда FaceAlpha для свойства задано значение 'flat'.

Триплет RGB, шестнадцатеричный цветовой код или название цвета

Используйте указанный цвет для всех граней. Эта опция не использует значения цветов в CData свойство.

'texturemap'Преобразуйте данные о цвете в CData так, чтобы он соответствовал поверхности.
'none'Не рисуйте грани.

Триплеты RGB и шестнадцатеричные цветовые коды полезны для определения пользовательских цветов.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должна быть в области значений [0,1]; например, [0.4 0.6 0.7].

  • Шестнадцатеричный код цвета - это вектор символов или строковый скаляр, который начинается с хэш-символа (#), за которым следуют три или шесть шестнадцатеричных цифр, которые могут варьироваться от 0 на F. Значения не зависят от регистра. Таким образом, цветовые коды '#FF8800', '#ff8800', '#F80', и '#f80' являются эквивалентными.

Кроме того, вы можете задать имена некоторых простых цветов. В этой таблице перечислены именованные опции цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое имяТриплет RGBШестнадцатеричный цветовой кодВнешность
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

Вот триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию, которые MATLAB использует во многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешность
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Прозрачность лица, заданная в качестве одного из следующих значений:

  • Скаляр в области значений [0,1] - Используйте равномерную прозрачность по всем граням. Значение 1 полностью непрозрачен и 0 полностью прозрачен. Значения между 0 и 1 являются полупрозрачными. Эта опция не использует значения прозрачности в AlphaData свойство.

  • 'flat' - Используйте разную прозрачность для каждой грани на основе значений в AlphaData свойство. Значение прозрачности в первой вершине определяет прозрачность для всей грани. Сначала необходимо задать AlphaData свойство как матрица того же размера, что и ZData свойство. The FaceColor свойство также должно быть установлено в 'flat'.

  • 'interp' - Используйте интерполированную прозрачность для каждой грани на основе значений в AlphaData свойство. Прозрачность изменяется между каждой гранью путем интерполяции значений в вершинах. Сначала необходимо задать AlphaData свойство как матрица того же размера, что и ZData свойство. The FaceColor свойство также должно быть установлено в 'interp'.

  • 'texturemap' - Преобразуйте данные в AlphaData так, чтобы он соответствовал поверхности.

Эффект световых объектов на гранях, заданный как одно из следующих значений:

  • 'flat' - Нанесите свет равномерно на каждую грань. Используйте это значение для просмотра граненых объектов.

  • 'gouraud' - Варьируйте свет по граням. Вычислите свет в вершинах и затем линейно интерполируйте свет через грани. Используйте это значение для просмотра изогнутых поверхностей.

  • 'none' - Не наносить на грани свет от световых объектов.

Чтобы добавить светлый объект к осям, используйте light функция.

Примечание

The 'phong' значение удалено. Использование 'gouraud' вместо этого.

Выходные аргументы

свернуть все

Surface normal x -компонент, возвращенный как матрица. Для получения дополнительной информации о том, как вычисляются нормали поверхности, см. «Алгоритмы».

Surface normal y -компонент, возвращенный как матрица. Для получения дополнительной информации о том, как вычисляются нормали поверхности, см. «Алгоритмы».

Surface normal z -компонент, возвращенный как матрица. Для получения дополнительной информации о том, как вычисляются нормали поверхности, см. «Алгоритмы».

Совет

  • Чтобы изменить направление нормалей, вызовите surfnorm с транспонированными аргументами:

    surfnorm(X',Y',Z')
    

  • Чтобы показать направление нормалей на поверхности, используйте surfnorm функция для вычисления нормалей поверхности, а затем quiver3 функция для их отображения.

    [Nx,Ny,Nz] = surfnorm(X,Y,Z); 
    quiver3(X,Y,Z,Nx,Ny,Nz) 
    

  • Нормали поверхности представляют условия в вершинах и не нормированы. Нормали для элементов поверхности, которые обращены от средства просмотра, не видны.

Алгоритмы

surfnorm использует бикубическую интерполяцию в x, y и z направлениях, чтобы вычислить нормали поверхности данных. Чтобы разрешить интерполяцию в контурах, функция использует квадратичную экстраполяцию, чтобы расширить данные. После выполнения бикубической подгонки данных диагональные векторы вычисляются и пересекаются, чтобы сформировать нормаль в каждой вершине.

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