Lab2_2014
.pdf
Розглянемо приклад сфери, яка розфарбована відповідно до матриці Адамара (Hadamard), що часто використовується в теорії кодування сигналів і яка складається тільки з двох чисел 1 та, - 1.
k = 5; n = 2 ^ k - 1; [X, Y, Z]=sphere(n); C = hadamard(2 ^ k); surf(X, Y, Z, C);
colormap([1 1 1; 2/3 2/3 2/3]) colorbar
Алгоритм:
У загальному вигляді, для задання поверхні можна використати два незалежні параметри i і j, які змінюються безперервно, наприклад в прямокутнику 1 <= i <= m, 1 <= j <= n; тоді поверхня визначатиметься трьома функціями x (i, j), y (i, j), z (i, j). Якщо i і j цілі числа, вони задають прямокутну сітку з цілочисельними значеннями для вузлів. Функції x (i, j), y (i, j), z (i, j) стають двовимірними масивами X, Y, Z розміру m х n. Четверта функція - колір комірок поверхні c (i, j) задає четверту матрицю C.
Кожна точка сітчастої поверхні має в загальному випадку чотирьох сусідів, як показано на наступній схемі.
Така прямокутна сітка приводить до розбиття поверхні на клітинки, які обмежені чотирма ребрами. Кожен внутрішній вузол поверхні має чотирьох сусідів, вузол на межі - трьох, вузол на куті поверхні - двох.
11
Колір такої сітчастої поверхні може бути заданий двома способами: або кольором однієї з вершин, або кольором в центрі клітинки.
Розглянемо, як в цьому випадку діє функціязафарбовування shading. Якщо задано значення shadinginterp, то колір клітинки визначається як білінійна функція поточних координат. Якщо задано значення shading faceted (прийнято за замовчуванням) або shadingflat, то колір клітинки сталий і визначається кольором верхньої лівої вершини, як показано на наступній схемі:
SURFL |
Затінена поверхня з підсвічуванням |
|
|
Синтаксис:
surfl(X, Y, Z, s) |
surfl(Z, s) |
surfl(X, Y, Z, s, k) |
surfl(Z, s, k) |
surfl(X, Y, Z) |
surfl(Z) |
Опис: |
|
Команда surfl (X, Y, Z, s) виводить на екран затінену поверхню з підсвічуванням для значень масиву Z, визначених на множині значень масивів X і Y. Напрям на джерело світла може бути заданий за допомогою вектору s =[Sx, Sy, Sz] у декартових координатах або вектору s = =[az, elev] у сферичних координатах. За замовчування азимут аz = - 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.
Приклади:
Побудуємо зображення функції peaks, використовуючи підсвічування.
[X, Y] = meshgrid(-3 : 1/8 : 3); Z = peaks(X, Y);
surfl(X, Y, Z) shading interp colormap(gray)
12
AXIS |
Масштабування осей і виведення на екран |
|
|
Синтаксис:
axis([xmin xmax ymin ymax]) axis([xmin xmax ymin ymax zmin zmax]) axis(‘auto’)
axis(axis) v = axis axis(‘ij’) axis(‘xy’)
axis(‘square’)
axis(‘equal’)
axis(‘off’)
axis(‘on’)
[s1, s2, s3] = axis(‘state’) axis(s1, s2, s3)
Опис:
Команда axis забезпечує спадкоємність попередніх версій системи MATLAB, орієнтованих на символьну обробку, з версіями 4.х, орієнтованими на графічний інтерфейс.
Команда axis ([xmin xmax ymin ymax]) встановлює масштаб по осях x, y для активного графічного вікна.
Команда axis ([xmin xmax ymin ymax zmin zmax]) встановлює масштаб по осях x, y, z для активного графічного вікна.
Команда axis ('auto') повертає масштаб по осях до штатних значень (прийнятим за замовчуванням).
Команда axis (axis) фіксує поточні значення масштабів для наступних графіків, так ніби то був включений режим hold.
Функція v = axis повертає вектор-рядок масштабів по осях для активного графіку. Якщо графік двовимірний, то v має 4 компоненти; якщо тривимірний - 6 компонентів.
Команда axis ('ij') переміщує початок відліку в лівий верхній кут, зберігає положення осей і реалізує відлік по вертикальній осі з верхнього лівого кута (матрична система координат).
Команда axis('equal') устанавливает масштаб, который обеспечивает одинаковые расстояния между метками по осям x и y.
Команда axis ('xy') повертає декартову систему координат; початок відліку знаходиться в нижньому лівому кутку; вісь x горизонтальна і розміщується зліва направо, вісь y вертикальна і розміщується знизу до верху.
Команда axis ('square') встановлює однаковий діапазон варіації змінних по осях.
13
Команда axis ('equal') встановлює масштаб, який забезпечує однакові відстані між мітками по осях x і y.
Команда axis ('image') встановлює масштаб, якийзабезпечує квадратні розміри пікселів.
Команда axis ('normal') відновлює масшаб у повний розмір, відміняючи масштаби, встановлені командами axis ('square') та axis ('equal').
Команда axis ('off') знімає з осей їх позначення і маркери.
Команда axis ('on') відновлює на осях їх позначення та маркери.
Функція [s1, s2, s3] = axis ('state') повертає рядок, що визначає вектор стану об'єкту axes :
s1 = 'auto' | 'manual'.
s2 = 'on' | 'off'.
s3 = 'xy' | 'ij'.
Команда axis (s1, s2, s3) встановлює параметри об'єкту axes відповідно до вектору стану [s1, s2, s3]. За замовчуванням цей вектор набуває значень ['auto', 'on', 'xy'].
GRID |
Нанесення сітки |
|
|
Синтаксис:
grid on grid off grid
Опис:
Команда grid on наносить координатну сітку на поточні осі.
Команда grid off видаляє координатну сітку.
Команда grid виконує роль перемикача з однієї функції на іншу.
Команди групи grid здійснюють встановлення властивостей 'XGrid', 'YGrid', 'ZGrid' об'єкту axes.
HOLD |
Управління режимом збереження поточного графічного |
|
вікна |
||
|
Синтаксис:
hold on hold off hold
Опис:
Команда hold on включає режим збереження поточного графіку і властивостей об'єкту axes, так що подальші команди приведуть до додавання нових графіків в графічному вікні.
Команда hold off вимикає режим збереження графіку.
Команда hold реалізує перемикання від одного режимудо іншого.
Пояснення:
14
Команди hold впливають на значення властивості NextPlot для об'єктів figure і axes :
hold on надає значення add для властивості NextPlot поточним об'єктам figure і axes;
hold off надає значення replace для властивості NextPlot поточним об'єктам figure і axes.
SUBPLOT |
Розбиття графічного вікна |
|
|
Синтаксис:
subplot(m, n, p) subplot(h) subplot(mnp)
Опис:
Ця команда виконується перед зверненням до функцій побудови графіків для одночасної побудови декількох графіків в різних частинах графічного вікна.
Команди subplot (mnp) або subplot (m, n, p), де mnp – 3 цифри, робить розбиття графічного вікна на декілька підвікон, створюючи при цьому нові об'єкти axes; значення m вказує, на скільки частин розбивається вікнопо горизонталі, n - по вертикалі, а p - номер підвікна, куди виводитиметься черговий графік. Ці ж команди можуть використовуватися для переходу від одного підвікна до іншого.
Команда subplot (h), де h - дескриптор для об'єкту axes відповідного підвікна, - інший спосіб вибору підвікна для розміщення графіку.
Команди clf, subplot (111), subplot (1, 1, 1) виконують однуі ту ж функцію - видаляють усі підвікна і повертають графічне вікно в штатний стан.
Приклад:
У верхній частині екрану будується графік функції y1 = sin(x), в нижній - y2 = log(abs(y)).
x = -1:.1:1; y1 = sin(x);
subplot(2, 1, 1), plot(x, y1) y2 = log(abs(y1)); subplot(2, 1, 2), plot(x, y2)
ZOOM |
Управління масштабом графіку |
|
|
Синтаксис:
zoom on zoom off zoom zoom out
Опис:
Команда zoom on включає режим масштабування активного графіку. Тепер при натисненні лівої клавіші миші поблизу точки графіку, яка цікавить вас, масштаб вікна збільшується в 2 рази; при натисненні правої клавіші масштаб в 2 рази зменшується. Утримуючи ліву клавішу, можна виділити зону вікна, яка цікавить вас.
Команда zoom off вимикає режим масштабування.
Команда zoom реалізує перемикання від одного режимудо іншого.
15
Команда zoom out повертає графік в початковий стан.
COLORMAP |
Палітра кольорів |
|
|
Синтаксис:
colormap(C)
colormap(‘default’)
C = colormap caxis(caxis)
Опис:
Палітра кольорів C - це матриця розміру m х 3 дійснихчисел з діапазону [0.0 1.0]. Рядок k палітри сформованийз трьох чисел, які вказують інтенсивність червоного,зеленого і синього кольорів, тобто C (k :) =[r (k) g (k) b (k)].
Команда colormap (C) встановлює палітру згідно з матрицею C. Якщо значення елементу матриці виходить за межі інтервалу [0 1], видається повідомлення про помилку
Colormap must have values in [0,1].
Значення елементів палітри мають бути з інтервалу [0 1].
Команди colormap ('default') або colormap (hsv) встановлюють штатну палітру, яка відповідає моделі hue,- saturation - value (відтіннок-насищеність-значення).Послідовність кольорів цієї палітри відповідає барвам веселки.
red |
Червоний |
Каждый |
|
|
|
- |
- |
охотник |
|
|
|
yellow |
Жевтий |
желает |
|
|
|
green |
Зелений |
знать, |
|
|
|
cyan |
Блакитнийй |
где |
|
|
|
blue |
Синій |
сидит |
|
|
|
magenta |
Фіолетовий |
фазан |
|
|
|
У версій 4.x системи MATLAB реалізовані наступніпалітри:
bone |
Grey-scale with tinge of blue color map |
Сіра палітка з відтінком синьо |
||
|
|
|
|
|
cool |
Shades of cyan and magenta color map |
Палітра з відтінком блакитного і фіолетового |
||
|
|
|
|
|
copper |
Linear copper-tone color map |
Лінійна палітра з відтінками міді |
||
|
|
|
|
|
flag |
Alternating red, white, blue, and black |
Палітра з чергуванням червоного, синього, чорного |
||
|
|
color map |
|
|
|
|
|
|
|
gray |
Linear grey-scale color map |
Лінійна палітра з відтінками сірого |
||
|
|
|
|
|
hot |
Black-red-yellow-white color map |
Палітра з чергуванням чорного, червоного, довтого, білого |
||
|
|
|
|
|
hsv |
Hue-saturation-value color map |
Палітра веселки |
||
|
|
|
|
|
jet |
Variant of hsv |
Разновид hsv-палітри |
||
|
|
|
|
|
pink |
Pastel shades of pink color map |
Рожева палітра з пастельними відтінками |
||
|
|
|
|
|
prism |
Prism (red-orange-yellow-green -blue- |
Палітра з чергуванням червоного, помаранчевого, жовтого, |
||
|
|
violet) color map |
зеленого, синього, фіолетового |
|
|
|
|
|
|
white |
All white color map |
Беіла палітра |
||
|
|
|
Встановлення відповідності між палітрою |
|
|
CAXIS |
|
||
|
|
кольорів і масштабуванням осей |
||
|
|
|
||
Синтаксис:
16
caxis([cmin cmax]) caxis( ‘auto’ )
v = caxis caxis(caxis)
Опис:
Команда caxis дає простий спосіб управління властивостями Clim і CLimMode об'єкту axes і таким чином забезпечує спадкоємність попередніх версій системи MATLAB, орієнтованих на символьну обробку, з версіями 4.x, орієнтованими на графічний інтерфейс.
Команда caxis ([cmin cmax]) встановлює діапазон з палітри кольорів для масштабування даних, які використовуються об'єктами surface і patch, що створені за допомогою команд mesh, pcolor, surf.
Параметри cmin і cmax призначені для вибору граничних кольорів з поточної палітри. Значення кольорів позаінтервалом [cmin cmax] відсікаються, тобто відповідні фрагменти і пікселі не виводяться на екран.
Команда caxis ('auto') встановлює штатне масштабування даних палітрою кольорів; в цьому випадку відсікаються кольори, які відповідають значенням Inf і NaN.
Команда v = caxis повертає вектор-рядок [cmin cmax].
Команда caxis (caxis) фіксує поточну палітру для подальших графіків, начебто був включений режим hold.
Приклад:
[X, Y, Z] = sphere(32); |
% Cфера радіусом 1 |
C = Z; |
% Значення для С - в діапазоні [-1 1]. |
surf(X, Y, Z, C) |
% Зобрадення сфери |
SHADING |
Затінювання поверхонь |
|
|
Синтаксис:
shading faceted shading flat shading interp
Опис:
Команди групи shading встановлюють спосіб затінюванняграфічних об'єктів surface і patch, які створюються при використанні функцій mesh, surf, pcolor, fill і fill3.
17
Команда shading faceted встановлює рівномірне розфарбовування комірок з нанесенням чорних граней. Таке затінювання поверхні часто виявляється найбільш ефективним і прийняте за замовчуванням.
Команда shading flat встановлює розфарбовування кожної клітинки або грані певними кольорами, які залежать від кольору вузлів сітки.
Команда shading interp встановлює розфарбовування кожної клітинки або грані кольорами, які визначаються білінійною нитерполяцією кольорів у вузлах сітки.
Алгоритм:
Команды группы shading устанавливают требуемые значения свойств EdgeColor и FaceColor графических объектов surface и patch. Устанавлива-емые значения зависят от того, является ли трехмерный график сетчатой поверхностью (функция mesh) или затененной поверхностью (функция surf).
Команди групи shading встановлюють необхідні значення властивостей EdgeColor і FaceColor графічних об'єктів surface і patch. Встановлені значення залежать від того, чи є тривимірний графік сітчастою поверхнею(функція mesh) чи затіненою поверхнею (функція surf).
CONTOURC |
Формування масиву опису ліній рівнів |
|
|
Синтаксис:
C = contourc(Z) |
C = contourc(x, y, Z) |
C = contourc(Z, n) |
C = contourc(x, y, Z, n) |
C = contourc(Z, v) |
C = contourc(x, y, Z, v) |
Опис: |
|
Функція C = contourc (Z) формує масив C опису ліній рівнів для їх виведення на екран за допомогою функції contour.
Функція C = contourc (x, y, Z) формує масив ліній рівнів із урахуванням діапазону зміни координат x і y.
Функції C = contourc (Z, n) і C = contourc (x, y, Z, n) формують масив C для n ліній рівнів.
Функції C = contourc (Z, v) і C = contourc (x, y, Z, v) формують масив C тільки для ліній рівня, які задані вектором v.
Маccив ліній рівня складається з двох рядків і описує кожну лінію рівня у вигляді сегменту з наступними параметрами:
значення рівня (leveli) - координати x(i); кількість точок (pairsi) - координати y(i),
так, що массив C має вигляд:
C = [level1 x1 x2 ... xk1 level2 x1 x2 ... xk2 ...; pairs1 y1 y2 ... yk1 pairs2 y1 y2 ... yk2 ...].
Обмеження:
При роботі з функцією contourc передбачається, що елементи масивів x і y монотонно зростають.
CONTOUR |
Зображення ліній рівня для тривимірної поверхні |
|
|
Синтаксис:
contour(Z) contour(x, y, Z)
18
contour(Z, n) |
contour(x, y, Z, n) |
contour(Z, v) |
contour(x, y, Z, v) |
contour(...,’тип_лінії’) |
|
C = contour(...) |
|
[C, h] = contour(...) |
|
Опис:
Команда contour (Z) малює двовимірні лінії рівня для масиву даних Z, що визначають поверхню в тривимірному просторі без урахування діапазону зміни координат x і y.
Команда contour (x, y, Z), де x і y - вектори, малює лінії рівня для масиву даних Z з урахуванням діапазону зміни координат x і y.
Команди contour (Z, n), contour (x, y, Z, n) малює n ліній рівня для масиву даних Z; за замовчуванням, n дорівнює 10.
Команди contour (Z, v), contour (x, y, Z, v) малюють лінії рівня для заданих значень, які вказані у векторі v.
Команда contour (...,'<тип лінії>') малює лінії рівня, тип і колір яких визначаються параметром <тип лінії> команди plot.
Функція C = contour (...) повертає масив C опису ліній рівнів по аналогії з функцією contourc для подальшого використання командою clabel.
Функція [C, h] = contour (...) повертає масив C і вектор-стовпець дескрипторів h графічних об'єктів line длякожної лінії рівня.
Приклад:
Побудувати лінії рівня для функції
в області -2 <= x <= 2, -2<= y<= 2.
x = -2 : .2 : 2; y = x; [X, Y] = meshgrid(x);
Z = X.* exp(- X.^2 - Y.^2); contour(X, Y, Z)
Діагностичні повідомлення:
Якщо менша розмірність масиву Z виявляється менше двох, то видається повідомлення
Matrix must be 2-by-2 or larger.
Матрица должна иметь размер 2 х 2 или больше.
Обмеження:
При роботі з командою і функцією contour передбачається, що елементи масивів x і y монотонно зростають.
CONTOUR3 |
Зображення тривимірних ліній рівня |
|
|
Синтаксис:
contour3(Z) |
contour3(X, Y, Z) |
contour3(Z, n) |
contour3(X, Y, Z, n) |
C = contour3(... |
) |
19
[C, h] = contour3(...)
Опис:
Команда contour3 (Z) малює тривимірні лінії рівня для масиву даних Z, що визначають поверхню в тривимірному просторі без урахування діапазону зміни координат x і y.
Команда contour3 (X, Y, Z), де X і Y - двовимірні масиви, визначені за допомогою функції meshgrid, малює лінії рівня для масиву даних Z з урахуванням діапазону зміни координат x і y.
Команди contour3 (Z, n), contour (X, Y, Z, n) малюють n ліній рівня для масиву даних Z; за замовчуванням n дорівнює10.
Функція C = contour3 (...) повертає масив C опису ліній рівнів по аналогії з функцією contourc для подальшого використання командою clabel.
Функція [C, h] = contour3 (...) повертає масив C і вектор-стовпець дескрипторів h графічних об'єктів line длякожної лінії рівня.
Приклад:
Побудувати лінії рівня для функції
в області -2 <= x <= 2, -2<= y<= 3.
x = -2 : .2 : 2; y = -2 : .2 : 2;
[X, Y] = meshgrid(x, y);
Z = X.* exp(- X.^2 - Y.^2); contour3(X, Y, Z)
Обмеження:
При роботі з командою і функцією contour3 передбачається, що елементи масивів x і y монотонно зростають.
Написи і пояснення до графіків
TITLE |
Заголовки для дво- і тривимірнихграфіків |
|
|
Синтаксис:
title(‘<текст>’)
Опис:
Команда title(‘<текст>’) разміщуєт текст над графіком.
XLABEL
YLABEL Позначення осей
ZLABEL
Синтаксис:
xlabel('<текст>') ylabel('<текст>') zlabel('<текст>')
Опис:
20
