Говорухин В., Цибулин Б. Компьютер в математическом исследовании (1185927), страница 69
Текст из файла (страница 69)
Этот способ применения команды сопсоог позволяет, например, нарисовать одну линию уровня при заданном ска- лярном значении ч: сопточг(Х, У,7, (ч ч)), Если результат выполнения команды соптоог присвоить переменным (С, Н)=соптоцг ( Х. Ч, 7), то полученную матрицу С и столбец Н можно использовать в качестве вход- ных параметров для команды с)аЬе) (С.Н), которая выведет цифровую информацию о значениях линий уровня изображаемой функции. Для окраски линий и областей между ними применяются стандартные назначения, изменить которые можно при помощи указания параметра б для определения типа, цвета и толщины линий по- добно тому, как это делается для команды р) от: соптоцг( Х.
Ч. 7, 'Б' ). Имеются еще две команды построения линий уровня, обращение к которым ана- логично вызову функции сопсоцг: команда соптоцгт позволяет закрашивать облас- ЗУО Глава 14. Графика МАТ(яд 2б 2 0 1б .2 1 1.0 -б 3 -4 Об Об -Б 0 б 0 0 0 О О 2 4 6 Рис. 14.20. Построение линий уровня Анимация Многие явления и эффекта) становятся понятнее, если использовать анимацию. Имеются два способа подготовки анимации. Первый основан на предварительном построении всех изображений (кадров) н последующем их проигрывании.
Во втором способе кадры вычисляются в цикле и выводятся по мере готовности — старое изображение стирается, и рисуется новое. В МАТ1АВ имеются специальные средства для поддержки анимации с выводом изображения по мере подготовки данных. Однако если изображение сложное и число эпизодов невелико, то лучше подготовить кадры анимации заранее, а затем просто выводить картинки. Кадры анимации подготавливаются при помощи графических функций, а чтобы воспроизвести эпизоды, нужны команды, представленные в табл. 14.14. Таблица 14.14. Команды анимации Иыя Назначение Инициализация паияти для хранения матрицы кадров, нарисованных для текущих параметров осей .Создание отдельного кадра, помещаемого в столбец подготовленной матрицы Запуск анимации мот1 е1 и десггаме мечте ти между линиями равного уровня, а команда сопсоцгЗ изображает линии уровня в трехмерном пространстве.
Сопутствующими для команд построения линий уровня является также команда вывода цветовой шкалы со1огЬвг. Приведем на рис. 14.20 различные варианты иэображения линий уровня, получен- ные в результате выполнения следующих команд: ъ х-0:.1:4; У-0:.1;2; ГХ.т)-везпдгтс(х,у): 7=сов(2*Х+т)+т.есоз(Х-У): со1огмар(дгау).
сс-(-2 0 41: зиор1от( 1.3. 1). сопсоог(( х,у,2, Г-б: 1:б)): со)огЬаг зоЬр)от(132).(с.п)=соптоиг(Х,У,2,сс.'-Х'), с1аЬе1(с,п), зоьр!от(1,3.3), СЗ-соптоогЗ(х,у,2,32); дюо о(( Специализированная графика 37 а Приведем простые примеры использования обоих способов.
Для этого рассмотрим движение спектра трехдиагональной матрицы при изменении параметра. Зададим масштаб и подготовим матрицу: » акта(Г-б 1 -б 63), внб; А1-Отач([1 и)): А2-0( ач ( опеа (и-1, 1), -1): АЗ-От ач (оп ел (и-1, 1), 1); и-10; М-зонте! п(п): вет(чса. 'Менар)ог, ' гер) асес>М) Огеп') Заметим, что обращение к примитиву вывода осей оса предупреждает функцию р1 01 от перехода к стандартному режиму ах1 6 легата). Теперь приготовим кадры: » Еог 1-1:и, Е(-Ет'0((хт'П- 1)»А1+А2-(К- 1)ьАЗ>: р)ог(геа)(е1),тиа9[ет).'ох'): М(: ж )чЗе1ггапе: епс Наконец, запустим анимацию, указав число повторов: » почте(М.10) Приведем на рис. 14,21 начальную и финальную картины этой анимации, использовав команду 60Ьр)01, чтобы разместить на одном рисунке несколько изображений, О в -О > -2 -т) -2 О Рис.
14.21, Начальное и финальное располокенне собственных значений Тот же пример может быть реализован другим способом. Подготовим начальную картинку и получим дескриптор рисунка р: » ет-ете(-А1чА2). ахта([-6 1 -б 61>. по)о оп. и-10: р.р)от[геа)(ет),тиар(ет).'.','Егааеиосе','попе' ): Указанный параметр ' ЕгазеМосе ' позволяет дорисовывать новые детали — в нашем случае положения спектральных точек на графике, Теперь запустим цикл, в котором будем находить собственные числа, добавлять при помощи команды 6Е1 новые точки к рисунку и сразу изображать их, выполняя команду 0гаыпож( » Рог т "1;5'чт, К-(/5; ет- етд((К/и-1)»А1+А2-[К-1)"АЗ): вет[р.'кбаса',геа)(е1).'тоага'.теа0(ет)), ага»пои епб В результате выполнения цикла получается картина движения всех точек спектра при изменении параметра, см.
рис. 14.22. 372 Глава 14. Графика МАТСАВ Рис. 14.22. Анимация движения собственных значений В МАТ) АВ имеются также команды оживления фазовых картин: двумерной— сожеС и трехмерной — сожеСЗ (см, пример использования сожеСЗ в разделе «Интегрирование дифференциальных уравнений» главы 15 «Численный анализ в МАТ1АВ»).
Прн записи в графические файлы результатов анимации или графиков, полученных при помощи команд сонет и сожеСЗ, сохраняются данные последнего кадра или построения. Для фиксации анимационных картин следует перерисовать их при помощи обычных команд (р) о( и р) оСЗ). Именно таким образом был получен рис. 14.22. Работа с изображениями Рассмотренные ранее графические команды основаны на алгоритмах векторной графики, когда изображаемые объекты (кривые, поверхности, надписи) задаются координатами, В то же время многие изображения существуют в растровой форме, наприлтер фотографии, Система МАТ)-АВ имеет развитые средства для работы с растровыми объектами, включая подготовку растровых графических изображений, запись их в файл, считывание из файла картин, созданных другими программами.
По умолчанию МАТ(.АВ работает с вещественными числами двойной точности (восемь байт для хранения числа типа ооыЫе), а для работы с изображениями и сокрашения требуемой памяти реализовано хранение данных также в виде однобайтных целых без знака (класс ьи пСВ). Таблица 14.15. Команды работы с изображениями Команда Назначение Вывод графического образа Информация о графическом файле Чтение иэображения из графического файла Запись изображения в графический файл тмаве теттпто тмгеаб тмнгтсе Команда 1жа9е(С) выводит двумерный или трехмерный массив С как графический образ. Пусть размер массива есть Мхн или МхМхЗ, тогда число М определяет количество прямоугольников по горизонтали, а и — по вертикали, Если С двумерный массив, то каждый элемент С рассматривается как значение индекса для массива, определяющего текушую палитру (команда со)огвар)„и соответствующий этому Работа с изображениями 373 элементу С прямоугольник окрашивается в этот цвет.
Этот способ задания изображения называется 1пцехец за)аде (индексированное изображение) В случае трехмерного массива С цвет точки (в, п) определяют элементы С((а. и, 1: 3), дающие соответственно доли красного, зеленого и синего цветов. При таком способе построения объекта 1ваде получаются изображения с числом цветов до ! 6 миллионов (тгнесо1ог ]ваде).
В этом случае таблица цветов не используется. Обращение ~ваде(Х,У,С), где Х и У вЂ” векторы, определяет размещение пиксела С(1,1) в точке с координатами (Х(1), У(1) ) и пиксела С(М, М) соответственно в точке (Х(епп), Т(еп(]) ), По умолчанизо МАТ!.АВ масштабирует выводимое изображение, поэтому пиксел обычно представляется в виде прямоугольника. Чтобы отменить масштабирование, нужно явно указать размеры. Напризтер; т(доге("дпзсз",'рзхе)з'.'Розчт~оп',(100 100 и И]) Для записи растрового изображения (массив А) в файл Е! ЕЕ в графическом формате ТУР применяется команда ~аып те(А,Е1ЕЕ.ТтР) Прн чтении и записи в качестве ТУР выступают следующие графические форматы: ]рд Оред), 1(Т (ИГ), Ьвр, рпд, рсх, (за(Е, рсх, хшф Чтобы узнать тип изображения в файле, можно использовать команду паг(пго(Е! ЕЕ). Команда считывания изображения из файла НЕЕ в случае индексированного изображения имеет сшедуюп1ий вид: (й,м]-зитеай Е1ЕЕ.ТТР) или: А-~нгеайЕ1(Е.ТХР) В массив А заносятся данные об изображении (цвета пикселов построчно), а массив М будет содержать таблицу цветов, если массив А двумерный () поехео 10)аде).
Для считывания изображения Егиесо]ог зпнде достаточно одного выходного параметра. Приведем пример. Определим случайным образом массив: » с1еаг, В=ба*гапй20,50); и выведем изображение, назначив масштабирование, пропорциональное размерности массива, см. рис. 14.23: » зиаде(В); аяза шаде 10 15 20 5 10 15 20 25 30 35 40 45 50 Рис. 14.23. Демонстрация команды (ваде 374 Глава 14. Графика ИАГГАВ Запишем данные с палитрой цгау в формате Ь)вр: » ппьгпЬе(8,0гау 'гпО.Ьир','Ьвр') Теперь считаем записанный файл при помощи команды » ГВ! М1]-гвгеаОГ"гпс.ьвр",'Ьар'); Выведем информацию о массивах В, 81 и М1: »»105 Маие 5ые Вутее 0)аее В 20х50 8000 Оооо)е аггау 81 20х50 1000 оппЬВ аггау М1 256хз 6144 дооЬ)е аггау Вгапс Ьооа) 14 2768 е)евепоп ни пр 15144 Ьугее Видно, что данные об изображении записаны в экономном режиме (тип ойп18 вместо дооЬГе), а кроме того, сохранена палитра.