Цель: Освоить технологию синтеза динамических эффектов.
Задачи:
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. Скомпилируйте, сохраните и выполните проект
Задание к лабораторной работе
- Модифицировать алгоритм "Небо в алмазах" Выводить точки в определенную область экрана.
- Модифицировать алгоритм "Мерцание". Увеличить "заполненность" экрана, оперируя одновременно с несколькими точками.
Контрольные вопросы