Затененная поверхность с подсветкой — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Затененная поверхность с подсветкой

2017-11-17 340
Затененная поверхность с подсветкой 0.00 из 5.00 0 оценок
Заказать работу

MATLAB имеет команды, которые дают возможность управлять подсветкой построенной поверхности. Это реализуется командой: surfl(X, Y, Z, s)

Команда surfl(X, Y, Z, s) выводит на экран затененную поверхность с подсветкой для значений массива Z, определенных на множестве значений массивов X и Y. Направление на источник света может быть задано с помощью вектора s = [ Sx, Sy, Sz ] в декартовых координатах или вектора s = [ az, elev ] в сферических координатах. По умолчанию азимут az = -37.5°, возвышение elev = 30°. Подсветка учитывает модели рассеяния, отражения и зеркального эффекта освещения поверхности.

Команда surfl(X,Y, Z, s, k) позволяет управлять параметрами рассеяния, отражения и зеркального эффекта, используя вектор

k = [ka, kd, ks, spread], который учитывает эффекты отраженного света ka, диффузного отражения kd, зеркального отражения ks и зеркального распространения spread. По умолчанию вектор k имеет значения [0.55, 0.6, 0.4,10].

Команда surfl(X, Y, Z) использует значения параметров по умолчанию.

Команды surfl(Z,...) строят графики, не учитывая истинных значений массивов X и Y.

Из-за того что алгоритм surfl вычисляет нормали к поверхности, необходимо, чтобы входные матрицы имели размер по крайней мере 3 х 3.

Пример 5.14. Построить поверхность стандартной функции peaks на квадрате [-3,3]*[-3,3], используя подсветку.

>> [X,Y]=meshgrid(-3:1,8:3);
>> Z = peaks(X, Y);
>> surfl(X, Y, Z)
>> shading interp
>> colormap(gray)

Рис.12. Поверхность с параметрами

подсветки по умолчанию

 

Трехмерная поверхность

Если не требуется при построении поверхности функции z=f(x,y) отображать рёбра, соединяющие значения функции в узлах, а, обозначив её параллельными линиями, соответствующими сечением, нужно использовать команды:

waterfall(X, Y, Z, C)

Команда waterfall(X, Y, Z, C) строит поверхность для значений массива Z, определенных на множестве значений массивов X и Y. Она аналогична команде mesh, но не прорисовывает ребер сетки.

Команда waterfall(x, y, Z, C) выполняет ту же функцию, но вместо двумерных массивов X, Y использует их одномерные проекции, так что если length(x) = n, а length(y) = m, то [ m, n ] = size(Z).

Команда waterfall(Z, C) использует сетку, которая определяется одномерными массивами x = 1: n и y = 1: m.

Команды waterfall(X, Y, Z), mesh(x, y, Z), mesh(Z) используют в качестве массива цвета C = Z, то есть цвет в этом случае пропорционален высоте поверхности. Функция h = waterfall(...) возвращает вектор дескрипторов h для графических объектов patch.

 

Пример 5.15.

Построить трехмерную поверхность функции в квадрате [-2,2] x [-2,2].

>> [X,Y]=meshgrid(-2:0.1:2]);
>> Z = X.*exp(- X.^2 - Y.^2);
>> waterfall(X, Y, Z)

Рис.13. Поверхность функции из примера 5.15

 

Поле градиентов функции

Пусть функция z=f(x,y) задана в прямоугольной области [a,b] x [c,d]. Рассмотрим разбиение области на узлы . Если в каждом узле вычислить градиент , получим для каждой пары (i,j) вектор . Тогда градиентное поле можно построить, используя команду:

quiver(X, Y, DX,DY)

Команда quiver(X, Y, DX, DY) формирует и выводит на экран поле градиентов функции в виде стрелок для каждой пары элементов массивов X и Y, а пары элементов DX и DY используются для указания направления и размера стрелки.

Команда quiver(x, y, DX, DY), где x и y - одномерные массивы размеров length(x) = n и length(y) = m, где [m, n] = size(DX) = size(DY), формирует и выводит на экран поле градиентов для каждой точки; стрелки задаются четверками {x(j), y(i), DX(i, j), DY(i, j)}. Обратите внимание, что x соответствует столбцам DX и DY, а y - строкам.

Команда quiver(DX, DY) использует массивы x =1:n и y =1:m.

Команды quiver(x, y, dx, dy, s), quiver(dx, dy, s) используют скаляр s как коэффициент масштаба стрелки, например s = 2 вдвое увеличивает, а s = 0.5 вдвое уменьшает размер стрелки.

Команда в форме quiver(... ‘<тип_линии>’) позволяет задать тип и цвет линии по аналогии с функцией PLOT.

 

Пример 5.16. Построить поле направлений и линии уровня для функции в области ,

>> [x, y] = meshgrid(-2:.2: 2); % сетка
>> z = x.*exp(-x.^2 - y.^2); % значения функции
>> [dx, dy] = gradient(z,.2,.2); % градиент в узлах
>> contour(x, y, z), hold on % линии уровня
>> quiver(x, y, dx, dy) % поле градиентов

Рис.14. Результат примера 5.16

 

Пример 5.17. Рассмотрим тело, брошенное под заданным углом к горизонту. Требуется построить векторы скорости в узлах траектории. Координаты тела определяются по следующим формулам:

x=t/2, y=0.8t(1-t/2).

 

 

>> t = 0:0.2:2; x = 0.5*t; y = 0.8*t.*(1 - 0.5*t); % Траектория

>> ux(1:length(x)) = 0.5; uy = 0.8*(1 - t);

% Вектор скорости в узлах

>> quiver(x, y, ux, uy) % Векторное поле

 

 

 

Рис.15. Векторы скоростей в узлах (пример 5.17).

 

 

 


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.