Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Графическое окно: создание и управление



Лабораторная работа № 6. Работа с графическими объектами

 

6.1. Введение

 

MATLAB оснащен множеством функций (plot, polar, plot3, surf и др.), которые дают возможность быстро и наглядно отображать графически результаты ваших расчетов. Вам нет необходимости тратить время на описание и создание графического окна, разметку осей, вычерчивание линий. Всю эту черновую работу упомянутые выше графические функции высокого уровня берут на себя. Как правило, имеющихся функций достаточно для выполнения любых ваших пожеланий. Надо только покопаться в HELP’е и найти подходящую функцию.

Однако по мере углубления вашего знакомства с MATLAB’ом, усложнения решаемых задач у вас может возникнуть желание по-своему организовать отображение получаемых результатов. В этом случае необходимо знать, как в MATLAB’е организована работа с графическими объектами, какие функции можно и нужно использовать для их создания, изменения, удаления. Эти задачи являются предметом низкоуровневой или дескрипторной графики.

Знание основ дескрипторной графики окажется необходимым также, когда вы захотите создать диалоговое приложение с элементами пользовательского интерфейса (GUI – Graphical User Interface) – текстовыми и графическими окнами, кнопками, рамками и т.п.

 

Объекты дескрипторной графики и их иерархия

 

Базовым понятием дескрипторной графики является графический объект. Примеры таких объектов:

Root – экран компьютера (первичный объект);

Figure – фигура или графическое окно;

Axes – «оси», объект, представляющий собой прямоугольную область в фигуре, предназначенную для графического вывода;

Line – линия

Text – текстовая надпись и т.д.

Между этими объектами установлена строгая иерархия. Так объект Root включает в себя все остальные объекты. Объект Figure содержится в объекте Root, но и сам может содержать объекты Axes, Text и другие. Для определения взаимоотношений объектов приняты термины: Parent – родитель (Root по отношению к Figure) и Children – дети (Axes или Text по отношению к Figure). Иерархия графических объектов схематически изображена на рис.1.

Для идентификации объектов каждому из них дается особая характеристика – дескриптор или хэндл. По-английски handle, что в буквальном переводе означает рукоять, ухват.

Хэндл представляет собой число. У объекта Root хэндл всегда равен 0. У объектов Figure хэндл – целое число, которое обычно появляется в верхней части фигуры в виде ее номера. Для остальных объектов хэндлы – это числа с плавающей точкой.

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

 

Графическое окно: создание и управление

 

Начнем с того, что в командном окне наберем команду:

 

>> figure

 

 
 

На экране появится серое окно очень похожее на то, которое появляется при использовании функции plot.

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

 

>> hf=figure

hf =

 

Заглянем в командное окно и обнаружим, что переменной hf присвоено значение 1. Дело в том, что функция создания фигуры figure в качестве выходного параметра выдает хэндл созданного объекта. При желании мы можем создать еще одну фигуру:

 

>> hf2=figure

hf2 =

>>

 

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

MATLAB рассматривает фигуру, как, впрочем, и любой другой графический объект как структуру. То есть графическому объекту принадлежат различные переменные содержащие числа, строки, вектора. Каждая переменная описывает какое-либо свойство объекта – размер, цвет, положение на экране. Мы создали фигуру, не указав ни одного из этих свойств. В этом случае MATLAB сам задает свойства, принятые по умолчанию для объектов данного типа. При желании мы можем вывести структуру объекта, иными словами, его свойства в командном окне. Для этого используется функция get:

 

>> get(hf)

Alphamap = [ (1 by 64) double array]

…………………

Color = [0.8 0.8 0.8]

…………………..

Name =

………………….

Position = [232 258 564 420]

 

Children = []

Parent = [0]

Selected = off

SelectionHighlight = on

Tag =

Type = figure

UIContextMenu = []

UserData = []

Visible = on

 

В результате выполнения этой команды будет выдан длинный список. Здесь приводится лишь его часть. В каждой строчке сначала указывается имя свойства объекта, а затем его значение. Следует отметить, что свойство может определяться одним числом, вектором, символьной строкой. Например, свойство Color (цвет) определяется вектором из трех чисел. Эти числа задают цвет объекта в шкале RGB (red-green-blue : красный-зеленый-синий).

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

 

>> get(hf,'Color')

ans =

0.8000 0.8000 0.8000

 

Здесь первый параметр, по-прежнему, хэндл объекта, а второй – заключенное в апострофы имя интересующего нас свойства.

На что еще стоит обратить внимание при первом взгляде на длинный список свойств объекта. Свойство Parent (родитель) содержит 0 ‑ хэндл родителя фигуры – объекта Root. Свойство Children (дети) пока содержит пустой вектор: []. Это естественно, ведь на нашей фигуре ничего нет. Но стоит создать на фигуре надпись (объект Text) или белый прямоугольник (объект Axes) и в этот массив будут занесены их хэндлы.

Хорошо, как узнать свойства объекта, мы выяснили. А как их изменять? Для этого имеется команда set. Например, изменить цвет с серого на синий можно следующей командой

 

>> set(hf,'Color',[0 0 1])

 

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

 

>> set(hf,'Color','green','Name','Фигура')

 

В этом случае после хэндла следует не одна пара параметров свойство-значение, а несколько. Обратите внимание, что в последнем примере для задания цвета используется не вектор из трех чисел, а имя. Для типовых цветов MATLAB предоставляет такую возможность.

В заключение этого параграфа еще об одном свойстве: Tag (ярлык). Как можно заметить функции get и set, как и многие другие функции дескрипторной графики, используют хэндлы. Пока мы работаем с объектами Root и Figure, это не причиняет особых неудобств – их хэндлы – целые числа. Однако хэндлы других объектов: осей, надписей, линий – вещественные числа. Их и указывать неудобно, и забыть можно. Стандартный прием заключается в следующем. Свойству Tag объекта присваиваем имя. Например,

 

>> set(hf,'Tag','F1')

 

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

 

>> hfig=findobj('Tag','F1')

hfig =

 

Эта функция выдает хэндл того объекта, у которого свойство, указанное первым параметром, имеет значение, указанное во втором параметре. Конечно, не обязательно в функции findobj использовать именно свойство Tag. Но другие свойства, например цвет, могут быть одинаковыми у разных объектов, а ярлык – уникален.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.