Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 2. Графика в Matlab

Рис. 2.46. График, на основе которого создается анимационный кадр

Рис. 2.47. Изображение, попавшее в кадр

91

Самоучитель Matlab

дится на расстоянии 100 пикселей по горизонтали и 50 пикселей по вертикали от левого нижнего угла рисунка. Обращаем внимание, что первым аргументом функции getframe() указано значение 1 – номер графического окна, на основе которого создается кадр. Для отображения картинки, записанной в кадр, используем команду image(F1.cdata), перед которой инструкцией figure создается новое графическое окно, в котором и отображается картинка. Картинка отображается с помощью функции image(). Аргументом указывается матрица изображения. Переменная кадра F1 является записью и имеет, как отмечалось, два поля – матрица изображения cdata и матрица цветовой палитры colormap. Аргументом функции image() указывается матрица изображения, ссылка на которую выполняется в "точечном синтаксисе": указывается имя записи и, через точку, имя поля. В данном случае это F1.cdata.

Далее выполняем такую последовательность команд (ввод пользователя выделен жирным шрифтом):

>>figure(1);h=gca

h =

170.0029

>>F2=getframe(h,[0 0 400 250])

F2 =

cdata: [250x400x3 uint8] colormap: []

>>figure;image(F2.cdata)

Результат представлен на рис. 2.48.

В данном случае командой figure(1) активным делается первое графическое окно, а командой h=gca создается ссылка на координатную систему первого графического объекта. Отсчет для области выделения картинки начинается от левого нижнего угла координатной системы.

Однако обычно для создания кадров анимации используется функция getframe() без аргументов. Например, выполним в рабочем документе, к уже выполненным, еще несколько команд:

>>figure(1);F3=getframe

F3 =

cdata: [343x435x3 uint8] colormap: []

>>figure;image(F3.cdata)

В результате создается кадр, представленный на рис. 2.49.

От исходного графика на рис. 2.47 данное изображение отличается, в общемто, только подписями вдоль координатных осей. На рис. 2.49 значения указаны в пикселях.

92

Глава 2. Графика в Matlab

Рис. 2.48. Второй кадр, созданный на основе графического изображения

Рис. 2.49. Кадр создается на основе всего изображения

93

Самоучитель Matlab

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

Обычно при создании последовательности кадров используется оператор цикла for. Операторы цикла, как и прочие методы программирования, описываются в следующей главе. Здесь только кратко остановимся на синтаксисе использования и принципах выполнения оператора цикла.

Оператор цикла начинается с ключевого слова for, после которого указывается индексная переменная, оператор присваивания и диапазон изменения этой переменной (если нужно, с шагом дискретности). После этого указываются команды, выполняемые в рамках каждого цикла. Заканчивается оператор цикла ключевым словом end. Рассмотрим следующую последовательность команд:

>>phi=0:0.01:2*pi;

>>N=100;

>>X=cos(phi);

>>Y=sin(phi);

>>for k=1:N alpha=phi-pi*k/N; r=max(0,3*cos(2*alpha)); x=r.*cos(phi); y=r.*sin(phi); area(x,y)

hold on area(X,Y) grid on axis equal

axis([-4 4 -4 4])

text(-0.8,3.5,['Frame N',num2str(k)],'FontSize',15,'Background Color',[.5 .8 .5])

F(k)=getframe; hold off

end

>> movie(F,2)

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

94

Глава 2. Графика в Matlab

Рис. 2.50. Первый кадр анимации

Рис. 2.51. Двадцать пятый кадр анимации

95

Источник: https://studfile.net/preview/16433384/