ЛАБОРАТОРНАЯ РАБОТА № 2
ТЕМА: «Назначение дескрипторной графики»
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Пользователь MatLab имеет ряд возможностей для построения графиков функций и визуализации данных:
· высокоуровневые графические функции (plot, surf, mesh и многие другие);
· интерактивную среду Plotting Tools, компонента которой Plot Editor (редактор графиков) также позволяет изменять свойства элементов графика;
· специализированные функции и средства ToolBox для графического отображения характеристик исследуемых объектов и результатов.
Итак, дескрипторная графика будет полезна создателям собственных приложений. Ее понимание обязательно для эффективного написания приложений с графическим интерфейсом пользователя. Кроме того, большинство высокоуровневых графических функций допускают обращение к ним с использованием низкоуровневых свойств того графического объекта, который они создают, например:
x = 0:0.2:10;
y = cos(x);
plot(x, y, 'LineWidth', 2, 'Marker', 'o', 'MarkerSize', 10)
В данном примере при построении графика функцией plot заданы следующие свойства линии:
· LineWidth - толщина линии 2пт.;
· Marker - тип маркера (кружок);
· MarkerSize - размер маркера 10пт.
Знание свойств графических объектов полезно и тем, кто не планирует заниматься программированием сложных приложений, но хочет получать графические результаты без их дальнейшей модификации в редакторе графиков.
Описание всех свойств графических объектов будет размещатся в разделе "Справочник свойств графических объектов". А сейчас мы перейдем к обсуждению организации структуры графических объектов, и использованию основных их свойств.
Иерархия графических объектов
Зададимся вопросом, что происходит при выполнении следующих команд
|
x = 0:0.2:10;
y = cos(x);
plot(x, y)
Разумеется, строится график функции, но при рассмотрении дескрипторной графики нам потребуется другой взгляд на этот процесс и соответствующая терминология. Если не было открыто графических окон, то высокоуровневая графическая функция plot создала ряд графических объектов: сначала графическое окно, затем оси и, наконец, линию. Все графические объекты MatLab выстроены в определенную иерархию, оси являются потомком графического окна и не могут существовать сами по себе. В свою очередь, графическое окно - предок для осей. Аналогичным образом дело обстоит с линией. Она является потомком осей, а оси - ее предком. Одновременно может существовать несколько графических окон, каждое из них может содержать и несколько потомков (осей), а каждые оси по нескольку потомков (линий, поверхностей и других графических объектов), например:
x = 0:0.1:5;
f = exp(-x).*sin(x);
g = exp(-x).*sin(2*x);
subplot(2, 1, 1)
plot(x, f, x, g)
subplot(2, 1, 2)
mesh(rand(10))
(Пока для демонстрации используются высокоуровневые графические функции).
Графических объектов достаточно много, их иерархическая структура представлена на рис. 1 для MatLab версии 7.
Рис. 1. Иерархическая структура графических объектов
Мы последовательно рассмотрим приемы работы с ними, в соответствии с цветовой заливкой на рис. 1. Сначала - оси (Axes), графические окна (Figure) и рисованные объекты (Plot Objects), поскольку, как правило они создаются в результате работы высокоуровневых графических функций plot, bar, surf и др. Затем мы обратимся к свойствам поясняющих объектов (Annotation Objects), которые являются потомками специальных невидимых осей (Hidden Annotation Axes), служащих для размещения текстовых примечаний, стрелок, текстовых выносок и других объектов. После этого мы займемся базовыми объектами, включающими линии, полигональные объекты и ряд других.
|
Рисованные и базовые объекты могут быть сгруппированы для удобства работы с ними и выполнения однотипных операций. Этот вопрос мы обсудим при конструировании сгруппированных объектов (Group Objects).
Потомки графического окна - панели и элементы пользовательского интерфейса -нужны при создании приложений с графическим интерфейсом пользователя, которому посвящен раздел "Приложения с GUI".
Перед тем, как перейти к основным приемам работы с графическими объектами и управлению их свойствами, мы обратимся к двум важным вопросам.
Текущий графический объект; указатели на объекты
Предположим, что открыто несколько графических окон, содержащие одну или несколько пар осей. На какую из них произойдет вывод графика, например функцией plot? Оказывается, что на текущие оси, т.е. в последние созданные, или те, которые были сделаны текущими при помощи щелчка мышью по ним. Если Ваше приложение осуществляет вывод на разные оси, то необходим способ, который позволяет делать оси (да и любые объекты: графические окна, линии и поверхности) текущими в ходе работы приложения.
Для создания графического окна служит функция figure. Вызов ее с выходным аргументом приводит не только к появлению графического окна, но и записи в него указателя на созданный объект - графическое окно. Создадим два графических окна, записав указатели на них в переменные hF1 и hF2:
hF1 = figure
hF2 = figure
Теперь для того, чтобы в любом месте приложения сделать текущим графическое окно с указателем hF1, достаточно обратится к функции figure со входным аргументом - указателем на окно:
figure(hF1)
При этом графическое окно не только станет текущим, но и расположится поверх остальных окон.
Предположим, что в некотором месте алгоритма требуется вывести графики в первое графическое окно с указателем h1. Создадим в первом графическом окне оси при помощи функции axes, запомнив указатель на оси в переменной hA1 (вызов большинства функций высокоуровневой графики с выходным аргументом обеспечивает запись в него указателя на созданный графический объект):
hA1 = axes