|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[35] на невидимой странице экрана. При этом во время просмотра одной видеостраницы, на другой (невидимой, но активной) происходит процесс рисования. Затем страницы переключаются и невидимая страница активизируется для рисования. Для качественных графических адаптеров можно установить режимы работы с несколькими графическими страницами, см. таблицу на стр. Страницы переключаются для просмотра на экране процедурой: SetVisualPage(N); где N - номер страницы. По умолчанию видна и активна страница с N=0. Страница активизируется для рисования процедурой: SetActivePage(N); Напомним, что вывод рисунков можно проводить и на невидимую страницу. Переключение для просмотра выполняется очень быстро, что важно при создании движущихся изображений. Таким образом, для создания изменяющихся изображений, во время визуального просмотра одной страницы на другой (невидимой, но активной) странице создается рисунок. Затем страницы переключаются для просмотра подготовленного рисунка и процесс повторяется. Приведем пример фрагмента программы - мультипликации с использованием чередования кодовых страниц (режим двух видеостраниц). k:= 2;{ количество кодовых страниц } for i:= 1 to 100 do begin j:= i mod k;{ j - номер кодовой страницы } SetActivePage(j);{ активизируем страницу без ее показа } ClearDevice;{ стираем старый рисунок } SetfillStyle(1, i div 15 +1); { изменение цвета заполнения через 15 стр. } Bar(1, 1, i+10, i+5);{ строим новый рисунок } SetVisualPage(j); delay(40){ показываем страницу } Until KeyPressed; В приведенной программе на активной странице рисуется заполненный прямоугольник, затем страница включается для просмотра на экране и активизируется другая страница на которой рисуется заполненный прямоугольник увеличенного размера. Процесс повторяется в цикле. Практическое задание N 1. 64 1.С использованием двух видеостраниц составить программу вывода на экран картины: приближение гор разного цвета ( увеличивать размер гор ). 2.С использованием двух видеостраниц составить программу вывода на экран картины: приближение облаков разного цвета. 3.Создать "бегущую строку" в графическом режиме с выводом части буфера (надписи) на невидимую страницу и сменой видеостраниц. 1. 15. 5. 3. Мультипликация с управлением движения образа Определяя смещение вновь выводимого образа в зависимости от кода нажатой клавиши, можно управлять движением фигуры. Обычно используют клавиши перемещения курсора. Приведем пример операторов, демонстрирующих принципы управляемого перемещения фигуры, с извлечением образа человечка из памяти: dx:= 1; dy:= 1; x:= 100; y:= 100; Xmax:= GetMaxX; PutImage(x, y, P, xold:= x; yold:= y c:= readkey; if c = #0 then c:= { пошаговые перемещения по осям X и Y } { начальные координаты смещаемого образа } Ymax:= GetMaxY; case c of #72 PutImage(xold, yold, Until c = #27; { выводим образ (запомненный ранее в P1A) } { запоминаем координаты } { считываем код клавиши в переменную типа char } readkey; { анализируем код нажатой клавиши } { смещение вверх } { смещение влево } { смещение вниз } { смещение вправо } { стираем образ } { при нажатии клавиши Esc перемещение прекратится } if y > 1 then y:= y - dy; if x > 2 then x:= x - dx; if y < Ymax-100 then y:= y if x < Xmax-20 then x:= x P, 1) Практическое задание N 1. 65 1.Перемещать по экрану стрелку- указатель под управлением курсорных клавиш с озвучиванием движения разной частотой звука в зависимости от направления перемещения. 2.Выполнить п. 1 так, чтобы стрелка всегда указывала направление своего перемещения. Примечание: дополнить операторы перемещения стрелки в диагональных направлениях. 1. 15. 5. 4. Модификация контурного изображения В производстве мультфильмов широко используется следующий метод анимации (плавной модификации контурного изображения): 1.Задается массив координат узловых точек исходного (начального) контурного изображения (X1[1. . N], Y1[1. . N]). Соединяя определенным образом эти точки отрезками прямых, получаем изображение. 2.Задается массив координат узловых точек целевого (конечного) контурного изображения (X2[1. . N], Y2[1. . N]). Количество точек одинаково для обоих массивов. 3.Плавной модификацией исходного образа получаем целевое изображение. Для этого последовательно находятся наборы координат X[1. . N], Y[1. . N] промежуточных образов. Каждую i- точку промежуточного образа выбирают на отрезке прямой между соответст- вующими точками исходного и целевого контуров, т. е. между точкой (X1[i], Y1[i]) и точкой (X2[i], Y2[i]). Таким образом отрезок делится на "m" частей, где m - количество промежуточных образов, включая целевой. Промежуточные образы перерисовывают, постепенно удаляясь от исходного образа. X1[i] -► X[i] -► X2[i] Y1[i] -► Y[i] -► Y2[i] В случае равномерного деления отрезков координаты узловых точек промежуточных образов можно рассчитать по формулам: x[i]:= x1[i] + (x2[i] - x1[i])*k/m; y[i]:= y1[i] + (y2[i] - y1[i])*k/m; где k - номер промежуточного образа, m - количество делений отрезка. Перерисовку образов удобно делать двойным рисованием в режиме SetWriteMode(1), либо используя процедуры работы с видеопамятью в режиме XorPut. Задержка видимости образа (delay) определяет скорость преобразования. В приведенной ниже демонстрационной программе задается исходный контур из 12 точек X1[i], Y1[i] - координаты узлов на квадрате, а целевой контур из 12 точек X2[i], Y2[i] - координаты вершин звезды. uses Graph, Crt; var Gd, Gm, i, j, k, n, xc, yc, r, m: integer; x, y, x1, y1, x2, y2: array[1..12] of integer; alfa: real; begin Gd:=Detect; InitGraph(Gd, Gm, ); SetWriteMode(1); { координаты узлов на квадрате - исходной фигуры: } for i:=7 to 10 do begin x1[i]:= 10; y1[i]:= 10+(i-7)*40 end; for i:=1 to 4 do begin x1[i]:=130; y1[i]:=130-(i-1)*40 end; x1[11]:= 50; x1[12]:= 90; y1[11]:=130; y1[12]:=130; x1[ 6]:= 50; x1[ 5]:= 90; y1[ 5]:= 10; y1[ 6]:= 10; { координаты узлов на звезде - целевой фигуры: } xc:= 500; yc:= 300;{ центр звезды } for i:= 1 to 12 do begin alfa:= (1-i)*(2*pi)/12; if (i mod 2)=0 then r:=30 else r:=100; x2[i]:= xc + round(r*cos(alfa)); y2[i]:= yc + round(r*sin(alfa)) m:= 60;{ координаты узлов на промежуточных образах: } for k:= 0 to m do begin for i:=1 to 12 do begin x[i]:=x1[i]+round((x2[i]-x1[i])*k/m); y[i]:=y1[i]+round((y2[i]-y1[i])*k/m) |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||