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