
- •Часть 1
- •Содержание
- •1 Цель работы
- •2 Зрительное восприятие быстрой смены образов
- •3 Практическое задание
- •4 Синтез динамических эффектов с анализом возможности
- •5 Практическое задание по модификации алгоритма
- •6 Анализ взаимодействия и свойств объектов
- •7 Практическое задание
- •1 Цель работы
- •2 Динамические эффекты с корректировками по условиям
- •3 Практическое задание по модификации алгоритма "Волны"
- •4 Динамические эффекты с анализом состояния процесса
- •6 Синтез простых трехмерных динамических образов
- •7 Практическое задание по модификации алгоритма
- •8 Моделирование динамического процесса с анализом
- •9 Практическое задание
- •1 Цель работы
- •2 Процедуры перемещения и масштабирования фигур
- •3 Практическое задание по отображению сложного движения
- •4 Отслеживание положения и ориентации объекта
- •5 Практическое задание по моделированию движения
- •6 Модификация контурного изображения
- •7 Практическое задание
- •8 Мультипликация с чередованием видеостраниц
- •9 Практическое задание
- •1 Цель работы
- •2 Мультипликация чередованием набора образов
- •3 Практическое задание
- •4 Работа с набором взаимодействующих образов
- •3 Практическое задание
- •Часть 1
3 Практическое задание
3.1 Создать модель перемещающейся фигурки чередованием трех
образов с озвучиванием перемещения. Варианты фигурок:
- катящееся колесо со спицами;
- шагающий ослик;
- летящая со взмахами крыльев птица;
- гребец в лодке;
- прыгающий мяч, деформирующийся при ударе;
- летящий вертолет (вид сверху).
3.2 Создать управляемую с клавиатуры стрелку. При перемещении стрелки по экрану она должна указывать направление своего перемещения.
4 Работа с набором взаимодействующих образов
Процедуры GetImage/PutImage работают весьма быстро, что можно использовать для создания сложных динамичных двумерных сцен. При этом хорошие результаты удается получить лишь при условии достаточно быстрого анализа условий, определяющих характер самого моделируемого процесса.
Рассмотрим пример программы, моделирующей поведение однородной сыпучей среды в поле силы тяжести.
uses Graph,Crt;
const M=50; { число объектов }
d=12; { размер объектов }
var x,y: array[1..M] of integer; { центры объектов }
stop,udar: array[1..M] of boolean;
P: Pointer;
Gd,Gm, i,r, Size : Integer;
PROCEDURE DOWN(i: integer);
{ Пошаговое перемещение объекта вниз }
var dx,dy: integer;
begin
dx:=0; dy:=r; { планируемое смещение координат объекта }
udar[i]:=true; { признак удара объекта о преграду }
{ случай перемещения без препятствий }
if GetPixel( x[i], y[i]+d-1)=0 then udar[i]:=false
else { внизу преграда, но слева свободно }
if ( GetPixel( x[i]-d, y[i] )=0 )
and( GetPixel( x[i]-d, y[i]+r)=0 ) then dx:=-d
else { внизу преграда, но справа свободно }
if ( GetPixel( x[i]+d, y[i] )=0 )
and( GetPixel( x[i]+d, y[i]+r)=0 ) then dx:=d
else dy:= 0; { смещение невозможно }
if dy > 0 then begin
PutImage( x[i]-r,y[i]-r, P^, 1); { стирание образа }
inc( x[i],dx);
inc( y[i],dy); { смещение позиции вывода }
PutImage( x[i]-r,y[i]-r, P^, 1) { вывод образа }
end;
{ если объект не двигался на предыдущем шаге }
if stop[i]=true then udar[i]:=false;
{ генерация звука при ударе и задержка видимости образа }
if udar[i] then sound(300); delay(2); NoSound;
{ если объект не сместился, то ставим признак его остановки }
if dy=0 then stop[i]:=true else stop[i]:=false end;
begin
Gd:=0; InitGraph(Gd,Gm,'');
Size:=ImageSize(0,0, d,d); { размер памяти для образов }
r:=d div 2; FillEllipse( r,r, r-1,r); { образ объекта }
GetMem(P, Size); { P - для хранения образа }
GetImage(0,0, d,d, P^);
{ Генерация начальных координат и свойств образов }
for i:=1 to M do begin
x[i]:=10*d + d*(i mod 6);
y[i]:= 4*d+2*d*(i div 6);
udar[i]:=false;
stop[i]:=false;
PutImage(x[i]-r,y[i]-r, P^,0)
end;
{ Рисование преград }
For i:=1 to d do
line (10*d, d*26+i, 18*d, d*30+i);
Bar(0, d*35, 400, d*36); ReadKey;
{ Процесс смещения объектов ( рисунок 1) }
Repeat
for i:=1 to M do DOWN(i);
Until KeyPressed;
readKey; CloseGraph end.
Рисунок 1 - Моделирование поведения сыпучей среды.
Описанная выше методика содержит весьма нестрогие логические условия моделирования процесса, например, толщина преграды для объектов должна быть не менее радиуса этих объектов. Однако усложнение условий моделирования подобных процессов приводит к ухудшению динамических характеристик модели. Поэтому необходим разумный компромисс по точности моделирования и, например, числу рассматриваемых объектов.