ЛР_3
.docЛабораторна робота № 3
Створення графічних зображень
Мета:.Навчитися використовувати графічне середовище Паскаля на прикладі побудови графіка функції
Теоретичний матеріал
1. Псевдографіка у текстовому режимі. Екран дисплея в текстовому режимі містить 80 символів у рядку і 25 символів у стовпці.
Найпростіші графічні побудови можна виконати в текстовому режимі функціонування екрана засобами псевдографіки і за допомогою процедур задання потрібної позиції для виведення зображення на екран, кольору зображення тощо, тобто процедур з модуля Crt. Символи псевдографіки розміщені у другій половині таблиці кодів ASCII. Це такі символи та коди:
Для вставляння символу псевдографіки в текст програми слід натиснути клавішу Alt і, утримуючи її, набрати па правій частині клавіатури три цифри, що відповідають коду.
Символами псевдографіки можна нарисувати, наприклад, таке:
Процедури і функції модуля Crt, які використовують для оформлення результатів виконання програми (для керування наведенням на текстовий екран):
ClrScr — процедура очищення екрана.
ReadKey: char — функція, що отримує символьне значення натиснутої клавіші на основній клавіатурі.
KeyPressed — логічна функція, яка набуває значення true, якщо натиснута будь-яка клавіша на основній клавіатурі.
ТеxtCо1ог(<колір>) — процедура, яка задає колір тексту.
ТехtВаскGround(<колір>) — процедура, яка задає колір фону.
GoToXY(x, у) — процедура, що переводить курсор у координату (х, у) текстового вікна екрана.
WhereX — функція, яка повертає значення стовпця, де є курсор наведення результатів.
WhereY — функція, яка повертає значення рядка, де є курсор наведення результатів.
Window(xl, yl, х2, у2) — процедура, що задає координати вікна наведення: тут (xl, yl) — координати лівого верхнього кута, (х2, у2) - правого нижнього.
Вбудовані константи, що позначають кольори і відповідні їм коди
Колір |
Константа |
Код |
Чорний |
Black |
0 |
Синій |
Blue |
1 |
Зелений |
Green |
2 |
Бірюзовий |
Cyan |
3 |
Червоний |
Red |
4 |
Рожевий |
Magenta |
5 |
Коричневий |
Brown |
6 |
Світло-сірий |
LightGray |
7 |
Темно-сірий |
DarkGray |
8 |
Світло-синій |
LightBlue |
9 |
Світло-зелений |
LightGreen |
10 |
Світло-бірюзовий |
LightCyan |
11 |
Світло-червоний |
LightRed |
12 |
Світло-рожевий |
LightMagenta |
13 |
Жовтий |
Yellow |
14 |
Білий |
White |
15 |
Миготіння зображення забезпечує вираз <колір>+blink. Колір можна задати відповідним англійським словом або числом.
2. Графічний режим. Графічний екран дисплея складається з точок, які можна засвічувати певним кольором чи гасити, у результаті на екрані утворюється деяке зображення. Точки називаються пікселями. Роздільна здатність екрана — кількість точок у двох вимірах — залежить від технічних характеристик дисплея та адаптера дисплея. Розташування точок на графічному екрані визначайся їхніми координатами. Для VGA адаптера розміри екрана залежно від режиму можуть бути 640x200, 640x350 чи 640x480 . Перше значення (640) — це розмір уздовж горизонтальної , що йде, як звичайно, зліва направо, а друге — розмір уздовж вертикальної осі, яка йде зверху донизу. Отже, початок відліку є у лівому верхньому куті екрана (рис. 1).
Рис. 1. Розташування точок на графічному екрані 640x480.
Графіка в середовищі Турбо Паскаль реалізується за допомогою значної кількості готових процедур та функцій, зібраних у модулі graph.tpu. Сам модуль може бути в бібліотеці turbo.tpl або в деякому каталозі на диску. В останньому випадку модуль слід під'єднати оператором USES на початку програми. Необхідним також є файл egavga.bgi — драйвер для VGA адаптера чи файл cga.bgi для відповідного CGA адаптера тощо.
Розглянемо процедури модуля Graph, призначені для графічних побудов.
Initgraph (driver, mode, <шлях до драйвера>) — задає графічний режим. Шлях до драйвера зазначають (у ланках), якщо він не є в каталозі, з якого запускається середовище.
Detectgraph (<драйвер>, <режим>) — повертає значення характеристик дисплея driver, mode.
Setcolor (<колір>) — задає колір майбутнього зображення.
Setbkcolor (<колір>) — задає колір фону.
Putpixel (x, у, <колір>) — висвітлює точку (х;у) заданим кольором.
Line (xl, у 1, х2, у2) — рисує лінію між двома заданими точками.
Lineto (x, у) — рисує лінію від поточної точки до точки (х;у).
Linerel (dx, dy) — рисує лінію від поточної точки з заданими (приростами.
Rectangle (xl, у 1, х2, у2) — рисує прямокутник з заданими координатами діагонально протилежних вершин (лівої верхньої та правої нижньої).
Setviewport (xl, yl, x2, y2, true) — задає координати нового графічного вікна. Логічна стала true задає режим відсікання зображення, яке виходитиме за межі цього вікна.
Bar (xl, yl, х2, у2) — рисує зафарбований прямокутник.
Bar3d(xl, yl, х2, у2, <глибина>, true) — рисує паралелепіпед.
Circle (х, у, R) — рисує коло з радіусом R і центром в (х;у).
Arc (x, у, <початковий кут>, <кінцевий кут>, <радіус>) — рисує дугу.
Pieslice (х, у, <початковий кут>, <кінцевий кут>, <радіус>) — рисує зафарбований сектор.
Ellipse (х, у, <початковий кут>, <кінцевий кут>, <горизонт. радіус>, <вертик. радіус>) — рисує еліпс чи дугу еліпса.
Setfillstyle (<заповнення>, <колір>) — задає спосіб заповнення замкнутої області залежно від значення параметра заповнення.
Стилі заповнення геометричних фігур
Константа |
Код |
Опис |
EmptyFill |
0 |
Суцільне заповнення кольором фону |
SolidFill |
1 |
Суцільне заповнення заданим кольором |
LineFill |
2 |
Заповнення горизонтальними лініями |
LtSlashFill |
3 |
Діагональне заповнення (///) |
SlashFill |
4 |
Діагональне заповнення товстими лініями (///) |
BkSlashFill |
5 |
Зворотне діагональне заповнення товстими лініями (\\\) |
LtBkSlashFill |
6 |
Зворотне діагональне заповнення (\\\) |
HatchFill |
7 |
Клітчасте заповнення |
XhatchFill |
8 |
Косе клітчасте заповнення |
InterleaveFill |
9 |
Чергуюче лінійне заповнення |
WideDotFIll |
10 |
Рідко розташовані точки |
CloseDotFill |
11 |
Часто розташовані точки |
UserFill |
12 |
Стиль визначений користувачем |
Floodfill (х, у, <колір межі>) — заповнює замкнену область з точкою (х;у) у середині.
Closegraph — закриває графічний режим.
Outtext (<текст>) — виводить заданий текст з поточної позиції.
Outtextxy (х, у, <текст>) — виводить заданий текст у заданому місці.
Settextstyle (<шрифт>, <напрямок>, <розмір>) — задає вигляд символів, напрямок виведення: 0 — горизонтально чи 1 -вертикально, і розміри символів: 1, 2, 3.
Розглянемо деякі функції модуля Graph.
Graphresult — повертає код помилки, якщо неможливо задати графічний режим, і 0 — у разі задания.
Getmaxx — повертає значения розміру екрана по горизонталі.
Getmaxy — повертає значення розміру екрана по вертикалі.
Getcolor — повертає значення поточного кольору.
Getx, gety — повертають координати поточного пікселя.
Приклад 1. Намалювати емблему. У верхній лівій частині графічного екрана на чорному тлі намалювати блакитний квадрат, а в ньому - чорне коло, зафарбований жовтими кольорами. У центрі емблеми чорними буквами написати слово «Львів».
program Emblema;
uses Crt, Graph;
var driver, mode, i, xl, yl : integer;
x, y: real;
begin
clrscr;
driver := detect;
initgraph(driver, mode,' ');
setbkcolor(0);
setcolor(3);
rectangle(100, 0, 300, 200);
setfillstyle(l, 3);
floodfill(200, 100, 3);
setcolor(14);
circle(200, 100, 100);
setfillstyle(l, 14);
floodfill(200, 100, 14);
setcolor(0);
circle(200, 100, 100);
settextstyle(0, 0, 3);
outtextxy(135, 100, 'Львів');
readln
end.
Приклад 2. Побудувати графік функції y=2sin(2x)+1 на проміжку [0;2], табулюючи функцію з кроком h=0,1.
Program grafik;
uses Crt, Graph;
const a=0; b=2*pi; h=0.1; h1=5; x0=60; y0=240; M=50;
var driver, mode, x1, y1: integer; x, y: real;
function f(x: real): real;
begin
f:= 2*sin(2*x)+1;
end;
begin
clrscr; driver:=detect; initgraph(driver, mode,' ');
setcolor(14); setbkcolor(1);
line(20,y0,600,y0); line(x0,440,x0,20); {координатні осі}
x:=a; x1:=x0+trunc(M*x); {x, y – математичні координати}
y:=f(x); y1:=y0-trunc(M*y); {x1, y1- графічні координати}
moveto(x1,y1); setcolor(15);
while x<=b do
begin
y:=f(x); y1:=y0-trunc(M*y); lineto(x1,y1);
x1:=x1+h1; x:=x+h
end;
settextstyle(0,0,1);
outtextxy(60,245,'0'); outtextxy(360,245,'6.3');
settextstyle(0,0,2);
outtextxy(200,380,'Графік функції y=2sin(2x)+1'); readln;
end.
Завдання
1. У заданій частині графічного екрана нарисувати фігуру 1, у середині фігури 1 – фігуру 2, а у середині фігури 2 – текст: своє прізвище та ініціали. Усі елементи рисунка виконати різними кольорами. Замкнені області залити кольорами.
Варіант |
Частина екрана |
Фігура 1 |
Фігура 2 |
1 |
Верхня половина |
Коло |
Квадрат |
2 |
Нижня половина |
Прямокутник |
Коло |
3 |
Ліва половина |
Трикутник |
Еліпс |
4 |
Права половина |
Еліпс |
Прямокутник |
5 |
Верхня права чверть |
Квадрат |
Трикутник |
6 |
Нижня ліва чверть |
Коло |
Еліпс |
7 |
Нижня права чверть |
Прямокутник |
Трикутник |
8 |
Верхня ліва чверть |
Трикутник |
Прямокутник |
9 |
Весь екран |
Еліпс |
Трикутник |
10 |
Верхня половина |
Квадрат |
Прямокутник |
11 |
Нижня половина |
Коло |
Трикутник |
12 |
Ліва половина |
Прямокутник |
Еліпс |
13 |
Права половина |
Трикутник |
Коло |
14 |
Верхня права чверть |
Еліпс |
Квадрат |
15 |
Нижня ліва чверть |
Квадрат |
Еліпс |
2. Скласти програму побудови графіка функції на деякому проміжку (проміжок задати самостійно)
варіант |
функція |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
3. Записати відповідний текст та результат виконання програми у звіт.