surfnorm

Поверхностные нормали

Описание

пример

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

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

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

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

пример

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

пример

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

Примеры

свернуть все

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

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

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

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

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

Во-первых, отобразите плоскую поверхность.

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

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

surf(peaks);

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

[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

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

свернуть все

x-, заданные как матрица тот же размер как Y и Z.

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

XData свойство Surface объектно-ориентированная память x - координаты.

Пример: 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-, заданные как матрица тот же размер как X и Z.

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

YData свойство объекта подложки хранит y - координаты.

Пример: 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 также выбирает поверхностные цвета.

ZData свойство объекта подложки хранит z - координаты.

Пример: 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') создает полупрозрачную поверхность без чертивших ребер.

Примечание

Перечисленные здесь свойства являются только подмножеством. Для полного списка смотрите Surface Properties.

Цвет линии ребра, заданный как одно из значений, перечисленных здесь. Цвет по умолчанию [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 свойство. FaceColor свойство также должно быть установлено в 'flat'.

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

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

Эффект световых объектов на поверхностях, заданных как одно из этих значений:

  • 'flat' — Примените свет однородно через каждую поверхность. Используйте это значение, чтобы просмотреть фасетированные объекты.

  • 'gouraud' — Варьируйтесь свет через поверхности. Вычислите свет в вершинах и затем линейно интерполируйте свет через поверхности. Используйте это значение, чтобы просмотреть кривые поверхности.

  • 'none' — Не применяйте свет от световых объектов до поверхностей.

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

Примечание

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

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

свернуть все

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

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

Поверхностный нормальный 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, чтобы вычислить поверхностные нормали данных. Чтобы допускать интерполяцию на контурах, функция использует квадратичную экстраполяцию, чтобы расширить данные. После выполнения bicubic припадка данных диагональные векторы вычислены и пересечены, чтобы сформировать нормальное в каждой вершине.

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