Цель: Освоить технологию синтеза динамических эффектов.

 

Задачи:

1. Создать модель с эффектом «небо в алмазах»

2. Создать модель мерцания двух точек с эффектом полноты

 

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

 

Приводимые ниже две программы создания эффектов мерцания позволяют понять некоторые из этих принципов

 

"Небо в алмазах"

 

1. Создадим программу, выводящую N точек на экран и затем гасящую в их окрестности другие точки. Наблюдается интересный эффект легкого покачивания рабочей области.

 

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду file\New\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab03_1.

 

3. Переустановите свойства новой формы как указано ниже

 

name=fmlab03_1

Caption = 'Небо в алмазах'

 

в раздел Public формы добавьте описание переменной flag:boolean;

 

4. Добавьте на панель, ниже панели инструментов, следующие компоненты и установите их свойства:

 

Button1: TButton

Caption = 'Старт!'

Button2: TButton

Caption = 'Стоп!'

 

5. Создайте двойным щелчком обработчик события для кнопки Cтарт! и поместите в него следующий программный код.

 

procedure TfmLab03_1.Button1Click(Sender: TObject);

Var x,y, x1,y1 ,i :integer;

begin

flag:=true;

randomize;

tbClearClick(sender);

GetCxCy(cx,cy);

imWork.Canvas.Rectangle(0,0,2*cx,2*cy);

Repeat

i:=random(65000);

x:=-cx+random(2*cx);

y:=-cy+random(2*cy);

MyPixel(x,y,i);

for i:=0 to random(900) do

begin

MyPixel(x-15+random(31),y-15+random(31),plBrush.color);

end;

Application.ProcessMessages;

Until flag=false;

end;

Создайте двойным щелчком обработчик события для кнопки Cтарт! и поместите в него следующий программный код.

 

flag:=false;

 

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню Небо в алмазах

 

application.CreateForm(Tfmlab03_1,fmlab03_1);

fmlab03_1.show;

 

Добавьте модуль Ulab03_1 в список подключенных модулей главной формы и переместите форму fmLab03_1 в список доступных

 

7. Скомпилируйте, сохраните и выполните проект

 

Мерцание

 

1. Создадим программу, выводящую 2 точки на экран и затем гасящую их. В силу инертности зрения наблюдается эффект одновременного присутствия более двух точек.

 

2. Откроем наш проект kmodel и добавим новую форму, построенную на основе fmAll. Выполните команду file\New\kmodel\fmAll и нажмите ОК. Сохраним модуль новой формы под именем Ulab03_2.

 

3. Переустановите свойства новой формы как указано ниже

 

name=fmlab03_2

Caption = 'Мерцание'

 

в раздел Public формы добавьте описание переменной flag:boolean;

 

4. Добавьте на панель, ниже панели инструментов следующие компоненты и установите их свойства:

 

Button1: TButton

Caption = 'Старт!'

Button2: TButton

Caption = 'Стоп!'

5. Создайте двойным щелчком обработчик события для кнопки Cтарт! и поместите в него следующий программный код.

 

procedure Tfmlab03_2.Button1Click(Sender: TObject);

Var x,y, x1,y1 ,i :longint;

begin

tbClearClick(Sender);

GetCxCy(cx,cy);

flag:=true;

imWork.Canvas.Rectangle(0,0,2*cx,2*cy);

Repeat

i:=random(65000);

x1:=x;

x:=-cx+random(2*cx);

y1:=y;

y:=-cy+random(2*cy);

MyPixel(x,y,i);

for i:=1 to 1000000 do begin end;

MyPixel(x1,y1,plBrush.color);

Application.processmessages;

Until flag=false;

end;

 

Создайте двойным щелчком обработчик события для кнопки Cтарт! и поместите в него следующий программный код.

flag:=false;

 

6. Перейдите в главную форму и создайте следующий обработчик события для пункта меню "Мерцание"

 

application.CreateForm(Tfmlab03_2,fmlab03_2);

fmlab03_2.show;

 

Добавьте модуль Ulab03_2 в список подключенных модулей главной формы и переместите форму fmLab03_2 в список доступных

 

7. Скомпилируйте, сохраните и выполните проект

 

Задание к лабораторной работе

 

  1. Модифицировать алгоритм "Небо в алмазах" Выводить точки в определенную область экрана.
  2. Модифицировать алгоритм "Мерцание". Увеличить "заполненность" экрана, оперируя одновременно с несколькими точками.

Контрольные вопросы