Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MM - Все, что было=) / MMM / Пз_9a_МММ.doc
Скачиваний:
32
Добавлен:
16.02.2016
Размер:
316.93 Кб
Скачать

3.1. Основные графические объекты и их использование.

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

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

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

Существует иерархия объектов:

  • рисунок (figure),

  • оси координат (axes),

  • линия (line).

Обычно старшие объекты называют «родителями», а младшие – их «детьми».

Существуют и другие объекты, но нам пока понадобятся только эти.

Всякий объект имеет дескриптор, которым он однозначно определяется , и набор свойств, таких как цвет, размер, способ вывода и т.д.

Полный список свойств любого объекта можно посмотреть с помощью системы помощи.

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

Например, для функции line обязательно указать два массива x и y – координаты соединяемых точек. Для задания и/или изменения каких-либо свойств используется функция

set(handle, PropertyName, PropertyValue, ...).

Необходимо только знать имя дескриптора соответствующего объекта handle, имя соответствующего свойства PropertyName и какие значения оно (свойство) может принимать.

Например, в приведенном далее примере, цвет (зеленый -’g’) отрисовываемого объекта line c дескриптором h задается оператором

set(h, color, g).

Для получения значения какого-либо свойства или его присвоения другой переменной используется оператор get.

Полезно будет заметить, что свойства родительских объектов наследуются объектами-детьми. Поэтому при неизбежно поверхностном знакомстве с системой, внося изменения в свойства каких-либо объектов, мы можем получить иногда непредвиденные изменения в работе программ. (Фактически это свойство унаследовано системой MATLAB от языка C++, на котором она написана.)

3.2. Отрисовка движущихся кривых.

MATLAB предоставляет различные способы создания движущихся графиков или анимации.

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

Рассмотрим это на примере динамического вывода волны (программа WAVEPAK).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Программа WAVEPAK предназначенная для вывода %

% волнового пакета с анимацией изображения %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

t=0:0.1:100; % Задание вектора времени

x=0:0.3:30; % Задание вектора координат

k=1.3; w=0.9; n=length(t);

% Вычисление формы волны для момента времени t(1)

% во всех точках x

y=cos(k*x-w*t(1))+cos(x-t(1));

h=line(x,y); % Подготовка графика волны и присвоение

% дескриптора этой линии переменной h

% Задание цвета объекта (линии) с дескриптором h

% через свойство color

set(h,’color’,’g’);

axis([0 30 -3 3]);% Выбор осей координат и их масштаб

axis manual;

% Сохранение дескриптора линии волны и выбор значения

% свойства ’EraseMode’ равным ’xor’. Это сообщает

% графической системе MATLAB, чтобы она не

% перерисовывала весь график (включая оси, цвет фона

% и те точки, которые не изменились), а перерисовала

% только те точки, которые изменили свои координаты.

set(h,’EraseMode’,’xor’);

pause; % Пауза перед запуском движения волны.

% Она гарантирует обязательный вывод на экран,

% накопленного в буфере графики. Дальнейшее

% продвижение осуществляется нажатием на любую клавишу.

% Можно задать pause(0), тогда нажимать клавишу не надо

% Основной цикл вычисления и вывода движущейся волны

for i=2:n;

% Вычисление формы волны для момента времени t(i)

y=cos(k*x-w*t(i))+cos(x-t(i));

% Обновление координат линии, изображающей амплитуду

% волны с помощью обновления у объекта (линии)

% с дескриптором h свойства XData ( замена

% x-координат на новые значения ) и аналогичные

% действия с y-координатами. Это стандартный

% способ обновления координат точек для анимации.

set(h,’XData’, x,’YData’,y);

end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Аналогичным образом можно создавать любые движущиеся графики.

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

Соседние файлы в папке MMM