Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР_3

.doc
Скачиваний:
2
Добавлен:
16.07.2019
Размер:
179.2 Кб
Скачать

Лабораторна робота № 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. Записати відповідний текст та результат виконання програми у звіт.