- •Передмова
- •Загальні теоретичні відомості
- •Області застосування комп'ютерної графіки
- •Способи формування зображень на екрані
- •Формування кольору малюнка
- •Технічні аспекти комп’ютерної графіки
- •Особливості реалізації роботи з графікою у мові Turbo Pascal 7.0
- •Математичні основи графічних побудов
- •Аффінні перетворення на площині
- •Аффінні перетворення в просторі
- •Види проектування
- •Базові алгоритми комп’ютерної графіки
- •Растрове розгорнення відрізка. Алгоритм Брезенхема
- •Заповнення суцільних областей
- •Заповнення багатокутників
- •Алгоритми заповнення області з затравкою
- •Видалення невидимих ліній і поверхонь
- •Деякі підходи до розв’язування задач загороджування
- •Тріангуляція
- •Робота II Графіки функцій у декартових координатах
- •Методичні вказівки
- •Варіанти завдань
- •Робота III Графіки функцій у полярних координатах Загальне формулювання завдання
- •Методичні вказівки
- •Варіанти завдань
- •Робота IV Побудова обмежених областей на площині Загальне формулювання завдання
- •Методичні вказівки
- •Варіанти завдань
- •Робота V Анімація двовимірних зображень
- •Методичні вказівки
- •Варіанти завдань
- •Робота VI Програмування тривимірних статичних сцен
- •Методичні вказівки
- •Варіанти завдань
- •Робота VII Моделювання зображень поверхні
- •Методичні вказівки
- •Варіанти завдань
- •Додаток а Приклади програмної реалізації графічних задач
- •Приклад 3
- •Приклад 4
- •Додаток б Графічна бібліотека компілятора Turbo Pascal 7.0
- •Драйвери
- •Система координат на екрані
- •Перетічний вказівник
- •Фігури і стилі
- •Вікна і бітові образи
- •Обробка помилок
- •Константи
- •Глосарій
- •Додаткова література
Особливості реалізації роботи з графікою у мові Turbo Pascal 7.0
Всі графічні процедури і функції компілятора Turbo Pascal 7.0 зібрані в окремий модуль - файл з ім'ям Graph.tpu. У програмі для використання цього модуля він повинен бути вказаний в рядку Uses. Оскільки існує декілька типів дисплеїв, то для програмного керування ними розроблені спеціальні програми - драйвери, що знаходяться в файлах з розширенням імені .bgi. Вони зібрані в окремий каталог з ім'ям BGI. В ньому зберігаються також файли з розширенням імені .chr – графічні шрифти для формування текстових повідомлень.
Для переходу в графічний режим у програмах на мові Turbo Pascal необхідно використати процедуру InitGraph, що визначає тип дисплея і відповідний йому номер драйвера. Ця інформація після виконання процедури зберігається в першому параметрі gd (graph driver) процедури. Процедура також визначає максимально можливий номер підрежиму дисплея і цю інформацію зберігає в наступному параметрі gm (graph mode). Третій параметр задається користувачем і містить у лапках шлях до файла графічного драйвера, наприклад, ' c: \ tp \ bgi '.
Таким чином, після виконання процедури InitGraph дисплей повинен бути переведений до графічного режиму із занесенням відповідної інформації в параметри процедури.
З різних причин, наприклад, неправильно вказаний програмістом шлях до драйвера, перехід у графічний режим може не статися. Необхідно проконтролювати перехід до графічного режиму. Для цього після виконання процедури InitGraph в операторі умови потрібно перевірити повернений код виконання графічної операції (виклик функції GraphResult), порівнюючи його з числовою константою 0 (або GrОk). У випадку, коли перехід не стався, виконання програми треба припинити, застосувавши процедуру Halt.
Виклик процедури ClearDevice (без параметрів) реалізує очищення екрану в графічному режимі.
Для побудов зображень на екрані графічна бібліотека містить достатню кількість процедур, які відповідним чином викликаються операторами програми.
Завершення роботи в графічному режимі реалізується викликом процедури CloseGraph (без параметрів).
Приклад графічної програми та інформаційні таблиці можливостей графічних процедур і функцій (та їх параметри) наведені у Додатках.
Математичні основи графічних побудов
Вивід зображення на екран дисплея і різноманітні дії з цим зображенням, у тому числі і візуальний аналіз, вимагають від користувача певної геометричної грамотності. Геометричні поняття формули і факти, що відносяться насамперед до плоского і тривимірного випадків грають у задачах комп'ютерної графіки особливу роль. Геометричні міркування, підходи й ідеї в поєднанні з можливостями обчислювальної техніки є постійним джерелом просувань на шляху розвитку комп'ютерної графіки, її ефективного використання в різноманітних дослідженнях, у тому числі наукових.
Аффінні перетворення на площині
У комп'ютерній графіці усе, що відноситься до двомірного випадку прийнято позначати символом (2D) (2-dimension). Нехай на площині введена прямолінійна система координат. Тоді кожній точці М ставиться у відповідність упорядкована пара чисел (x,y), її координат. Уводячи на площині ще одну прямолінійну систему координат, ми ставимо у відповідність тій же точці М іншу пару чисел (x1,y1). У цьому випадку перехід від однієї системи координат до іншої описується співвідношеннями
x1=A1•x+B1•y+d1,
y1=A2•x+B2•y+d2, (*)
де A1, B1, d1, A2, B2, d2 – довільні числа, що задовольняють умові .
Формули (*) можна розглядати подвійно:
А) зберігається точка і змінюється координатна система – довільна точка М залишається тією ж, змінюються лише її координати;
Б) змінюється точка і зберігається координатна система – формули (*) задають відображення, що переводить довільну точку М(x,y) у точку М(x1,y1), координати якої визначені в тій же координатній системі.
Надалі будемо розглядати формули (*) у змісті Б.
Приведемо декілька окремих випадків, вважаючи, що введена система координат є прямокутною декартовою.
А. Поворот навколо початкової точки на кут u описується формулами
x1=x•cos(u)-y•sin(u),
y1=x•sin(u)+y•cos(u).
Б. Розтягування (стискування) уздовж координатних осей описується формулами
x1=R1•x,
y1=R2•y,
де R1>0, R2>0.
Розтягування уздовж осі абсцис забезпечується за умови R1>1, стискування відповідно при R1<1.
В. Відбиття (відносно осі абсцис) задається за допомогою формул
x1=x,
y1=-y.
Аналогічно легко записати формули для відбиття відносно осі ординат.
Г. Паралельний перенос на вектор із координатами (d1,d2) забезпечується співвідношеннями
x1=x+d1,
y1=y+d2.
Вибір цих окремих випадків визначається двома обставинами:
1) кожне з приведених вище перетворень має простий і наочний геометричний зміст,
2) як відомо з курсу аналітичної геометрії, будь-яке перетворення виду (*) завжди можна представити як послідовне виконання (суперпозицію) найпростіших перетворень виду А, Б, В, Г.
Для ефективного використання цих формул у задачах комп'ютерної графіки більш практичним є їхній матричний запис. Матриці, що відповідають випадкам А, Б і В мають відповідно наступний вид:
.
Бажаючи охопити матричним записом усі чотири випадки, необхідно перейти до опису довільної точки площини за допомогою трійки чисел.
Уведемо для цього однорідні координати довільної точки. Широко використовувані в проективній геометрії, однорідні координати дозволяють досить ефективно описувати невласні елементи.
Нехай М - довільна точка площини з координатами x,y. Однорідними координатами точки називається трійка одночасно нерівних нулю чисел x1, x2, x3, якщо виконуються наступні співвідношення x1/x3=x, x2/x3=y.
У комп'ютерній графіці однорідні координати вводяться за такою схемою:
Точці M(x,y) ставиться у відповідність точка М'(x,y,1) у просторі. Відмітимо, що довільна точка на прямій, що з'єднує початок координат, точку О(0,0,0), із точкою М'(x,y,1), може бути задана трійкою (hx,hy,h).
Виключаючи точку О з розгляду, будемо вважати, що h≠0.
Вектор, обумовлений трійкою hx,hy,h, є направляючим вектором прямої, що з'єднує точки O і М'. Ця пряма перетинає площину z=1 у точці (x,y,1), що однозначно визначає точку (x,y) координатної площини xOy. Тим самим між точкою (x,y) і множиною трійок (hx,hy,h), h≠0, установлюється взаємно однозначна відповідність. Це дозволяє вважати числа hx, hy, h її координатами.
Таким чином, при h=1, записи (*) і нижченаведений можна вважати рівнозначними
.
Щоб реалізувати зображення по заданих геометричних характеристиках, треба знайти елементи відповідної матриці. Процес її побудови розбивають на етапи. На кожному етапі будується матриця для одного з розглянутих вище випадків А, Б, В, Г.
Зазначимо ці матриці:
А. Матриця обертання
,
Б. Матриця розтягування (стискування)
,
В. Матриця відбиття
,
Г. Матриця переносу
.