Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра «Захисту інформації»


Звіт
Про виконання лабораторної роботи #4
На тему:
“ ПОБУДОВА РУХОМИХ ЗОБРАЖЕНЬ ”


Мета роботи: - набути практичних навиків в складанні програм для побудови рухомих зображень на екрані комп’ютера за допомогою матричних перетворень.
Варіант: 24

варіанту
Структура зображення
Пояснення


24


Замальований квадрат котиться по горизонтальній поверхні. При досягненні стінок напрямок руху змінюється на протилежний.
Параметри : L=150, a=25.


Код програми:
Program lab4;
Uses Crt, Graph;
Var Gd, Gm:integer;
k,i,x,y,xn,yn:integer;
procedure kv(x,i:integer);
var x1e,y1e,x2e,y2e,x3e,y3e:extended;
alpha:integer;
x1,y1,x2,y2,x3,y3:integer;
begin
y:=GetMaxY div 2;
x1e:=x; y1e:=y1-25;
x2e:=x-25; y2e:=y-25;
x3e:=x-25; y3e:=y;
if ((i mod 3)=0) then
begin
x1:=trunc(x1e); x2:=trunc(x2e); x3:=trunc(x3e);
y1:=trunc(y1e); y2:=trunc(y2e); y3:=trunc(y3e);
line(x,y,x1,y1);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x,y);
end;
if ((i mod 3)=1) then
begin
alpha:=75;
x1e:=x1e*cos(alpha)-y1e*sin(alpha);
y1e:=y1e*cos(alpha)+x1e*sin(alpha);
x2e:=x2e*cos(alpha)-y2e*sin(alpha);
y2e:=y2e*cos(alpha)+x2e*sin(alpha);
x3e:=x3e*cos(alpha)-y3e*sin(alpha);
y3e:=y3e*cos(alpha)+x3e*sin(alpha);
x1:=trunc(x1e); x2:=trunc(x2e); x3:=trunc(x3e);
y1:=trunc(y1e); y2:=trunc(y2e); y3:=trunc(y3e);
line(x,y,x1,y1);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x,y);
end;
if ((i mod 3)=2) then
begin
alpha:=165;
x1e:=x1e*cos(alpha)-y1e*sin(alpha);
y1e:=y1e*cos(alpha)+x1e*sin(alpha);
x2e:=x2e*cos(alpha)-y2e*sin(alpha);
y2e:=y2e*cos(alpha)+x2e*sin(alpha);
x3e:=x3e*cos(alpha)-y3e*sin(alpha);
y3e:=y3e*cos(alpha)+x3e*sin(alpha);
x1:=trunc(x1e); x2:=trunc(x2e); x3:=trunc(x3e);
y1:=trunc(y1e); y2:=trunc(y2e); y3:=trunc(y3e);
line(x,y,x1,y1);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x,y);
end;
end;
Begin
clrscr;
Gd:=DETECT;
InitGraph(Gd, Gm, '');
if GraphResult = grOK then begin
x:=(GetMaxX div 2)-50;
y:=GetMaxY div 2;
k:=25;
i:=3;
while (not keypressed) do
begin
clrscr;
line(GetMaxX-75,(GetMaxY div 2)+25, GetMaxX-75,(GetMaxY div 2)-25);
line(GetMaxX+75,(GetMaxY div 2)+25, GetMaxX+75,(GetMaxY div 2)-25);
line(GetMaxX-75,GetMaxY div 2, GetMaxX+75,GetMaxY div 2);
delay(20000);
kv(x,i);
if ((i mod 3)=2) then x:=x+k;
i:=i+1;
if x>=((GetMaxX div 2)+74) then k:=-25;
if x<=((GetMaxX div 2)-50) then k:=25;
end;
ReadLn;
CloseGraph;
end;
End.
Блок-схема:
Ні Так
Ні Так
Ні Так

Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі та їх пояснення:
Kv() – ф-ія, яка малює квадрат, у відповідному положенні.
line(x1,y1,x2,y2) – ф-ія, що будує лінію між точками (x1,y1) та (x2,y2).
gd,gm – ідентифікатори, які використовуються для визначення графічного драйверу та графічного режиму, відповідно.
Висновок:
На даній лабораторній роботі я згадав навички роботи в графічному середовищі мови програмування Турбо Паскаль та здійснив вивід на екран заданого зображення.