Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
кафедра АТ
Звіт
до лабораторної роботи №4 з курсу
“Комп’ютерна графіка”
на тему:
“Побудова рухомих зображень”
Варіант №16
1.Мета роботи:
Набути практичних навиків в складанні прграм для побудови рухомих зображень на екрані комп’ютера за допомогою матричних перетворень.
2. Завдання:
2.1 Вивчити основні матричні перетворення на площині для побудови рухомих зображень.
2.2 Вивести результуючу матрицю руху для свого варіанту завдання, визначеного нижче.
2.3 Написати програму мовою Турбо-Паскаль, що дозволяє сформувати на екрані комп’ютера рухоме зображення.
2.4 Текст завдання: Затухаючі коливання кола з діаметром 20 , висота 100.
3. Блок-схеми алгоритмів програми
3.1
3.2
3.3
3.1 Деталізована блок-схема блоку № 1 (ініціалізація графічного режиму) загальної блок-схеми:
1
2
3
ні ні так
4
5
3.2 Деталізована блок-схема блоку № 2 (рух квадрату) загальної блок-схеми:
1
2
3
4
5
6
7
8
9
10
11
так
ні
так
ні
так
ні
3.3 Деталізована блок-схема блоку № 3 (завершення графічного режиму) загальної блок-схеми:
1
4. Список ідентифікаторів, змінних процедур і функцій.
H – висота з якої падає коло
D – діаметр кола
n – приймає занчення 1 або 0, використовується для зміни сторінок.
Процедура IntGraphMode ініціалізує графічний режим.
Процедура CloseGraphMode - завершує роботу графічного режиму.
5. Остаточно відлагоджений текст програми:
uses graph,crt;
Procedure IntGraphMode(Mode:integer);
var Driver, Error: integer;
begin
Driver:=Detect;
InitGraph(Driver, Mode, '');
Error:=GraphResult;
if Error <> grOk then
begin
writeln(GraphErrorMsg(Error));
halt(1);
end;
end;
{******************************}
Procedure CloseGraphMode;
begin
CloseGraph;
end;
{******************************}
var x:array[1..180] of integer;
y:array[1..180] of integer;
j,r,xc,yc,i,n,M:integer;
alfa:real;
begin
R:=90; { расстояние от вершин до центра xc, yc }
xc:= GetMaxX div 2; yc:= GetMaxY div 2;
for j:= 1 to 180 do
begin
alfa:= (j+1) * pi/90;
x[j]:= xc + round(R * cos(-alfa));
y[j]:= yc + round(R * sin(-alfa));
end;
repeat
for j:=1 to 180 do begin
for i:= 1 to 40 do begin
if (i mod 2)>0 then N:=0 else N:=1;
if (i mod 2)>0 then M:=1 else M:=0;
SetActivePage(N);
MoveTo(x[j]+round(sqrt(4000)*cos(i*pi/90)),y[j]+round(sqrt(4000)*sin(i*pi/90)));
LineTo(x[j]+round(sqrt(4000)*cos(i*pi/90+pi/2)),y[j]+round(sqrt(4000)*sin(i*pi/90+pi/2)));
LineTo(x[j]+round(sqrt(4000)*cos(i*pi/90+pi)),y[j]+round(sqrt(4000)*sin(i*pi/90+pi)));
LineTo(x[j]+round(sqrt(4000)*cos(i*pi/90+(3*pi/2))),y[j]+round(sqrt(4000)*sin(i*pi/90+(3*pi/2))));
LineTo(x[j]+round(sqrt(4000)*cos(i*pi/90+2*pi)),y[j]+round(sqrt(4000)*sin(i*pi/90+2*pi)));
Circle(xc,yc,R);
delay(90);
{ SetVisualPage(m); }
delay(7300);
cleardevice;
Circle(Xc,Yc,R);
i:=i+1;
if keypressed then halt(1);
end;
j:=j+1;
end;
until keypressed;
end;
{******************************}
begin
IntGraphMode(VGAMed);
Kvadrat;
CloseGraphMode;
end.