Рефетека.ру / Информатика и програм-ие

Реферат: Основы графической визуализации вычислений

Особенности графики системы MATLAB


Построение графика функций одной переменной

Построение графиков точками и отрезками прямых

Графики в логарифмическом и полулогарифмическом масштабе

Гистограммы и диаграммы

Графики специальных типов

Создание массивов данных для трехмерной графики

Построение графиков трехмерных поверхностей, сечений и контуров

Средства управления подсветкой и обзором фигур

Средства оформления графиков

Одновременный вывод нескольких графиков

Управление цветовой палитрой

Окраска трехмерных поверхностей

Двумерные и трехмерные графические объекты


Основные отличительные черты графики MATLAB


существенно улучшенный интерфейс графических окон;

введение новой панели инструментов Camera для интерактивного изменения условий видимости объекта;

расширенные возможности форматирования графики;

возможность создания графики в отдельных окнах;

возможность вывода нескольких графических окон;

возможность перемещения окон по экрану и изменения их размеров;

возможность перемещения области графики внутри графического окна;

задание различных координатных систем и осей;

высокое качество графики;

широкие возможности использования цвета;

легкость установки графических признаков - атрибутов;

снятие ограничений на число цветов;

обилие параметров команд графики;

возможность получения естественно выглядящих трехмерных фигур и их сочетаний;

простота построения трехмерных графиков с их проекцией на плоскость;

возможность построения сечений трехмерных фигур и поверхностей плоскостями;

функциональная многоцветная и полутоновая окраска;

возможность имитации световых эффектов при освещении фигур точечным источником света;

возможность создания анимационной графики;

возможность создания объектов для типового интерфейса пользователя.


Построение графика функций одной переменной


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


Основы графической визуализации вычислений

Рассмотрим простейший пример - построение графика синусоиды. MATLAB строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента x от 0 до 10 с шагом 0.1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков plot (sin(x)).

Вектор x задает интервал изменения независимой переменной от 0 до 10 с шагом 0.1. Функция plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора x число точек. Эти точки затем просто соединяются отрезками прямых, т. е. осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10 - 20 точках она будет выглядеть состоящей из отрезков прямых.

MATLAB строит графики в отдельных окнах, называемых графическими окнами. В главном меню окна команды пункта меню Tools (Инструменты), позволяют вывести или скрыть инструментальную панель. Средства этой панели позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.


Построение в одном окне графиков нескольких функций


Основы графической визуализации вычислений


Построим графики сразу трех функций:sin(x), cos(x) и sin(x)/х. Прежде всего, отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде у (x):


>>y1=sin(x); y2=cos(x); y3=sin(x)/x;


Такая возможность обусловлена тем, что эти переменные являются векторами - как и переменная x. Теперь можно использовать одну из ряда форм команды


plot: plot(a1, f1, a2, f2, a3, f3,...).


где a1, a2, a3,…- векторы аргументов функций, а f1, f2, f3,... - векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее:


>> plot (x, y1, x, y2, x, y3)


Основы графической визуализации вычислений


Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой в работе программы. Причина этого казуса возникнет при вычислении функции y3=sin(x)/x, если x представляет собой массив (вектор), то нельзя использовать оператор матричного деления /.

Чтобы получить график, надо вычислять отношение sin(x) к x с помощью оператора поэлементного деления массивов ./.


>>y1=sin(x); y2=cos(x); y3=sin(x)./x;


Warning: Divide by zero.

(Type "warning off MATLAB:divideByZero" to suppress this warning.)


>> plot(x,y1,x,y2,x,y3)


Основы графической визуализации вычислений


MATLAB построил графики всех трех функций, но в окне командного режима появилось предупреждение о делении на 0 - в момент, когда х=0. Это говорит о том, что plot «не знает» о том, что неопределенность sin(x)/x=0/0 устранима и дает 1. Это недостаток практически всех систем для численных вычислений.


Графическая функция fplot


MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Это делается, с помощью другой графической команды –


fplot: fplot('f(x)', [xmin, xmax])


Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, график строится правильно, при х=0 sinx/x=1. Команда grid on (сетка)- включает отображение сетки, которая строится пунктирными линиями.


>> fplot('sin(x)/x', [-15,15]); grid on


Построение графиков отрезками прямых


Для отображения функции одной переменной у (x) используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси: горизонтальная X и вертикальная Y, и задаются координаты x и у, определяющие узловые точки функции у(x).

Команда plot служит для построения графиков функций в декартовой системе координат. Эта команда имеет ряд параметров, рассматриваемых ниже.

plot (X, Y) — строит график функции у(х), координаты точек (х, у) которой берутся из векторов одинакового размера Y и X. Если X или Y — матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы.


Основы графической визуализации вычислений

Приведенный ниже пример иллюстрирует построение графиков двух функций — sin(x) и cos(x), значения, функции которых содержатся в матрице Y, а значения аргумента х хранятся в векторе X:


>> x=[0 1 2 3 4 5];

>> y1=sin(x); y2=cos(x);

>> plot(x,y1,x,y2)


На рисунке показан график функций из этого примера. В данном случае отчетливо видно, что график состоит из отрезков, и если вам нужно, чтобы отображаемая функция имела вид гладкой кривой, необходимо увеличить количество узловых точек. Расположение их может быть произвольным.


Основы графической визуализации вычислений


plot(Y) — строит график у(x), где значения y берутся из вектора Y, а x представляет собой индекс соответствующего элемента. Если Y содержит комплексные элементы, то строится график plot (real (Y), imag(Y)). Во всех других случаях мнимая часть данных игнорируется.

Пример использования команды plot(Y):


>> x=-2*pi:0.02*pi:2*pi;

>> y=sin(x)+i*cos(3*x);

>> plot(y)

plot(X,Y,S) — аналогична команде plot(X,Y), но тип линии графика можно задавать с помощью строковой константы S.


Значениями константы S могут быть следующие символы:


Цвет линии Тип точки Тип линии
Желтый y Точка . Сплошная -
Фиолетовый m Окружность 0 Двойной пунктир ;
Голубой c Крест x Штрих-пунктир -.
Красный r Плюс + Штриховая --
Зеленый g Звездочка *

Синий b Квадрат s

Белый w Ромб d

Черный k Треугольник (вниз) v



Треугольник (вверх) ^



Треугольник (влево) <



Треугольник (вправо) >



Пятиугольник p



Шестиугольник h


Основы графической визуализации вычислений


Таким образом, с помощью строковой константы S можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика.

рlot (X1,Y1, S1, Х2, Y2, S2, ХЗ, Y3, S3,...) - эта команда строит на одном графике ряд линий, представленных данными вида (X.,Y.,S.), где X. и Y. — векторы или матрицы, а S. — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией синего цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек).

При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется. Для монохромных систем линии выделяются стилем.

Рассмотрим пример построения графиков трех функций с различным стилем представления каждой из них:


>> x=-2*pi:0.1*pi:2*pi;

>> y1=sin(x);y2=sin(x).^2;

>> y2=sin(x).^2;

>> y3=sin(x).^3;

>>plot(x,y1,'-m',x,y2,'-.+r',x,y3,'--ok')


Здесь график функции y1 строится сплошной фиолетовой линией, график у2 строится штрих пунктирной линией с точками в виде знака «плюс» красного цвета, а график yЗ строится штриховой линией с кружками черного цвета.


Графики в логарифмическом масштабе


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

Основы графической визуализации вычислений


loglogx(...) - синтаксис команды аналогичен ранее рассмотренному для функции plot(...). Логарифмический масштаб используется для координатных осей X и Y. Ниже дан пример применения данной команды:


>> x=logspace(-1,3);

>> loglog(x,exp(x)./x) grid on


Функция x = logspace(d1, d2) формирует вектор-строку, содержащую 50 равноотстоящих в логарифмическом масштабе точек, которые покрывают диапазон от 10d1 до 10d2 .

Функция x =logspace(d1, d2, n) формирует вектор-строку, содержащую n равноотстоящих в логарифмическом масштабе точек, которые покрывают диапазон от 10d1 до 10d2.

На рисунке представлен график функции ехр(х)/х в логарифмическом масштабе. Командой grid on строится координатная сетка. Неравномерное расположение линий координатной сетки указывает на логарифмический масштаб осей.


Графики в полулогарифмическом масштабе


В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой — линейный.

Для построения графиков функций в полулогарифмическом масштабе используются следующие команды: semilogx(...) — строит график функции в логарифмическом масштабе (основание 10) по оси X и линейном по оси Y; semilogy(...)— строит график функции в логарифмическом масштабе по оси Y и линейном по оси X.


Основы графической визуализации вычислений


Запись параметров (...) выполняется по аналогии с функцией plot(...). приведем пример построения графика экспоненциальной функции:


>> x=0:0.5:10;

>> semilogy(x,exp(x))


Нетрудно заметить, что при таком масштабе график экспоненциальной функции выродился в прямую линию. Масштабной сетки теперь уже нет.


Столбцовые диаграммы


Столбцовые диаграммы широко используются в литературе, посвященной финансам и экономике, а также в математической литературе. Ниже представлены команды для построения таких диаграмм.

bar(x, Y) — строит столбцовый график элементов вектора Y (или группы столбцов для матрицы Y) со спецификацией положения столбцов, заданной значениями элементов вектора х, которые должны идти в монотонно возрастающем порядке;

bar(Y) — строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор х=1:m;

bar(x,Y,WIDTH) или bar(Y,WIDTH) — команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH > 1 столбцы в одной и той же позиции перекрываются). По умолчанию задано WIDTH = 0.8.

Возможно применение этих команд и в следующем виде: bar(.... 'Спецификация') для задания спецификации графиков, например типа линий, цвета и т. д., по аналогии с командой plot. Спецификация 'stacked' задает рисование всех n столбцов в позиции m друг на друге.

Пример построения столбцовой диаграммы матрицы размером 12x3 приводится ниже:

>> %Столбцовая диаграмма

>> subplot(2,1,1), bar(rand(12,3),stacked'), colormap(cool)


Основы графической визуализации вычислений


Помимо команды bar(...) существует аналогичная ей по синтаксису команда barh(...), которая" строит столбцовые диаграммы с горизонтальным расположением столбцов.


>> subplot(2,1,1), barh(rand(5,3), 'stacked'),colormap(cool)

Основы графической визуализации вычислений


Какое именно расположение столбцов выбрать, зависит от пользователя, использующего эти команды для представления своих данных.


Построение гистограмм


Классическая гистограмма характеризует числа попаданий значений элементов вектора Y в М интервалов с представлением этих чисел в виде столбцовой диаграммы. Для получения данных для гистограммы служит функция hist, записываемая в следующем виде:

N=hist(Y) — возвращает вектор чисел попаданий для 10 интервалов, выбираемых автоматически. Если Y — матрица, то выдается массив данных о числе попаданий для каждого из ее столбцов;

N=hist(Y,M) — аналогична вышерассмотренной, но используется М интервалов (М- скаляр);

N=hist(Y,X) — возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора X;

[N,X]=HIST(...) — возвращает числа попаданий в интервалы и данные о центрах интервалов.

Команда hist(...) с синтаксисом, аналогичным приведенному выше, строит график гистограммы. В следующем примере строится гистограмма для 1000 случайных чисел и выводится вектор с данными о числах их попаданий в интервалы, заданные вектором x:

Основы графической визуализации вычислений


>> x=-3:0.2:3;

>> y=randn(1000,1);

>> hist(y,x)

>> h=hist(y,x)

h =

Columns 1 through 9

0 0 3 7 8 9 11 23 33

Columns 10 through 18

43 57 55 70 62 83 87 93 68

Columns 19 through 27

70 65 41 35 27 21 12 5 6

Columns 28 through 31

3 2 1 0

Нетрудно заметить, что распределение случайных чисел близко к нормальному закону. Увеличив их количество, можно наблюдать еще большее соответствие этому закону.


Создание массивов данных для трехмерной графики


Трехмерные поверхности обычно описываются функцией двух переменных z(x,y). Специфика построения трехмерных графиков требует не просто задания ряда значений x и у, то есть векторов x и у. Она требует определения для X и Y двумерных массивов - матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах:

[X,Y] = meshgrid(x) - аналогична [X,Y] = meshgrid(x, x);

[X,Y,Z] = meshgrid(x, y, z) - возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков;

[X,Y] = meshgrid(x,y) - преобразует область, заданную векторами x и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора x; а столбцы Y — копиями вектора у.

Пример:


>> [X,Y]=meshgrid(1:4, 13:17)

X =

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

Y =

13 13 13 13

14 14 14 14

15 15 15 15

16 16 16 16

17 17 17 17


Приведем еще один пример применения функции meshgrid:

>> [X,Y]=meshgrid(-2:0.2:2, -2:0.2:2);


Такой вызов функции позволяет задать опорную плоскость для построения трехмерной поверхности при изменении x и y от-2 до 2с шагом 0.2.

Функция ndgrid является многомерным аналогом функции meshgrid:

[Х1,Х2,ХЗ,...] = ndgrid(x1,x2,x3....) — преобразует область, заданную векторами x1,.x,x3..., в массивы Х1,Х2,ХЗ..., которые могут быть использованы для вычисления функций нескольких переменных и многомерной интерполяции, i-я размерность выходного массива Xi является копией вектора xi;


[XI,Х2....] = ndgrid(x) - аналогична [XI,Х2....] = ndgrid(x,x,...).


Пример применения функции ndgrid представлен ниже:


>> [X1,X2]=ndgrid(-2:0.2:2,-2:0.2:2);

>> Z=X1.*exp(-X1.^2-X2.^2);

>> mesh(Z)


Построение графиков поверхностей


Команда plot3(...) является аналогом команды plot (...), но относится к функции двух переменных z(x, у). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами:

plot3(x, y, z) — строит массив точек, представленных векторами x, у и z соединяя их отрезками прямых. Эта команда имеет ограниченное применение;

plot3(X,Y,Z), где X, Y и Z — три матрицы одинакового размера, строит точки с координатами X(i,:), Y(i,:) и Z(i,:) и соединяет их отрезками прямых.

Ниже дан пример построения трехмерной поверхности, описываемой функцией


z(х,у)=х^2+у^2;

>> [X,Y]=meshgrid(-3:0.15:3);

>> Z=X.^2+Y.^2;

>> plot3(X,Y,Z)


График этой поверхности показан на рисунке:


Основы графической визуализации вычислений


plot3 (X, Y, Z, S) — обеспечивает построения, аналогичные рассмотренным ранее, но со спецификацией стиля линий и точек, соответствующей спецификации команды plot. Ниже дан пример применения этой команды для построения поверхности кружками:


>> [X,Y]=meshgrid(-3:0.15:3);

>> Z=X.^2+Y.^2;

>> plot3(X,Y,Z,'o')


График поверхности, построенный кружками, показан на рисунке:


Основы графической визуализации вычислений


plot3(x1 ,y1,z1, s1,х2,у2,z2, s2, х3,уЗ,z3,s3,...) строит на одном рисунке графики нескольких функций z1(x1 ,y1), z2(x2,y2) и т. д. со спецификацией линий и маркеров каждой из них.

Пример применения последней команды дан ниже:


>> [X,Y]=meshgrid(-3:0.15:3);

>> Z=X.^2+Y.^2;

>> plot3(X,Y,Z,'-k',Y,X,Z,'k')


Основы графической визуализации вычислений


В данном случае строятся два графика одной и той же функции с взаимно перпендикулярными образующими линиями. Поэтому график имеет вид сетки без окраски ее ячеек (напоминает проволочный каркас фигуры).


Установка титульной надписи


После того как график уже построен, MATLAB позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда:

title( 'string') — установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.

Установка осевых надписей

Для установки надписей возле осей х, у и z используются следующие команды:


Основы графической визуализации вычислений


xlabel('String')

ylabel ('String')

zlabell ('String')


Соответствующая надпись задается символьной константой или переменной 'String'. Пример установки титульной надписи и надписей по осям графиков приводится ниже:


>> surfl(X,Y,Z)

>> [X,Y]=meshgrid(-3:0.15:3);

>> Z=sin(X)./(X.^2+Y.^2+0.3);

>> surfl(X,Y,Z)

>> colorbar

>> colormap(gray)

>> shading interp

>> xlabel('Axis X')

>> ylabel('Axis Y')

>> zlabel('Axis Z')

>> title('Surface graphic')


Ввод текста в любое место графика


Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text:

text(X,Y, 'string') — добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y). Если X и Y заданы как одномерные массивы, то надпись помещается во все позиции [x(i) ,y(i)];


Основы графической визуализации вычислений


text(X,Y,Z. 'string') — добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z.

В приведенном примере надпись размещается под кривой графика в позиции (-4, 0.7):

>> x=-10:0.1:10;

>> plot(x,sin(x).^3)

>> text(-4,0.7,'graphic sin(x)^3')


Позиционирование текста с помощью мыши


Очень удобный способ ввода текста предоставляет команда gtext:

gtext('string') — задает выводимый на график текст в виде строковой константы ' string' и выводит на график, перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста;

gtext (С) — позволяет аналогичным образом разместить многострочную надпись из массива строковых переменных С.

Пример применения команды gtext:


>> x=-10:0.1:10;

>> plot(x,sin(x).^3)

>> gtext('Function sin(x)^3')


Установив перекрестие в нужное место графика, достаточно нажать любую клавишу или любую кнопку мыши, и на этом месте появится надпись

Вывод пояснений

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

legend(string1,,string2, string3,...) — добавляет к текущему графику легенду в виде строк, указанных в списке параметров;

legend (М) — размещает легенду, используя данные из строковой матрицы М;

legend OFF — устраняет ранее выведенную легенду;

legend (....Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos:

Pos=0 - лучшее место, выбираемое автоматически;

Pos=1 - верхний правый угол;

Pos=2 - верхний левый угол;

Pos=3 - нижний левый угол;

Pos=4 - нижний правый угол;

Pos=-1 - справа от графика.

Чтобы перенести легенду, установите на нее курсор, нажмите левую кнопку мыши и перетащите легенду в необходимую позицию.

Команда legend может использоваться с двумерной и трехмерной графикой и со специальной графикой - столбцовыми и круговыми диаграммами и т. д. Двойным щелчком можно вывести легенду на редактирование.


Основы графической визуализации вычислений


Пример, приведенный ниже, строит график трех функций с легендой, размещенной в поле графика:


>> x=-2*pi:0.1*pi:2*pi;

>> y1=sin(x);

>> y2=sin(x).^2;

>> y3=sin(x).^3;

>> plot(x,y1,'-m',x,y2,'-.+r',x,y3,'--ok')

>> legend('Function 1','Function 2', 'Function 3');


Управление свойствами осей графиков


Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию:

axis([XMIN XMAX YMIN YMAX]) — установка диапазонов координат по осям x и у для текущего двумерного графика;

axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) - установка диапазонов координат по осям x, у и z текущего трехмерного графика;

axis auto — установка параметров осей по умолчанию;

axis manual — «замораживает» масштабирование в текущем состоянии, чтобы при использовании команды hold on следующие графики использовали те же параметры осей;

axis tight — устанавливает диапазоны координат по осям в соответствии с диапазонами изменения данных;

axis ij — задает «матричную» прямоугольную систему координат с началом координат в левом верхнем углу, ось i — вертикальная, размечаемая сверху вниз, ось j — горизонтальная и размечается слева направо;

axis xy — устанавливает декартову систему координат с горизонтальной осью х, размечаемой слева направо, и вертикальной осью у, размечаемой снизу вверх. Начало координат размещается в нижнем левом углу;

axis equal — включает масштаб с одинаковым расстоянием между метками по осям х, у и z;

axis image — устанавливает масштаб, при котором пиксели изображения становятся квадратами;

axis square — устанавливает текущие оси в виде квадрата (или куба в трехмерном случае) с одинаковым расстоянием между метками и одинаковой длиной осей;

axis normal — восстанавливает масштаб, отменяя установки axis equal и axis square;

axis vis3d — «замораживает» пропорции осей для возможности поворота трехмерных объектов;

axis off — убирает с осей их обозначения и маркеры; 0

axis on — восстанавливает ранее введенные обозначения осей и маркеры;


Основы графической визуализации вычислений


V=axis — возвращает вектор- строку, содержащую коэффициенты масштабирования для текущего графика. Если текущий график двумерный, то вектор имеет 4 компонента, если трехмерный — 6 компонентов.

Следующий пример иллюстрирует применение команды axis при построении двумерного графика функции одной переменной:


>> axis([-10 10 -1.5 1.5])

>> x=-5:0.1:5;

>> plot(x, sin(x));

>> axis([-8 8 -1.5 1.5])

Обратите внимание, что теперь масштабы осей заданы командой axis, а не диапазоном изменения значений x и у.


Включение и выключение сетки


В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды grid позволяют задавать построение сетки или отменять это построение:

grid on — добавляет сетку к текущему графику;

grid off — отключает сетку;

grid — последовательно производит включение и отключение сетки.


Основы графической визуализации вычислений


Команды grid устанавливают свойства объектов XGrid, Ygrid и Zgrid для текущих осей. Ниже приведен пример из предшествующего раздела с добавлением в него команды grid:

>> x=-5:0.1:5;

>> plot(x, sin(x));

>> axis([-8 8 -1.5 1.5])

>> grid on


Наложение графиков друг на друга


Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах:

hold on — обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим;

hold off — отменяет режим продолжения графических построений;

hold — работает как переключатель, последовательно включая режим продолжения графических построений и отменяя его.

Команда hold on устанавливает значение add для свойства NextPlot объектов figure и axes, a hold off устанавливает для этого свойства значение replace.


Графики синусоиды и трех параметрических функций в одном окне


Основы графической визуализации вычислений


Приведенный ниже пример показывает, как с помощью команды hold on на график синусоиды накладываются еще три графика параметрически заданных функций:

>> x=-5:0.1:5;

>> plot(x, sin(x));

>> hold on

>> plot(sin(x), cos(x));

>> plot(2*sin(x), cos(x));

>> plot(4*sin(x), cos(x));

>> hold off


В конце приведенного фрагмента программы команда hold off отключает режим добавления графиков к ранее построенным графикам.


Разбиение графического окна


Основы графической визуализации вычислений


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

subplot — создает новые объекты класса axes (подокна);

subplot(m,n, p) или subplot(mnp) — разбивает графическое окно на тхп подокон, при этом m — число подокон по горизонтали, n — число подокон по вертикали, а p— номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам);

subplot(H), где Н — дескриптор для объекта axes, дает альтернативный способ задания подокна для текущего графика;

subplot( 'position',[left bottom width height]) — создает подокно с заданными нормализованными координатами (в пределах от 0.0 до 1.0);

subplot(lll) и clf reset — удаляют все подокна и возвращают графическое окно в обычное состояние.

Следующий пример иллюстрирует применение команды subplot:


>> x=-5:0.1:5;

>> subplot(2,2,1), plot(sin(x), cos(x))

>> subplot(2,2,2), plot(sin(5*x), cos(2*x+0.2))

>> subplot(2,2,3), plot(sin(4*x), cos(2*x))

>> subplot(2,2,4), plot(cos(2*x))


В этом примере последовательно строятся четыре графика различного типа, размещаемых в разных подокнах.

Для всех графиков возможна индивидуальная установка дополнительных объектов, например титульных надписей, надписей по осям и т. д.


Изменение масштаба графика


Для изменения масштаба двумерных графиков используются команды класса zoom:

zoom — переключает состояние режима интерактивного изменения масштаба для текущего графика;

zoom (FACTOR) устанавливает масштаб в соответствии с коэффициентом FACTOR;

zoom on — включает режим интерактивного изменения масштаба для текущего графика;

zoom off — выключает режим интерактивного изменения масштаба для текущего графика;

zoom out — обеспечивает полный просмотр, т. е. устанавливает стандартный масштаб графика;

zoom xon или zoom yon — включает режим изменения масштаба только по оси x или по оси у;

zoom reset — запоминает текущий масштаб в качестве масштаба по умолчанию для данного графика;


Основы графической визуализации вычислений


Команда zoom позволяет управлять масштабированием графика с помощью мыши. Для этого надо подвести курсор мыши к интересующей вас области рисунка. Если команда zoom включена (on), то нажатие левой кнопки увеличивает масштаб вдвое, а правой — уменьшает вдвое. При нажатой левой кнопке мыши можно выделить пунктирным черным прямоугольником нужный участок графика — при отпускании кнопки он появится в увеличенном виде и в том масштабе, который соответствует выделяющему прямоугольнику.

Рассмотрим работу команды zoom на следующем примере:


>> x=-5:0.1:5;

>> plot(x, sin(x.^5)./(x.^5+eps))

>> zoom on


После прекращения манипуляций левой кнопкой мыши график примет вид, показанный на рисунке. Теперь в полный размер графического окна будет развернуто изображение, попавшее в выделяющий прямоугольник.


Основы графической визуализации вычислений


Команда zoom, таким образом, выполняет функцию «лупы», позволяющей наблюдать в увеличенном виде отдельные фрагменты сложных графиков. Однако следует учитывать, что для наблюдения фрагментов графиков при высоком увеличении они должны быть заданы большим количеством точек. Иначе вид отдельных фрагментов и тем более особых точек (в нашем случае это точка при x вблизи нуля) будет существенно отличаться от истинного.


Установка палитры цветов


Поскольку графика MATLAB обеспечивает получение цветных изображений, в ней есть ряд команд для управления цветом и различными световыми эффектами. Среди них важное место занимает установка палитры цветов. Палитра цветов RGB задается матрицей MAP из трех столбцов, определяющих значения интенсивности красного (red), зеленого (green) и синего (blue) цветов. Их интенсивность задается в относительных единицах от 0.0 до 1.0. Например, [0 0 0] задает черный цвет, [1 1 1] — белый цвет, [0 0 1] — синий цвет. При изменении интенсивности цветов в указанных пределах возможно задание любого цвета. Таким образом, цвет соответствует общепринятому формату RGB.

Для установки палитры цветов служит команда colormap, записываемая в следующих формах:

colormap( 'default') — устанавливает палитру по умолчанию, при которой распределение цветов соответствует радуге;

colormap(MAP) — устанавливает палитру RGB, заданную матрицей MAP;

C= colormap — функция возвращает матрицу текущей палитры цветов С.

m-файл с именем colormap устанавливает свойства цветов для текущего графика.

Команда help graph3d наряду с прочим выводит полный список характерных палитр, используемых графической системой MATLAB:

hsv - цвета радуги;

hot - чередование черного, красного, желтого и белого цветов;

gray - линейная палитра в оттенках серого цвета;

bone - серые цвета с оттенком синего;

copper - линейная палитра с оттенками меди;

pink - розовые цвета с оттенками пастели;

white - палитра белого цвета;

flag - чередование красного, белого, синего и черного цветов;

lines - палитра с чередованием цветов линий;

colorcube - расширенная палитра RGB;

jet - разновидность палитры HSV;

prism - призматическая палитра цветов;

cool - оттенки голубого и фиолетового цветов;

autumn -оттенки красного и желтого цветов;

spring - оттенки желтого и фиолетового цветов;

winter - оттенки синего и зеленого цветов;

summer - оттенки зеленого и желтого цветов.

Все эти палитры могут служить параметрами команды colormap, например colormap(hsv) фактически устанавливает то же, что и команда colormap( 'default').


Построение сферы


Для расчета массивов X, Y и Z координат точек сферы как трехмерной фигуры используется функция sphere:

[X,Y,Z]=sphere(N) — генерирует матрицы X, Y и Z размера (N+1)x (N+1) для последующего построения сферы с помощью команд surfl (X, Y,Z) или surfl(X,Y,,Z);

[X,Y,Z]=sphere — аналогична предшествующей функции при N=20.


Основы графической визуализации вычислений


Пример применения этой функции:


>> [X,Y,Z]=sphere(30);

>> surfl(X,Y,Z)

Хорошо видны геометрические искажения (сфера приплюснута), связанные с разными масштабами по координатным осям.

Обратите внимание на то, что именно функциональная окраска сферы придает ей довольно реалистичный вид. В данном случае цвет задается вектором Z.

Рефетека ру refoteka@gmail.com