Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
343.04 Кб
Скачать

Лабораторна робота №4

з дисципліни “Комп’ютерна графіка”

Тема: “ Реалізація алгоритмів комп’ютерної графіки на мові програмування Builder C++

Мета: “Отримати практичні навики реалізації алгоритмів комп’ютерної графіки на мові програмування Builder C++

Основнi теоретичнi вiдомостi

Для розробки гнучких комп’ютерних програм обробки графічних зображень використовують розповсюджений фірмою Borland програмний пакет С++. Його графічні можливості дозволяють розробляти та обробляти двомірні та тривимірні зображення, створювати анімаційні ефекти, компонувати відеоролики тощо. Розглянемо основні можливості обробки графічних зображень засобами програмування С++, що мають певні особливості їх використання в операційній системі Windows.

Програма, розроблена у середовищі С++виводить графічні зображення на поверхню об’єкта, яким є форма або компоненти Image, PaіntBox. Область ілюстрації Іmage використовується для відображення на формі растрових зображень. Цей компонент формує фон форми та містить такі властивості, як Height, Wіdth, Pіcture, Stretch та інші.

Важливе місце в графічному інструментарії С++займають класи TGraphіc і TPіcture. TGraphіc є абстрактним класом, що використовує загальні властивості й методи своїх нащадків: піктограми (Tіcon), метафайлу (TMetafіle) та растрового зображення TBіtmap. Їх загальною особливістю є те, що вони зберігаються у файлах певного формату. Піктограми являють собою невеликі растрові зображення, забезпечені спеціальними засобами, що регулюють їх прозорість. Зображення піктограми зберігається у файлі з розширенням .ico. Метафайл є зображенням, що побудоване за допомогою спеціальних команд і зберігається у файлах з розширенням .vmf або .emf. Растрові зображення є графічними файлами із стандартним розширенням .bmp. Функціональний клас TPіcture має всі необхідні засоби для роботи з готовими графічними зображеннями: піктограмою, растром та метафайлом. Його властивість Graphіc може охоплювати об'єкти кожного з цих типів.

Під час роботи з графікою зручно використовувати об'єкти бітового образу класу TBіtmap. Бітовий (растровий) образ являє графічну поверхню, на якій програма може формувати зображення. Вміст бітового образу знаходиться у пам'яті комп'ютера та може бути присвоєно змінній, виведено на поверхню форми або в область виведення ілюстрації.

Програмування графіки засобами програмування С++ надає широкі та гнучкі можливості обробки графічних зображень. Грамотне використання класів TCanvas, TBіtmap, TGraphіc, TPіcture дозволяє впроваджувати візуальні аспекти програмування в різні галузі сучасних технологічних розробок.

З розвитком об'єктно-орієнтованого програмування (ООП) почалася розробка об'єктно-орієнтованих бібліотек для роботи з графами. Використання засобів ООП при вирішенні теоретико-графовіх завдань дає істотні переваги в порівнянні з традиційним структурним підходом, оскільки сам граф, його вершини і ребра є "готовими" об'єктами, даними самою природою завдання.

Форма (об'єкт тип Tform) є основою програми. Властивості форми (таблиця. П.1) визначають вид вікна програми.

Таблиця П.1. Властивості форми (об'єкту Tform)

Властивість

Опис

Name

Ім'я форми. У програмі ім'я форми використовується для управління формою і доступу до компонентів форми

Caption

Текст заголовка

Тор

Відстань від верхньої межі форми до верхньої межі екрану

Left

Відстань від лівої межі форми до лівої межі екрану

Width

Ширіна форми

Height

Висота форми :

Clientwidth

Ширіна робочої (клієнтською) області форми, тобто без урахування ширини лівої і правої меж

Clientheight

Висота робочої (клієнтською) області форми, тобто без урахування висоти заголовка і ширини нижньої межі форми

Borderstyle

Вид межі. Межа може бути звичайною (bssizeable), тонкою (bssingle) або бути відсутнім (bsnone). Якщо біля вікна звичайна межа, то під час роботи програми користувач може за допомогою миші змінити розмір вікна. Змінити розмір вікна з тонкою межею не можна. Якщо межа відсутня, то на екран під час роботи програми буде виведено вікно без заголовка. Положення і розмір такого вікна під час роботи програми змінити не можна

Borderlcons

Кнопки управління вікном. Значення властивості визначає, які кнопки управління вікном будуть доступні користувачеві під час роботи програми. Значення властивості задається шляхом привласнення значень уточнюючим властивостям bisystemmenu, biminimize, bimaximize і bihelp. Властивість bisystemmenu визначає доступність кнопки Скрутити і кнопки системного меню biminimize— кнопки Скрутити bimaximize— кнопки Розвернути bihelp — кнопки виведення довідкової інформації

Icon

Значок в заголовку діалогового вікна, що позначає кнопку виведення системного меню

Color

Колір фону. Колір можна задати, вказавши назву кольору або елемент колірної схеми операційної системи. У другому випадку колір компоненту "прив'язаний" до колірної схеми операційної системи і змінюватиметься при кожній зміні колірної схеми

Font

Шрифт. Шрифт, використовуваний "за умовчанням" компонентами, що знаходяться на поверхні форми. Зміна властивості Font форми приводить до автоматичної зміни властивості Font компоненту, розташованого на поверхні форми. Тобто компоненти успадковують властивість Font від форми (є можливість заборонити спадкоємство)

Canvas

Поверхня, на яку можна вивести графіку

Основним классом для роботи з графікою є клас TCanvas. Цей класс є серцевиною графічної си теми Borland C++. Він поєднує в собі „зображення” (вміст конкретного пристрою GDI), „робочі інструменти” (перо, пензлик, шрифти) та набір додаткових функцій для малювання стандартних геометричних примітивів. Canvas — це поверхня (форми або компоненту image), на якій відповідні методи (таблиця. П.25) можуть викреслювати графічні примітиви. Вид графічних елементів визначають властивості поверхні, на якій ці елементи викреслюються (таблиця. П.26).

Таблиця П.25. Методи об'єкту Canvas

Метод

Опис

Textout (х,у, s)

Виводить рядок s від крапки з координатами (х, у). Шрифт визначає властивість Font поверхні (canvas), на яку виводиться тест, колір зафарбовування області виведення тексту — властивість Brush цій же поверхні

Draw(x,y,b)

Виводить від крапки з координатами (х, у) бітовий образ b. Якщо значення властивості Transparent поверхні, на яку виконується вивід, рівне true, то крапки, колір яких збігається з кольором лівої нижньої точки бітового образу, не відображаються

Lineto (x,y)

Викреслює лінію з поточної крапки в крапку з вказаними координатами. Вид лінії визначає властивість Ріпи

Moveto(x,y)

Переміщає покажчик поточної крапки в крапку з вказаними координатами

Polyline (pi)

Викреслює ламану лінію. Координати точок перегину задає параметр р1 — масив структур типу Tpoint. Якщо перший і останній елементи масиву однакові, то буде . викреслений замкнутий контур. Вид лінії визначає властивість Реn

Polygon (pi )

Викреслює і закрашує багатокутник. Координати кутів задає параметр p1 — масив структур типу Tpoint. Перший і останній елементи масиву мають бути однакові. Вид межі визначає властивість Ріпи, колір і стиль зафарбовування внутрішньої області — властивість Brush

Ellipse (xl,yl, [VI 8] x2,y2)

Викреслює еліпс, коло або круг. Параметри x1, y1, х2 і у2 задають розмір прямокутника, в який вписується еліпс. Вид лінії визначає властивість Реn  

Arc(xl, yl,x2, y2, хз,уз,х4,у4)

Викреслює дугу. Параметри x1, y1, x2, у2 визначають еліпс, з якого вирізується дуга, параметри х2, у2, хз, і у4 — координати кінців дуги. Дуга викреслюється проти годинникової стрілки від крапки (х3, у3) до крапки (х4, у4). Вид лінії (межі) визначає властивість Ріпи, колір і спосіб зафарбовування внутрішньої області — властивість Brush  

Rectangle (xl, yl, х2,у2)

Викреслює прямокутник. Параметри x1, y1, x2 і у2 задають координати лівого верхнього і правого ніжнего кутів. Вид лінії визначає властивість Ріпи, колір і спосіб зафарбовування внутрішньої області — властивість Brush

Roundrec (xl, yl, х2,у2, хз,уз)

Викреслює прямокутник з кутами, що округляють. Параметри x1, y1, х2 і у2 задають координати лівого верхнього і правого ніжнего кутів, х3 і у3 — радіус скруглення. Вид лінії визначає властивість Ріпи, колір і спосіб зафарбовування внутрішньої області — властивість Brush  

Табліца П.26. Властивості об'єкту canvas

Властивість

Опис

Transparent

Ознака використання "прозорого" кольору при виведенні бітового образу методом Draw. Якщо значення властивості рівне trueто крапки, колір яких збігаються з кольором лівої нижньої точки бітового образу, не відображаються

Pen

Властивістю Ріпи є об'єкт (див. таблиці. П1.27), властивості якого визначають колір, товщину і стиль ліній, що викреслюються методами виведення графічних примітивів

Brush

Властивість Brush є об'єктом (див. таблиці. П1. 28), властивості якого визначають колір і стиль зафарбовування областей, що викреслюються методами виведення графічних примітивів

Font

Властивість Font є об'єктом, що уточнюють властивості якого визначають шрифт (назва, розмір, колір, спосіб оформлення), використовуваний для виводу на поверхню полотна тексту

 Об'єкт Реn є властивістю об'єкту Canvas. Властивості об'єкту Реn (таблиця. П.27) визначають колір, стиль і товщину ліній, що викреслюються методами виведення графічних примітивів.

Таблиця П.27. Властивості об'єкту Реn

Властивість

Опис

Color

Колір лінії (clblack — чорний; clmaroon — каштановий; clgreen — зелений; clolive— оливковий; clnavy— темно-синій; clpurple — рожевий; clteal — зелено-блакитний; clgray— сірий; clsilver— сріблястий; clred — червоний; cllime — салатний; clblue — синій; clfuchsia — яскраво-рожевий; claqua — бірюзовий; clwhite — білий)

Style

Стиль (вигляд) лінії. Лінія може бути: pssolid— суцільна; psdash — пунктирна (довгі штрихи); psdot — пунктирна (короткі штрихи); psdashdot — пунктирна (чергування довгого і короткого штрихів); psdashdotdot — пунктирна (чергування одного довгого і двох коротких штрихів); psclear— не відображається (використовується, якщо не треба зображати межу, наприклад, прямокутника)

Width

Товщина лінії задається в пікселах. Товщина пунктирної лінії не може бути більше 1

Об'єкт Brush є властивістю об'єкту Canvas. Властивості об'єкту Brush (таблиця. П.28) визначають колір, стиль зафарбовування внутрішніх областей контурів, що викреслюються методами виведення графічних примітивів.

Таблиця П.28. Властивості об'єкту Brush

Властивість

Визначає

Color

Колір закрашення замкнутої області

Style

Стиль (тип) заповнення області (bssolid— суцільна заливка; bsclear— область не закрашується; bshorizontal— горизонтальне штрихування; bsvertical— вертикальне штрихування; bsfdiagonal — діагональне штрихування з нахилом ліній вперед; bsbdiagonal — діагональне штрихування з нахилом ліній назад; bscross — горизонтально-вертикальне штрихування, в клітку; bsdiagcross — діагональне штрихування, в клітку)

Математичні функції

Таблиця П.30. Математичні функції

Функція

Значення

abs (n)

Абсолютне значення n

sqrt (n)

Квадратний корінь з n

exp(n)

Експонента n

random [VI 9] (n)

Випадкове ціле число в діапазоні від 0 до п-1 (перед першим зверненням до функції необхідно викликати функцію randomize (), яка виконає ініціалізацію програмного генератора випадкових чисел)

sin (a)

Синус вираженого в радіанах кута а

cos (a)

Косинус вираженого в радіанах кута а

tan (a)

Тангенс вираженого в радіанах кута а

asin(n)

Кут (у радіанах), синус якого рівний n

acos (n)

Кут (у радіанах), косинус якого рівний n

atan(n)

Кут (у радіанах), тангенс якого рівний n

Звернете увагу: для того, щоб в програмі були доступні приведені функції, в її текст треба включити директиву #include <math.n>.

Величина кута тригонометричних функцій має бути виражена в радіанах. Для перетворення величини кута з градусів в радіани використовується формула (а -3.1415256) / 180, де а— величина кута в градусах; 3.1415926— числа "пі". Замість константи 3.1415926 можна використовувати стандартну іменовану константу M_pi. Константа M_pi визначена у файлі math.h.

Таблиця П.33. Події

Подія

Відбувається

Onclick

При клацанні кнопкою миші

Ondblclick

При подвійному клацанні кнопкою миші

Onmousedown

При натисненні кнопки миші

Onmouseup

При відпуску кнопки миші

Onmousemove

При переміщенні миші

Onkeypress

При натисненні клавіші клавіатури

Onkeydown

При натисненні клавіші клавіатури. Події Onkeydown і Onkeypress — це події, що чергуються, повторюються, які відбуваються до тих пір, поки не буде відпущена утримувана клавіша (у цей момент відбувається подія Onkeyup)

Onkeyup

При відпуску натиснутої клавіші клавіатури

Oncreate

При створенні об'єкту (форми, елементу управління). Процедура обробки цієї події зазвичай використовується для ініціалізації змінних, виконання підготовчих дій

Onpaint

При появі вікна на екрані на початку роботи програми, після появи частини вікна, яка, наприклад, була закрита іншим вікном і в інших випадках. Подія повідомляє про необхідність відновити (перемальовувати) вікно

Onenter

При отриманні елементом управління фокусу

Onexit

При втраті елементом управління фокусу

Методи виведення графічних примітивів розглядають властивість canvas як деяке абстрактне полотно, на якому вони можуть малювати (Canvas переводиться як "поверхня", "полотно для малювання"). Полотно складається з окремих крапок — пікселів. Положення піксела на поверхні полотна характеризується горизонтальною (X) і вертикальною (Y) координатами. Координати зростають зверху вниз і зліва направо. Лівий верхній піксел поверхні форми (клієнтській області) має координати (0, 0), правий ніжній — (ciientwidth, clientheight). Доступ до окремого піксела здійснюється через властивість Pixels що є двовимірним масивом, елементи якого містять інформацію про колір точок полотна.

Слід звернути увагу на важливий момент. Зображення, сформоване на поверхні форми, може бути зіпсоване, наприклад, в результаті повного або часткового перекриття вікна програми іншим вікном. Тому програміст повинен поклопотатися про те, щоб у момент появи вікна програма перемальовувала зіпсоване зображення. На щастя, операційна система Windows інформує програму про необхідність перемальовування вікна, посилаючи їй відповідне повідомлення, внаслідок чого виникає подія Onpaint. Подія Onpaint виникає і у момент запуску програми, коли вікно з'являється на екрані вперше. Таким чином, інструкції, що забезпечують виведення графіки на поверхню форми, треба помістити у функцію обробки події onpaint.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]