Математичні основи комп’ютерної графіки

Базові растрові алгоритми зображення прямої лінії та різних фігур. Математичні основи векторної та фрактальної графіки. Автоматизована система генерування геометричних фігур (коло, прямокутник). Створення повноцінної віконної процедури рисування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 25.09.2018
Размер файла 1,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http: //www. allbest. ru/

Міністерство освіти і науки України

Національний університет «Львівська політехніка»

Кафедра інформаційних систем та мереж

Пояснювальна записка до розрахунково-графічної роботи

З дисципліни «Комп'ютерна графіка»

на тему:

«Математичні основи комп'ютерної графіки»

Виконала:

студентка групи СА-32

Катеринчук Т.А.

Прийняв: доцент кафедри ІСМ

Василюк А. С.

Львів 2018

Зміст

  • Вступ
  • Завдання до розрахункової роботи
  • Індивідуальне завдання
  • 1. Теоретична частина. Математичні основи комп'ютерної графіки
    • 1.1 Базові растрові алгоритми
      • 1.1.1 Алгоритм зображення прямої лінії
      • 1.1.2 Алгоритм зображення фігур
    • 1.2 Математичні основи векторної графіки
    • 1.3 Алгоритми фрактальної графіки
  • 2. Практична частина
    • 2.1 Назва програми
    • 2.2. Призначення програми
    • 2.3 Логічна структура програми
      • 2.3.1 Файл створення повноцінної віконної процедури
      • 2.3.2 Файл рисування прямокутника
      • 2.3.3 Файл рисування кола
    • 2.4 Інструкція користувачеві
    • 2.5 Опрацювання помилок
    • 2.6 Контрольний приклад програми
  • Висновок
  • Список використаної літератури
  • Додаток

Вступ

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

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

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

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

Завдання до розрахункової роботи

Викласти теоретичні положення згідно із темою.

Завдання практичної складової.

Розв'язок повинен містити:

· Постановку задачі та можливі шляхи її розв'язання;

· Опис використаного методу вирішення та його обгрунтування;

· Вимоги до апаратної частини програмного комплексу;

· Алгоритм роботи програми побудований згідно із вимогами ЄСПД;

· Детальний опис системи та особливості функціонування;

· Скріншоти вікон та коди Інтернет-ресурсу;

· Електронний варіант ресурсу.

Індивідуальне завдання

Теоретична частина: «Математичні основи комп'ютерної графіки».

Практична частина: Розробити автоматизовану систему генерування геометричних фігур (коло, прямокутник) з довільними розмірами. Передбачити можливість вибору необхідної геометричної фігури у меню.

1. Теоретична частина. Математичні основи комп'ютерної графіки

1.1 Базові растрові алгоритми

1.1.1 Алгоритм зображення прямої лінії

Розглянемо растрові алгоритми для відрізків прямої лінії. Припустимо, що задані координати (х1, y1 - х2, у2) кінців відрізка прямої. Для виведення лінії необхідно зафарбувати певним кольором всі пікселі вздовж лінії. Для того щоб зафарбувати будь-який піксель, необхідно знати його координати.

Найбільш просто намалювати відрізок горизонтальної лінії. Обчислення поточних координат пікселя виконується як приріст по x (необхідно, щоб х1 ? х2), а вивід пікселя забезпечується спеціальною функцією. Аналогічно малюється відрізок вертикалі. У циклі виведення горизонтального і вертикального відрізків виконуються найпростіші операції - приріст на одиницю, перевірка на «<=» та запис пікселя в буфер растра. Тому операція малювання таких відрізків виконується швидко і просто. Її використовують як базову операцію для інших операцій, наприклад, в алгоритмах заповнення полігонів.

Горизонталі і вертикалі являють собою окремий випадок ліній. Розглянемо лінію загального вигляду. Для неї також необхідно обчислювати координати будь-якого пікселя.

Нехай задані координати кінцевих точок відрізка прямої. Знайдемо координати точки всередині відрізка. Запишемо співвідношення катетів для подібних прямокутних трикутників:

(1.1)

Перепишемо це співвідношення як x = f(y):

(1.2)

а також як

(1.3)

Залежно від кута нахилу прямої виконується цикл по осі х або по y (Рис.1.1).

Рис.1.1 Відрізок прямої

Позитивні риси прямого обчислення координат:

· Простота, ясність обчислення координат.

· Можливість роботи з нецілим значенням координат відрізка.

Недоліки:

· Використання операцій із плаваючою крапкою або цілочисельних операцій множення і ділення обумовлює малу швидкість.

Брезенхем запропонував підхід, що дозволяє розробляти так звані інкрементні алгоритми растеризації. Основною метою при розробці таких алгоритмів була побудова циклів обчислення координат на основі тільки цілочисельних операцій додавання/віднімання без використання множення і ділення. Були розроблені інкрементні алгоритми не тільки для прямих, але і для кривих ліній.

Інкрементні алгоритми виконуються як послідовне обчислення координат сусідніх пікселів шляхом додавання збільшень координат. Прирости розраховуються на основі аналізу функції похибки. У циклі виконуються тільки цілочисельні операції порівняння і додавання/віднімання.

Відрізок малюється між двома точками -- (x0,y0) і (x1,y1), де в цих парах вказано стовпець і рядок, відповідно, номера яких збільшуються вправо і вниз. З початку приймемо, що лінія «йде» вниз і направо, причому горизонтальна відстань x1 - x0 більша від вертикальної y1 - y0, тобто нахил лінії від горизонталі -- менше 45°. Наша мета, щоб для кожного стовпця між x0 і x1, визначити, який рядок y найближче до лінії, і намалювати точку (x,y).

Загальна формула лінії між двома точками:

(1.4)

Так як відомо стовпець x, то рядок y, який отримується округленням до цілого наступного значення:

(1.5)

Але обчислювати точне значення цього виразу нема необхідності, достатньо зазначити, що y збільшується від y0 і за кожен крок ми додаємо до x одиницю і додаємо до y значення нахилу:

(1.6)

яке можна попередньо обчислити. Більше того, на кожному кроці ми робимо одне з двох: або зберігаємо той же y, або збільшуємо його на 1.

Що з цих двох вибрати можна вирішити, відслідковуючи значення похибки, яке означає вертикальну відстань між поточним значенням y і точним значенням y для поточного x. Кожен раз, коли ми збільшуємо x, ми збільшуємо значення похибки на величину нахилу s. Якщо похибка перебільшує 0.5, лінія стала ближче до наступного y, тому ми збільшуємо y на одиницю, одночасно зменшуючи значення похибки на 1.

1.1.2 Алгоритм побудови кривих Безьє

Криві Безьє описуються в параметричній формі: x = Px(t), y = Py(t). Значення t виступає як параметр, якому відповідають координати окремої точки лінії. Параметрична форма опису може бути зручнішою для деяких кривих, ніж задання у вигляді функції у=ѓ(х), оскільки функція ѓ(х) може бути набагато складнішою, ніж Px(t) і Py(t), крім того, ѓ(x) може бути неоднозначною.

Многочлени Безьє для Px і Py мають такий вигляд:

(1.7)

де xi і yi - координати точок-орієнтирів Рi, а величини - це відомі з комбінаторики, так звані поєднання (вони також відомі як коефіцієнти бінома Ньютона):

(1.9)

Розглянемо криві Безьє, класифікуючи їх за значеннями m:

· m=1 (по двох точках) крива вироджується у відрізок прямої лінії, яка визначається кінцевими точками Р0 і Р1, як показано на Рис. 1.2.

(1.10)

Рис.1.2 Крива Безьє (m=1)

· m=2 (по трьох точках, Рис. 1.3.):

(1.11)

Рис.1.3 Крива Безьє (m=2)

· m=3 (по чотирьох точках, Рис. 1.4.). Використовується досить часто, особливо в сплайнових кривих:

(1.12)

Рис.1.4 Кубічні криві Безьє (m=3)

Геометричний алгоритм для кривої дозволяє обчислити координати (х, у) точки кривої Безьє позначенню параметра t.

1. Кожна сторона контуру багатокутника, який проходить по точках-орієнтирах, ділиться пропорційно значенню t.

2. Точки розподілу з'єднуються відрізками прямих і утворюють новий багатокутник. Кількість вузлів нового контуру на одиницю менша, ніж кількість вузлів попереднього контуру.

3. Сторони нового контуру знову діляться пропорційно значенню t. І так далі. Це продовжується до тих пір, поки не буде отримана єдина точка розподілу. Ця точка і буде точкою кривої Безьє (Рис.1.5).

Рис.1.5 Геометричний алгоритм для кривих Безьє

1.1.3 Алгоритм зображення фігур

Фігурою тут будемо вважати плоский геометричний об'єкт, який складається з ліній контуру і точок заповнення, які поміщаються всередині контуру. контурів може бути кілька - наприклад, якщо об'єкт має усередині пустоти (Рис.1.6).

Рис.1.6 Фігура яка усередині має пустоти

У деяких графічних системах одним об'єктом може вважатися й більш складна багатоконтурна фігура - сукупність островів з пустотами. Графічне виведення фігур ділиться на два завдання: виведення контуру й виведення точок заповнення. Оскільки контур являє собою лінію, то виведення контуру проводиться на основі алгоритмів виводу ліній. Залежно від складності контуру, це можуть бути відрізки прямих, кривих або довільна послідовність сусідніх пікселів.

Для виведення точок заповнення відомі методи, які поділяються залежно від використання контуру на два типи: алгоритми зафарбовування від внутрішньої точки до границь довільного контуру і алгоритми, які використовують математичний опис контуру.

Розглянемо алгоритми зафарбовування довільного контуру, який вже намальований в растрі. Спочатку визначаються координати довільного пікселя, що знаходиться всередині окресленого контуру фігури. Колір цього пікселя змінюємо на потрібний колір заповнення. Потім проводиться аналіз квітів усіх сусідніх пікселів. Якщо колір деякого сусіднього пікселя НЕ дорівнює кольору границі контуру або кольору заповнення, то колір цього пікселя змінюється на колір заповнення. Потім аналізується колір пікселів, сусідніх з попередніми. І так далі, поки всередині контуру всі пікселі і НЕ перефарбуються в колір заповнення. Пікселі контуру утворюють межу, за яку не можна виходити в ході послідовного перебору всіх сусідніх пікселів. Сусідніми можуть вважатися тільки чотири пікселя або вісім пікселів (восьми-зв'язність).

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

Рис.1.7 Алгоритм зафарбовування лініями

Математичним описом контуру фігури може служити рівняння у=f(x) для контуру кола, еліпса або іншої кривої. Для багатокутника (полігону) контур задається безліччю координат вершин (хi, уi). Можливі й інші форми опису контуру. Спільним для розглянутих алгоритмів є те, що для генерації точок заповнення не потрібні попередньо сформовані в растрі пікселі контуру фігури. Контур може взагалі не малюватися в растрі ні до, ні після заповнення.

1.2 Математичні основи векторної графіки

Якщо основним елементом растрової графіки є піксель (точка), то у випадку векторної графіки в ролі базового елементу виступає лінія. Це пов'язано з тим, що в векторній графіці будь-який об'єкт складається з набору ліній, з'єднаних між собою вузлами. Окрема лінія, що з'єднує сусідні вузли, називається сегментом (в геометрії їй відповідає відрізок). Сегмент може бути заданий за допомогою рівняння прямої або рівняння кривої лінії, що вимагають для свого опису різної кількості параметрів.

У векторній графіці точці відповідає вузол. На площині цей об'єкт представляється двома числами (x, y), що задають його положення щодо початку координат.

Для опису прямої лінії використовується рівняння

Y = аХ + b. (1.13)

Тому для побудови даного об'єкта потрібно задати всього два параметри: а і b. Результатом буде побудова нескінченної прямої в декартових координатах. На відміну від прямої, відрізок прямої вимагає для свого опису двох додаткових параметрів, що відповідають початку і кінцю відрізка (наприклад, х1 і х2).

До класу кривих другого порядку відносяться параболи, гіперболи, еліпси і кола, тобто всі лінії, рівняння яких містять змінні в степені не вище другої. У векторній графіці ці криві використовуються для побудови базових форм (примітивів) у вигляді еліпсів і кіл.

Криві другого порядку не мають точок перегину. Використовуване для опису цих кривих канонічне рівняння, яке вимагає для свого завдання п'яти параметрів:

(1.14)

Для побудови відрізка кривої потрібно задати два додаткові параметри.

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

Рис.1.8 Представлення кривої третього порядку в класичному виді та у вигляді кривої Безьє

Слід зазначити, що згадані раніше прямі і криві другого порядку є окремим випадком кривих третього порядку. Канонічне рівняння, яке використовується для опису рівняння третього порядку, вимагає для свого завдання дев'яти параметрів:

. (1.15)

Для опису відрізка кривої третього порядку потрібно на два параметри більше.

Криві Безьє - це окремий вид кривих третього порядку, що вимагає для свого опису меншої кількості параметрів - восьми замість одинадцяти. В основі побудови кривих Безьє лежить використання двох дотичних, проведених до крайніх точок відрізка лінії (Рис. 1.8, праворуч). На кривизну (форму) лінії впливає кут нахилу і довжина відрізка дотичної, значеннями яких можна управляти в інтерактивному режимі шляхом перетягування їх кінцевих точок. Таким чином, дотичні виконують функції віртуальних важелів, що дозволяють керувати формою кривої.

1.4 Алгоритми фрактальної графіки

В даний час алгоритми, використовувані для генерації зображень фрактальної графіки, знаходять застосування і в традиційних видах комп'ютерної графіки: растрової та векторної. Фрактал можна визначити як об'єкт досить складної форми, який отриманий в результаті виконання простого ітераційного циклу. Ітераційність, рекурсивність - це процедури створення фракталів, які обумовлюють такі їх властивості, як самоподібність - окремі частини схожі за формою на весь фрактал в цілому. Латинське fractus означає «складено з фрагментів».

Фракталом Мандельброта названа фігура, яка породжується дуже простим циклом. Для створення цього фрактала необхідно для кожної точки зображення виконати цикл ітерацій відповідно до формули:

(1.16)

де k = 0, 1, ..., n. Величини zk - це комплексні числа,

zk = хk + 1уk,

причому стартові значення х0 і у0 - це координати точки зображення. Для кожної точки зображення ітерації виконуються обмежену кількість разів (n) або до тих пір, поки модуль числа zk не перевищує 2. Модуль комплексного числа дорівнює кореню квадратному з х2+у2. Для обчислення квадрата величини zk можна скористатися формулою

z2=(x+iy)(x+iy)=x2-у2+і2xy.

Цикл ітерацій для фрактала Мандельброта можна виконувати в діапазоні x = (-2. 2; 1), у = (-1. 2; 1. 2). Для того щоб отримати зображення в растрі, необхідно перераховувати координати цього діапазону в піксельні (Рис.1.9).

Рис.1.9 Фрактал Мандельброта

Розглянемо ще один різновид фракталів, названих геометричними, оскільки їх форма може бути описана як послідовність простих геометричних операцій. Наприклад, крива Коха стає фракталом в результаті нескінченної кількості ітерацій, в ході яких виконується поділ кожного відрізка прямої на три частини. На Рис.1.10 показані три ітерації - поступово лінія стає схожою на сніжинку.

Рис.1.10 Геометричні інтерпретації для кривої Коха

Наступну групу складають фрактали, які генеруються відповідно до методу «систем ітеративних функцій» - IFS (Iterated Functions Systems). Цей метод може бути описаний, як послідовний ітеративний розрахунок координат нових точок у просторі:

(1.17)

де Fx і Fy - функції перетворення координат, наприклад, афінного перетворення. Ці функції обумовлюють форму фрактала. У разі афінного перетворення необхідно знайти відповідні числові значення коефіцієнтів.

Метод IFS використовується не тільки для створення зображень. його використовували Барнслі і Слоан для ефективного стиснення графічних зображень при записі у файл. Основна ідея така: оскільки фрактали можуть представляти дуже складні зображення за допомогою простих ітерацій, то опис цих ітерацій вимагає значно меншого обсягу інформації, ніж відповідні растрові зображення. Для кодування зображень необхідно вирішувати зворотну задачу - для зображення (або його фрагмента) підібрати відповідні коефіцієнти афінного перетворення. Цей метод використовується для запису кольорових фотографій у файли зі стисненням в десятки і сотні разів без помітного погіршення зображення. Формат таких графічних файлів був названий FIF (Fractal Image Format) і запатентований фірмою IteratedSystems.

2. Практична частина

2.1 Назва програми

Автоматизована система генерування геометричних фігур (коло, прямокутник).

2.2 Призначення програми

Дана програма призначена для генерування геометричних фігур (коло, прямокутник) з довільними розмірами.

Передбачено можливість вибору фігури у меню.

2.3 Логічна структура програми

Програма написана на мові програмування С++, засобами Win32 API.

Розроблена програма містить такі файли:

2.3.1 Файл створення повноцінної віконної процедури

rhr_comp_grafic.cpp/ Даний файл містить такі функції:

1) int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) - функція початкової точки.

2) int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow) - визначена функція віконної процедури.

3) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) - функція обробки отриманих прикладних повідомлень.

2.3.2 Файл рисування прямокутника

Rectangel.h

Даний файл містить такі функції:

1) void ToLine(HDC hdc, int x1, int y1, int x2, int y2) - рисування лінії за допомогою алгоритму цифровий диференціальний аналізатор (Рис.2.1).

векторний графіка фігура автоматизований

Рис.2.1 Блок-схема до функції рисування лінії

2) void NewRectangel(HDC hdc,int l,int w,int x,int y) - рисування прямокутника шляхом виклику функції рисування лінії 4 рази.

3) int Sign(double x) - функція, що повертає -1, 0, 1 для від'ємного, нульового і додатнього аргументу відповідно.

2.3.3 Файл рисування кола

Circle.h

Містить функцію рисування кола void Circle(HDC hdc, int x1, int y1, double R), яка побудована за допомогою алгоритму Брезенхема (Рис.2.2).

Рис.2.2 Блок-схема до функції рисування кола

2.4 Інструкція користувачеві

При запуску програми вмикається головне вікно (Рис.2.3).

Рис.2.3 Головне вікно

У головному меню є два пункти: «Фігури» та «Допомога». Натиснувши «Допомога» відкриється вікно з короткою інструкцією користування програми (Рис.2.4). Щоб вийти з вікна «Допомога» потрібно натиснути на кнопку «ОК» або хрестик у правому верхньому кутку вікна.

Рис.2.4 Вікно допомоги

У меню «Фігури» є два пункти: «Коло» та «Прямокутник» (Рис.2.5).

Рис.2.5 Пункти меню «Фігура»

При натисненні на пункт «Прямокутник» з'являється два поля для введення даних, такі як довжина та ширина прямокутника та клавіша «Згенерувати» (Рис.2.6).

Рис.2.6 Головне вікно після натиснення на пункт «Прямокутник»

Вказавши довжину та ширину прямокутника (наприклад 100 і 50), потрібно натиснути кнопку «Згенерувати» (Рис.2.7). За замовчуванням фігура побудується посередині вікна, щоб змінити центр фігури потрібно натиснути лівою кнопкою миші на новий центр (Рис.2.8).

Рис.2.7 Нарисований прямокутник у центрі вікна

Рис.2.8 Нарисований квадрат з зміщеним центром

При натисненні в меню на пункт «Коло» з'являється одне поле для введення радіуса та клавіша «Згенерувати» (Рис.2.9).

Рис.2.9 Головне вікно після натиснення на пункт «Коло»

Вказавши радіус кола (наприклад 200), потрібно натиснути кнопку «Згенерувати» (Рис.2.10). За замовчуванням фігура побудується посередині вікна, щоб змінити центр фігури потрібно натиснути лівою кнопкою миші на новий центр (Рис.2.11).

Рис.2.10 Нарисоване коло у центрі вікна

Рис.2.11 Нарисоване коло з зміщеним центром

При натисненні «Вихід» програма закривається.

2.5 Опрацювання помилок

Працюючи з даною програмою користувач може зробити декілька помилок, в результаті чого отримає відповідне виведення на екрані.

При натисненні клавіші «Згенерувати», коли поле «Довжина прямокутника» пусте (Рис.2.12).

Рис.2.12 Помилка пустоти поля «Довжина прямокутника»

При натисненні клавіші «Згенерувати», коли поле «Ширина прямокутника» пусте (Рис.2.13).

Рис.2.13 Помилка пустоти поля «Ширина прямокутника»

При натисненні клавіші «Згенерувати», коли поле «Радіус кола» пусте (Рис.2.14).

Рис.2.14 Помилка пустоти поля «Радіус кола»

У таких випадках потрібно натиснути на клавішу «ОК» та переконатися що поле «Довжина прямокутника»/ «Ширина прямокутника»/ «Радіус кола» не пусте.

При натисненні клавіші «Згенерувати», коли у полі «Довжина прямокутника» значення некоректно введене (Рис.2.15).

Рис.2.15 Помилка некоректного значення в полі «Довжина прямокутника»

При натисненні клавіші «Згенерувати», коли у полі «Ширина прямокутника» значення некоректно введене (Рис.2.16).

Рис.2.16 Помилка некоректного значення в полі «Ширина прямокутника»

При натисненні клавіші «Згенерувати», коли у полі «Радіус кола» значення некоректно введене (Рис.2.17).

Рис.2.17 Помилка некоректного значення в полі «Радіус кола»

У таких випадках потрібно натиснути на клавішу «ОК» та переконатися що у полі «Довжина прямокутника»/ «Ширина прямокутника»/ «Радіус кола» значення вказано тільки числами.

2.6 Контрольний приклад програми

Використаємо програму для побудови кола з радіусом сто та зміщеним центром (Рис.2.18).

Рис.2.18 Результат виконання програми

Програма побудувала коло з радіусом сто та зміщеним центром, отже, програма працює вірно.

Висновок

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

У даній роботі описано математичні основи комп'ютерної графіки: векторної, растрової та фрактальної. Розроблено автоматизовану систему генерування геометричних фігур з довільними розмірами. Програма може завантажуватись і виконуватись під управлінням будь-якої операційної системи Windows. Управління програмою реалізоване за допомогою миші і відповідає програмному інтерфейсу.

Список використаної літератури

1. Роджерс Д., Адамс Дж. Математические основы машинной графики. М. : Машиностроение. - 1980. - 552 с.

2. Блінова Т. О. Комп'ютерна графіка / Блінова Т. О., Порєв В. М. - К. : Юніор, 2004. - 456 с.

3. Богуславский А. А. С++ и компьютерная графика / А. А. Богуславский. - М. : Компьютер Пресс, 2003. - 352 с.

4. Маценко В.Г. Комп'ютерна графіка: Навчальний посібник. - Чернівці: Рута, 2009 - 343 с.

Додаток 1

Код програми:

Файл rhr_comp_grafic.сpp

// rhr_comp_grafic.cpp : Defines the entry point for the application.

//

#include "stdafx.h"

#include "rhr_comp_grafic.h"

#include "Circle.h"

#include "Rectangel.h"

#include <math.h>

#define _CRT_SECURE_NO_WARNINGS

#define MAX_LOADSTRING 100

#define ID_EDIT1 1003

#define ID_EDIT2 1004

#define ID_BUTTON 1005

HWND hEdit1, hEdit2, hButton;

// Global Variables:

HINSTANCE hInst; // current instance

WCHAR szTitle[MAX_LOADSTRING]; // The title bar text

WCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

// Forward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,

_In_opt_ HINSTANCE hPrevInstance,

_In_ LPWSTR lpCmdLine,

_In_ int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: Place code here.

// Initialize global strings

LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadStringW(hInstance, IDC_RHR_COMP_GRAFIC, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_RHR_COMP_GRAFIC));

MSG msg;

// Main message loop:

while (GetMessage(&msg, nullptr, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return (int) msg.wParam;

}

//

// FUNCTION: MyRegisterClass()

//

// PURPOSE: Registers the window class.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEXW wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_RHR_COMP_GRAFIC));

wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_RHR_COMP_GRAFIC);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassExW(&wcex);

}

//

// FUNCTION: InitInstance(HINSTANCE, int)

//

// PURPOSE: Saves instance handle and creates main window

//

// COMMENTS:

//

// In this function, we save the instance handle in a global variable and

// create and display the main program window.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

hInst = hInstance; // Store instance handle in our global variable

HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

if (!hWnd)

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

//

// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)

//

// PURPOSE: Processes messages for the main window.

//

// WM_COMMAND - process the application menu

// WM_PAINT - Paint the main window

// WM_DESTROY - post a quit message and return

//

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

HMENU hMainMenu = CreateMenu();

HMENU hPopMenuFile1 = CreatePopupMenu();

RECT rect;

static int lWindow=0, wWindow=0;

static int xWindow=0, yWindow=0;

const wchar_t *lengthName = { L"Довжина: " };

const wchar_t *widthName = { L"Ширина: " };

const wchar_t *rName = { L"Радіус: " };

wchar_t length[4] = L"";

const wchar_t *textHelp = { L"Дана програма - це автоматизована система генерування фігур (коло, прямокутник) з довільними розмірами. У меню можна вибрати необхідну геометричну фігуру. Після вибору фігури з'являються поля(поле), де потрібно вказати розміри вашої фігури та натиснути на кнопку Згенерувати. За замовчування фігура будується в центрі екрану. Щоб змінити центр фігури потрібно натиснути лівою кнопкою миші на новий центр." };

wchar_t width[4] = L"";

wchar_t r[4] = L"";

static int choice = 0;

int lengthNumber=0, widthNumber=0, rNumber=0;

switch (message)

{

case WM_CREATE: {

//Створення меню

AppendMenu(hMainMenu, MF_STRING | MF_POPUP, (UINT)hPopMenuFile1, L"Фігури");

AppendMenu(hPopMenuFile1, MF_STRING, 1001, L"Прямокутник");

AppendMenu(hPopMenuFile1, MF_STRING, 1002, L"Коло");

AppendMenu(hMainMenu, MF_STRING | MF_POPUP, 1006, L"Допомога");

SetMenu(hWnd, hMainMenu);

SetMenu(hWnd, hPopMenuFile1);

}

break;

case WM_COMMAND:

{

//Оновлення меню

AppendMenu(hMainMenu, MF_STRING | MF_POPUP, (UINT)hPopMenuFile1, L"Фігури");

AppendMenu(hPopMenuFile1, MF_STRING, 1001, L"Прямокутник");

AppendMenu(hPopMenuFile1, MF_STRING, 1002, L"Коло");

AppendMenu(hMainMenu, MF_STRING | MF_POPUP, 1006, L"Допомога");

SetMenu(hWnd, hMainMenu);

SetMenu(hWnd, hPopMenuFile1);

int wmId = LOWORD(wParam);

// Parse the menu selections:

switch (wmId)

{

case 1001://Кнопка "Прямокутник" у меню

UpdateWindow(hWnd);

choice = 1;

CheckMenuItem(hPopMenuFile1, 1001, MF_CHECKED);

CheckMenuItem(hPopMenuFile1, 1002, MF_UNCHECKED);

hdc = GetDC(hWnd);

//Очищення області вікна

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, CreateSolidBrush(RGB(255, 255, 255)));

//Присвоєння змінним довжина і ширина прямокутника пустого значення

for (int i = 0; i < 4; i++) {

length[i] = NULL;

width[i] = NULL;

}

TextOut(hdc, 5, 10, lengthName, _tcsclen(lengthName));//Вивід текста "Довжини прямокутника"

hEdit1 = CreateWindow(L"edit", (LPWSTR)length, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 10, 50, 20, hWnd, (HMENU)ID_EDIT1, hInst, NULL);//Створення поля для вводу довжини прямокутника

TextOut(hdc, 5, 40, widthName, _tcsclen(widthName));//Вивід текста "Ширини прямокутника"

hEdit2 = CreateWindow(L"edit", (LPWSTR)width, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 40, 50, 20, hWnd, (HMENU)ID_EDIT2, hInst, NULL);//Створення поля для вводу ширини ппрямокутника

hButton = CreateWindow(L"button", L"Згенерувати", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 80, 100, 20,

hWnd, (HMENU)ID_BUTTON, hInst, 0);//Створення клавіші "Згенерувати"

SetMenu(hWnd, hMainMenu);

SetMenu(hWnd, hPopMenuFile1);

break;

case 1002://Кнопка "Коло" у меню

UpdateWindow(hWnd);

choice = 2;

CheckMenuItem(hPopMenuFile1, 1002, MF_CHECKED);

CheckMenuItem(hPopMenuFile1, 1001, MF_UNCHECKED);

hdc = GetDC(hWnd);

//Очищення області вікна

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, CreateSolidBrush(RGB(255, 255, 255)));

//Присвоєння змінній радіус кола пустого значення

for (int i = 0; i < 4; i++) {

r[i] = NULL;

}

TextOut(hdc, 5, 10, rName, _tcsclen(rName));//Вивід текста "Радіус кола"

hEdit1 = CreateWindow(L"edit", (LPWSTR)r, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 10, 50, 20, hWnd, (HMENU)ID_EDIT1, hInst, NULL);//Створення поля для вводу радіуса кола

hButton = CreateWindow(L"button", L"Згенерувати", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 80, 100, 20,

hWnd, (HMENU)ID_BUTTON, hInst, 0);//Створення клавіші "Згенерувати"

SetMenu(hWnd, hMainMenu);

SetMenu(hWnd, hPopMenuFile1);

break;

case 1006://Кнопка "Допомога" у меню

hdc = GetDC(hWnd);

MessageBox(hWnd,textHelp,L"Допомога", MB_OK);//Вивід вікна з короткою інструкцією програми

break;

case 1005://Кнопка "Згенерувати"

hdc = GetDC(hWnd);

//Якщо користувач не змінив центр фігури, то центр фігури буде центр вікна

if(xWindow==0)

xWindow = lWindow / 2; //Координати

if(yWindow==0)

yWindow = wWindow / 2; //центра вікна

//Очищення області вікна

GetClientRect(hWnd, &rect);

FillRect(hdc, &rect, CreateSolidBrush(RGB(255, 255, 255)));

if (choice == 1) {//Якщо у меню вибраний прямокутник

GetDlgItemText(hWnd, ID_EDIT1, (LPWSTR)length, 4);//Запис у змінну значення довжини прямокутника

GetDlgItemText(hWnd, ID_EDIT2, (LPWSTR)width, 4);//Запис у змінну значення ширини прямокутника

TextOut(hdc, 5, 10, lengthName, _tcsclen(lengthName));//Вивід текста "Довжини прямокутника"

hEdit1 = CreateWindow(L"edit", (LPWSTR)length, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 10, 50, 20, hWnd, (HMENU)ID_EDIT1, hInst, NULL);//Вивід поля для вводу довжини прямокутника

TextOut(hdc, 5, 40, widthName, _tcsclen(widthName));//Вивід текста "Ширини прямокутника"

hEdit2 = CreateWindow(L"edit", (LPWSTR)width, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 40, 50, 20, hWnd, (HMENU)ID_EDIT2, hInst, NULL); //Вивід поля для вводу ширини ппрямокутника

hButton = CreateWindow(L"button", L"Згенерувати", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 80, 100, 20,

hWnd, (HMENU)ID_BUTTON, hInst, 0);//Вивід клавіші "Згенерувати"

//Помилка, якщо не вказана довжина прямокутника

if (_tcsclen(length) == 0) {

MessageBox(hWnd, L"Не вказана довжина прямокутника.", L"Помилка", MB_OK);

break;

}

//Помилка, якщо не вказана ширина прямокутника

if (_tcsclen(width) == 0) {

MessageBox(hWnd, L"Не вказана ширина прямокутника.", L"Помилка", MB_OK);

break;

}

//Перевід значення довжини прямокутника в числовий формат

for (int i = _tcsclen(length); i >= 0; i--) {

if (length[i] >= 48 && length[i] <= 57)

lengthNumber = lengthNumber + (length[i] - '0')*pow(10, _tcsclen(length) - i - 1);

else if(length[i]!=NULL){//Помилка, якщо значення довжини прямокутника вказане некоректно

MessageBox(hWnd, L"Помилка в написанні значення довжини прямокутника. Довжина прямокутника має вказуватися тільки числами.", L"Помилка", MB_OK);

break;

}

}

//Перевід значення ширини прямокутника в чиловий формат

for (int i = _tcsclen(width); i >= 0; i--) {

if (width[i] >= 48 && width[i] <= 57)

widthNumber = widthNumber + (width[i] - '0')*pow(10, _tcsclen(width) - i - 1);

else if(width[i]!=NULL){//Помилка, якщо значення ширини прямокутника вказане некоректно

MessageBox(hWnd, L"Помилка в написанні значення ширини прямокутника. Ширина прямокутника має вказуватися тільки числами.", L"Помилка", MB_OK);

break;

}

}

NewRectangel(hdc,lengthNumber,widthNumber,xWindow,yWindow);//Виклик функції побудови прямокутника

}

else if (choice == 2) {//Якщо у меню вибране коло

GetDlgItemText(hWnd, ID_EDIT1, (LPWSTR)r, 4);//Запис у змінну значення радіуса кола

TextOut(hdc, 5, 10, rName, _tcsclen(rName));//Вивід текста "Радіус кола"

hEdit1 = CreateWindow(L"edit", (LPWSTR)r, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,

90, 10, 50, 20, hWnd, (HMENU)ID_EDIT1, hInst, NULL);//Вивід поля для вводу радіуса кола

hButton = CreateWindow(L"button", L"Згенерувати", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 80, 100, 20,

hWnd, (HMENU)ID_BUTTON, hInst, 0);//Вивід клавіші "Згенерувати"

//Помилка, якщо не вказаний радіус прямокутника

if (_tcsclen(r) == 0) {

MessageBox(hWnd, L"Не вказаний радіус кола.", L"Помилка", MB_OK);

break;

}

//Перевід значення радіуса кола в числовий формат

for (int i = _tcsclen(r); i >= 0; i--) {

if (r[i] >= 48 && r[i] <= 57)

rNumber = rNumber + (r[i] - '0')*pow(10, _tcsclen(r) - i - 1);

else if (r[i] != NULL) {//Помилка, якщо значення радіуса кола вказане некоректно

MessageBox(hWnd, L"Помилка в написанні значення радіуса кола. Радіус кола має вказуватися тільки числами.", L"Помилка", MB_OK);

break;

}

}

Circle(hdc, xWindow, yWindow, rNumber);//Виклик функції побудови кола

}

break;

case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

}

break;

case WM_LBUTTONDOWN://При натисненні лівою кнопкою миші

//Зміна центра фігури

xWindow = LOWORD(lParam);

yWindow = HIWORD(lParam);

break;

case WM_SIZE:

lWindow = LOWORD(lParam);//Ширина вікна

wWindow = HIWORD(lParam);//висота вікна

break;

case WM_PAINT:

{

PAINTSTRUCT ps;

HDC hdc = BeginPaint(hWnd, &ps);

// TODO: Add any drawing code that uses hdc here...

EndPaint(hWnd, &ps);

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

// Message handler for about box.

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

switch (message)

{

case WM_INITDIALOG:

return (INT_PTR)TRUE;

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

}

break;

}

return (INT_PTR)FALSE;

}

Файл Rectangel.h

#pragma once

#include "math.h"

int Sign(double x);

void ToLine(HDC hdc, int x1, int y1, int x2, int y2);

//Функція побудови прямокутника

void NewRectangel(HDC hdc,int l,int w,int x,int y) {

ToLine(hdc, x - l, y - w, x + l, y - w);

ToLine(hdc, x - l, y + w, x + l, y + w);

ToLine(hdc, x - l, y - w, x - l, y + w);

ToLine(hdc, x + l, y - w, x + l, y + w);

}

//Функція побудови лінії

void ToLine(HDC hdc, int x1, int y1, int x2, int y2) {

COLORREF color = RGB(0, 250, 154);

double dx, dy;

double x, y;

double l;

double temp;

if (abs(x2 - x1) >= abs(y2 - y1)) {

l = abs(x2 - x1);

}

else {

l = abs(y2 - y1);

}

dx = (x2 - x1) / l;//Обчислення величини

dy = (y2 - y1) / l;//приросту

x = x1 + Sign(dx) / 2;//Задання координат

y = y1 + Sign(dy) / 2;//поточної точки

int i = 1;

while (i <= l) {

SetPixel(hdc, floor(x), floor(y), color);//Будує точку з поточними координатами, де floor - операція заокруглення до найближчого найменшого цілого

x = x + dx;//Визначення координат

y = y + dy;//наступної точки

i = i + 1;

}

}

//Функція, що повертає -1,0,1 для від'ємного, нульового і додатнього аргументу відповідно

int Sign(double x) {

if (x < 0)

return -1;

if (x > 0)

return 1;

return 0;

}

Файл Circle.h

#pragma once

//Функція побудови кола

void Circle(HDC hdc, int x1, int y1, double R) {

COLORREF color = RGB(0,250,154);

int x = 0, y = R, gap = 0, delta = (2 - 2 * R);

while (y >= 0) {

//Побудова чотирьох симетричних точок

SetPixel(hdc, x1 + x, y1 + y, color);//Верхня права чверть

SetPixel(hdc, x1 + x, y1 - y, color);//Нижня права чверть

SetPixel(hdc, x1 - x, y1 - y, color);//Верхня ліва чверть

SetPixel(hdc, x1 - x, y1 + y, color);//Нижня ліва чверть

gap = 2 * (delta + y) - 1;

if (delta < 0 && gap <= 0) {//якщо зсув вниз ближче до радіуса кола

x++;

delta += 2 * x + 1;

continue;

}

if (delta > 0 && gap > 0) {//якщо зсув вправо ближче до радіуса кола

y--;

delta -= 2 * y + 1;

continue;

}

x++;

delta += 2 * (x - y);

y--;

}

}

Размещено на Allbest.ru

...

Подобные документы

  • Загальна характеристика теорії редагування зображень, місце у ній растрових зображень. Аналіз переваг та недоліків програм малювання і векторної графіки. Структура, розмір і розширення зображення. Сутність і призначення основних форматів графічних файлів.

    реферат [1,1 M], добавлен 13.10.2010

  • Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.

    контрольная работа [2,3 M], добавлен 10.09.2009

  • Програми векторної графіки: Corel Draw 8-9, Adobe Illustrator 6, Micrografx Designer 7, Macromedia FreeHand 7, Fractal Design Expression. Формати файлів комп'ютерної графіки. Основний принцип побудови графічних об'єктів. Векторна графіка в Інтернеті.

    курсовая работа [62,4 K], добавлен 19.04.2013

  • Класифікація систем комп’ютерної графіки, її різновиди та сфери використання. Міні-комп’ютери як зменшена версія магістральних. Загальна структура і функції комп’ютерної графіки. Растрова графіка, класифікація, призначення і функції її прикладних систем.

    контрольная работа [12,5 K], добавлен 12.10.2010

  • Сучасні API для програмування тривимірної графіки, математичні основи. Віртуальна камера, конвеєр візуалізації. Вершинні та піксельні шейдери. Розробка та реалізація ігрового додатку. Система постобробки зображення. Реалізація механіки ігрового процесу.

    дипломная работа [4,7 M], добавлен 27.06.2013

  • Математично-алгоритмічне та технічне забезпечення комп'ютерної графіки. Діалогова модель взаємодії користувача з комп'ютером. Ділова, ілюстративна, рекламна та художня графіка. Растровий принцип формування зображення. Трикомпонентний колірний простір.

    курс лекций [1,3 M], добавлен 23.04.2014

  • Дослідження історії виникнення комп’ютерної томографії. Створення перших програмованих томографів. Фізико-технічні основи комп'ютерної томографії. Конфігурація сучасного спірального комп'ютерного томографа. Опис режимів сканування та отримання томограми.

    отчет по практике [1,8 M], добавлен 01.12.2013

  • Історія розвитку інформаційних технологій. Швидка зміна концептуальних представлень, технічних засобів, методів і сфер їх застосування. Основні види, можливості та сфера застосування комп'ютерної графіки. Векторна та об'єктно-орієнтована графіка.

    курсовая работа [725,5 K], добавлен 28.03.2015

  • Основні поняття комп’ютерної графіки. Загальна характеристика програми CorelDRAW: інтерфейс, панель інструментів, контекстне та системне меню Windows. Створення векторних об'єктів. Основи роботи з текстом. Аспекти редагування зображень та форми об'єктів.

    дипломная работа [1,2 M], добавлен 12.01.2011

  • Жанрові особливості портрету, як самостійного виду образотворчого мистецтва. Сучасне мистецтво комп'ютерної графіки. Система занять по оволодінню прийомами, техніками створення студентами портрету у програмі Photoshop, її функції та методи малювання.

    дипломная работа [7,1 M], добавлен 16.05.2012

  • Програми растрової графіки. Інтерфейс Adobe Photoshop. Зміна розмірів зображення та полотна. Інструменти Adobe Photoshop. Робота з зображеннями, введення тексту. Створення спеціальних ефектів. Прийоми редагування зображення та створення композицій.

    дипломная работа [8,3 M], добавлен 21.07.2014

  • Проектування і реалізація навчального програмного продукту "Побудова геометричних фігур". Використання C++ Builder 6 у якості програмного середовища для реалізації даної навчальної програми. Інструкція з використання розробленого програмного забезпечення.

    курсовая работа [2,2 M], добавлен 05.05.2014

  • Розвиток комп’ютерної техніки. Основи інформатики. Класифікація персональних комп’ютерів. Складові частини інформатики. Інформація, її види та властивості. Кодування інформації. Структурна схема комп’ютера. Системи числення. Позиційна система числення.

    реферат [36,0 K], добавлен 27.10.2003

  • Інтерфейс Adobe Photoshop. Прийоми редагування зображення та створення композицій. Прийоми редагування зображення інструментами малювання. Синтез зображень з Photoshop та Surfer. Результат суміщення растрової основи та Surfer-зображення у редакторі.

    дипломная работа [5,1 M], добавлен 23.08.2014

  • Вивчення настільної видавничої системи, комплексу комп'ютерних апаратних і програмних засобів, які слугують для друкарської підготовки оригінал-макетів продукції. Аналіз кольороподілу і сканування зображень, корекції з елементами комп'ютерної графіки.

    реферат [404,2 K], добавлен 13.05.2011

  • Алгоритм побудови лінії та використання графічної бібліотеки DirectX. Способи побудови довільної кількості довільного розміру точок на поверхні форми. Можливості комп'ютера виконувати мультимедійні програми під управлінням операційної системи Windows.

    контрольная работа [416,9 K], добавлен 22.10.2009

  • Арифметичні основи, на яких ґрунтується функціонування комп'ютерної техніки. Основні поняття дискретної обробки інформації. Системи числення, форми подання чисел у комп'ютерах. Арифметичні операції, що виконуються над числами, подані у двійковому коді.

    учебное пособие [903,6 K], добавлен 18.12.2010

  • Розробка динамічних та статичних зображень для сайту за допомогою відеоредактора Adobe After EffectCS6 та графічного редактора Adobe Photosop CS6. Розробка структури сайту. Багатоваріантний аналіз розв’язку задачі. Створення анімованого логотипу.

    курсовая работа [1,8 M], добавлен 07.12.2014

  • Cinema 4D як пакет для створення тривимірної графіки та анімації. Аналіз особливостей роботи з комп’ютерною графікою. Загальна характеристика основних етапів розробки дивану та інтер’єру кімнати. Знайомство з перевагами та недоліками растрової графіки.

    курсовая работа [2,7 M], добавлен 05.01.2014

  • Створення простого тривимірного зображення кадру гри. Основи. Метод визначення швидкості роботи гри. Додаткові можливості. Отримання тривимірного зображення з двовимірного. Використання тригонометричних функцій. Алгоритм Брезенхама.

    реферат [110,8 K], добавлен 08.08.2007

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.