МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
кафедра АТ
Звіт
до лабораторної роботи №4 з курсу
“Комп’ютерна графіка”
на тему:
“Побудова рухомих зображень”
Варіант №10
1.Мета роботи:
Набути практичних навиків в складанні прграм для побудови рухомих зображень на екрані комп’ютера за допомогою матричних перетворень.
2. Завдання:
2.1 Вивчити основні матричні перетворення на площині для побудови рухомих зображень.
2.2 Вивести результуючу матрицю руху для свого варіанту завдання, визначеного нижче.
2.3 Написати програму мовою Турбо-Паскаль, що дозволяє сформувати на екрані комп’ютера рухоме зображення.
2.4 Текст завдання: Незатухаючі коливання маятника.
3. Розрахунок матричних перетворень:
У даному випадку розглядаємо операцію перенесення , точки (центру кола).Щоб отримати координати точки після даного переміщення необхідно перемножити такі матриці:
=*= ;
4. Загальна Блок-схеми алгоритмів програми
1
2
3
4.1 Деталізована блок-схема блоку № 1 (ініціалізація графічного режиму) загальної блок-схеми:
1
2
3
ні ні так
4
5
4.2 Деталізована блок-схема блоку № 2 (рух кола) загальної блок-схеми:
1
2
3
4
5
6
7 так
ні
8
так
ні
9
так
10
ні
4.3 Деталізована блок-схема блоку № 3 (завершення графічного режиму) загальної блок-схеми:
1
5. Список ідентифікаторів, змінних процедур і функцій.
R-радіус кульки.
х –масив точок хс
n – приймає занчення 1 або 0, використовується для зміни сторінок.
Процедура IntGraphMode ініціалізує графічний режим.
Процедура Maiatnik виконує обрахунок точок, по яким виконується рух маятника. Процедура CloseGraphMode - завершує роботу графічного режиму.
6. Остаточно відлагоджений текст програми:
uses graph,crt;
const r=42;
label X;
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 Maiatnik;
var xc,yc,xline,n,yline,xkolo,ykolo:integer;
alfa,i:real;
begin
xc:=getMaxX div 2;
yc:=GetMaxY div 2;
repeat
i:=0;
repeat
if keypressed then halt(1);
cleardevice;
alfa:=pi/4+i;
SetColor(3);
xline:=xc + round(R * cos(alfa));
yline:=yc + round(R * sin(alfa));
xkolo:=xc + round((R+9)*cos(alfa));
ykolo:=yc+round((R+9)*sin(alfa));
n:=1;
SetActivePage(n);
Line(xc,yc,xline,yline);
SetColor(5);
SetFillStyle(1,5);
Circle(xkolo,ykolo,9);
FloodFill(xkolo,ykolo,5);
SetVisualPage(n);
i:=i+0.01;
delay(800);
until alfa > (3*pi/4);
i:=0;
repeat
if keypressed then halt(1);
cleardevice;
alfa:=3*pi/4-i;
xline:=xc + round(R * cos(alfa));
yline:=yc+ round(R * sin(alfa));
xkolo:=xc + round((R+9)*cos(alfa));
ykolo:=yc+round((R+9)*sin(alfa));
n:=1;
SetActivePage(n);
SetColor(3);
Line(xc,yc,xline,yline);
SetColor(5);
SetFillStyle(1,5);
Circle(xkolo,ykolo,9);
FloodFill(xkolo,ykolo,5);
SetVisualPage(n);
i:=i+0.01;
delay(800);
until alfa<(pi/4);
until keypressed;
end;
Begin
IntGraphMode(VGAMed);
Maiatnik;
end.