Криві Без'є
Стандарт програмного інтерфейсу для апаратури, яка створює графіку. Криві Без'є як один з найголовніших інструментів систем проектування і програм комп'ютерної графіки. Розрахунок стикових функцій Без`є і генерація двовимірного кубічного сплайну.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 01.02.2011 |
Размер файла | 439,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Контрольна робота
з курсу:
«Комп'ютерна графіка»
Житомир 2010
Введення
Комп'ютерною графікою називають галузь інформатики, яка вивчає методи створення, обробки й використання зображень за допомогою програмно-апаратних засобів. Цей термін має й інше тлумачення: комп'ютерна графіка - це графіка, створена на комп'ютері або, точніше, за допомогою комп'ютера, який використовують як інструмент малювання. І саму комп'ютерну графіку, і відповідний термін було запроваджено приблизно двадцять років тому.
Основні сфери застосування технологій комп'ютерної графіки такі:
- графічний інтерфейс користувача;
- спецефекти, цифрова кінематографія;
- цифрове телебачення, Інтернет, відеоконференції;
- цифрове фотографування;
- візуалізація наукових і ділових даних;
- комп'ютерні ігри, системи віртуальної реальності (наприклад, тренажери керування літаком);
- системи автоматизованого проектування;
- комп'ютерна томографія;
- комп'ютерна графіка для кіно і телебачення.
1. Графічна бібліотека OpenGl
OpenGL - це «програмний інтерфейс для апаратури, яка створює графіку. Цей інтерфейс зроблений у вигляді бібліотеки функцій (Open Graphic Library - OpenGL). Розробник - фірма Silicon Graphics.
OpenGL стала індустріальним стандартом, вона підтримується багатьма операційними системами для різноманітних апаратних платформ - від персональних комп'ютерів до надпотужних суперкомп'ютерів. Бібліотека OpenGL дозволяє досить просто створювати швидкодіючі графічні програми, які використовують апаратні можливості ЗD-акселераторів. Тому вона часто використовується розроблювачами комп'ютерних ігор (наприклад, Quake) та систем тривимірного моделювання. В операційній системі Windows бібліотека OpenGL (версії 1.1) підтримана, починаючи з Windows 95 версії OSR 2, - були додані відповідні модулі DLL, а також включені кілька функцій і структур даних у АРІ Win32.
Перша версія OpenGL побачила світ у 1992 році. Розширення OpenGL втілювалися у версіях 1.1-1.5. Зараз на порядку денному впровадження OpenGL версії 2. Ця версія буде забезпечувати використання усіх можливостей графічних процесорів, у тому числі повну підтримку шейдерів.
Розробка графічних програм OpenGL для середовища Windows подібна програмуванню графіки GDI функцій АРІ, що ми розглянули в главах 7-10. Однак є особливості, деякі з яких ми вивчимо. Для одержання докладніших відомостей можна порекомендувати такі літературні джерела, як довідники для систем програмування для АРІ Win32 [86, 87].
Стосовно літератури. Незважаючи на те, що видано багато різноманітної літератури з OpenGL, в тому числі й кирилицею, радимо вам завжди намагатися читати першоджерела (це стосується будь-якої теми). Для OpenGL таким джерелом є знаменита «Red Book» від Silicon Graphics.
Швидкодія графічних програм, що використовують OpenGL, істотно залежить від відеоадаптера. Апаратна реалізація всіх базових функцій OpenGL - гарантія високої швидкодії. У даний час багато відеоадаптерів містять спеціальний графічний процесор (один чи декілька) для підтримки функції графіки. Крім того, що відеоадаптер повинен апаратно виконувати усі базові функції OpenGL (такі як перетворення координат, відсікання, вивід полігонів, розрахунок освітлення, накладення текстур), для досягнення високої швидкодії повинен бути встановлений спеціальний драйвер. Драйвери типу ICD (Installable Client Driver) забезпечують інтерфейс, що сприяє ефективному використанню апаратних можливостей відеоадаптера. Інший тип драйвера - MCD - встановлюється зазвичай тоді, коли не всі функції підтримані апаратно, в цьому випадку вони виконуються програмно центральним процесором, що істотно повільніше.
2. Криві Без`є
Криві Без'є - один з найголовніших інструментів систем автоматизованого проектування і програм комп'ютерної графіки.
В загальному вигляді алгоритм дозволяє обчислити координати (х, у) точки кривої Без'є за значенням параметра t.
1. Кожна сторона контуру багатокутника, що проходить по точках-орієнтирах, ділиться пропорційно значенню t.
2. Точки поділу з'єднуються відрізками прямих і утворюють новий багатокутник. Кількість вузлів нового контуру на одиницю менша, ніж кількість вузлів попереднього контуру.
3. Сторони нового контуру знову діляться пропорційно значенню t. І так далі. Це продовжується до тих пір, доки не буде отримано єдину точку поділу. Та точка й буде точкою кривої Без'є.
Наведемо запис геометричного алгоритму на мові C++:
Результат роботи алгоритму - координати однієї точки кривої Без'є - записуються в R[0].
Фігурою тут будемо вважати плаский геометричний об'єкт, який складається з ліній контуру та точок, що містяться всередині контуру. Контурів може бути декілька - наприклад, коли об'єкт має всередині порожнини (рис. 3.10). У деяких графічних системах одним об'єктом може вважатися й більш складна багатоконтурна фігура - сукупність островів із порожнинами.
Графічний вивід фігур поділяється на дві задачі: вивід контуру й вивід точок заповнення. Позаяк контур являє собою лінію, то вивід контуру проводиться на основі алгоритмів виводу ліній. У залежності від складності контуру, це можуть бути відрізки прямих, кривих або довільна послідовність сусідніх пікселів.
Для виводу точок заповнення відомі методи, котрі розділяються в залежності від використання контуру на два типи: алгоритми зафарбовування від внутрішньої точки до границь довільного контуру й алгоритми, що використовують математичний опис контуру.
Взагалі, ділянку кривої Без`є можна підібрати за будь-якою кількістю контрольних точок. Степінь полінома Без`є визначається числом контрольних точок та їх відносним положенням. Як і для інтерполюючи сплайнів, шлях кривої Без`є можна задати в границях контрольних точок, використовуючи стикові функції, характеристичну матрицю або граничні умови. Для загальних кривих Без`є без обмеження числа контрольних точок найбільш вдалим представленням є специфікації стикових функцій.
Рівняння кривих Без`є
Розглянемо спочатку загальний випадок n+1 контрольних точок, положення яких позначимо через
Bk = (Xk, Yk, Zk),
де k змінюється від 0 до р. Дані точки збираються в вектор положень P(u), який описує шлях апроксимуючої поліноміальної функції Без`є між B0 і Bn.
Крива Без'є - параметрична крива, вигляду
де - опорні вершини,
- поліноми Бернштейна, вони є базисними функціями кривої Без'є.
Також існує рекурсивна формула побудови кривих Без'є
Для отримання послідовних значень біноміальних коефіцієнтів можна використати рекурсивні розрахунки:
C (n, k) = (n-k+1)/k*C (n, k-1), при n>=k.
інтерфейс без'є графіка сплайн
В моїй програмі реалізовано розрахунок стикових функцій Без`є і генерація двовимірного кубічного сплайну Без`є. На площині ху визначені 4 контрольні точки, і на кривій відмічено 1000 положень пік селів, при чому ширина пікселю = 4. Значення біноміальних коефіцієнтів вираховуються в процедурі binomialCoeffs, а положення точок на кривій вираховуються в процедурі computeBezPt. Дані значення передаються процедурі Bezier, і пік селі відмічаються на кривій з використанням процедур OpenGL вивода точок на екран. Крім того, траєкторію кривої можна аппроксимувати прямими відрізками, використовуючи при цьому менше число точок. В моїй роботі накладено умови зовнішньої системи координат, тому відображаються лише точки кривої, що знаходяться у вікні перегляду. (рис. 8.34). Якщо додатково потрібно відобразити положення контрольних точок, контрольний граф або випуклу оболонку, відсікаючи вікно необхідно розширити у зовнішній системі координат.
3. Програмний код
#include «stdafx.h»
#include <windows.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include «bitmap.h»
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
/* Задаємо початковий розмір вікна на екрані монітора*/
GLsizei winWidth = 600, winHeight = 600;
/*Задаємо розмір відтинаючого вікна в зовнішніх координатах*/
GLfloat xwcMin = -50.0, xwcMax = 50.0;
GLfloat ywcMin = -50.0, ywcMax = 50.0;
class wcPt3D {
public:
GLfloat x, y, z;
};
void init (void)
{
/*Колір вікна - білий*/
glClearColor (1. 0,1. 0,1. 0,0.0);
}
void plotPoint (wcPt3D bezCurvePt) // будуємо точки
{
glBegin (GL_POINTS);
glVertex2f (bezCurvePt.x, bezCurvePt.y);
glEnd();
}
/*Вираховуються біноміальні коефіцієнти С
для даного значення n*/
void binomialCoeffs (GLint n, GLint * C) {
GLint k, j;
for (k=0; k<=n; k++) {
/* Вираховується n!/(k! (n-k)!) */
C [k] = 1;
for (j=n; j>=k+1; j-)
C [k] *=j;
for (j=n-k; j>=2; j-)
C [k] /=j;
}
}void computeBezPt (GLfloat u, wcPt3D * bezPt, GLint nCtrlPts,
wcPt3D * ctrlPts, GLint * C)
{
GLint k, n = nCtrlPts - 1;
GLfloat bezBlendFcn;
bezPt->x = bezPt->y = bezPt->z =0.0;
/*Вираховуються стикові функції і контрольні точки з'єднань*/
for (k=0; k< nCtrlPts; k++) {
bezBlendFcn = C [k] * pow (u, k)*pow (1-u, n-k);
bezPt->x += ctrlPts [k].x * bezBlendFcn;
bezPt->y += ctrlPts [k].y * bezBlendFcn;
bezPt->z += ctrlPts [k].z * bezBlendFcn;
}
}
void bezier (wcPt3D * ctrlPts, GLint nCtrlPts,
GLint nBezCurvePts)
{
wcPt3D bezCurvePt;
GLfloat u;
GLint *C, k;
/*Розподіляється пам'ять для біноміальних коефіцієнтів*/
C = new GLint [nCtrlPts];
binomialCoeffs (nCtrlPts - 1, C);
for (k=0; k<=nBezCurvePts; k++) {
u = GLfloat (k) / GLfloat (nBezCurvePts);
computeBezPt (u, &bezCurvePt, nCtrlPts, ctrlPts, C);
plotPoint (bezCurvePt);
}
delete [] C;
}
void displayFcn (void)
{
/*Задається число контрольних точок і число точок
кривої, які зображуються на кривій Без`є*/
GLint nCtrlPts = 4, nBezCurvePts = 1000;
wcPt3D ctrlPts [4] ={{-40.0, -40.0, 0.0}, {-10.0, 200.0, 0.0}, {10.0, -200.0, 0.0}, {40.0, 40.0, 0.0}};
glClear (GL_COLOR_BUFFER_BIT); // очищення кольору
/*Очищується вікно на екрані монітора*/
glPointSize (4);
glColor3f (1. 0,0. 0,0.0); // колір точок - червоний
bezier (ctrlPts, nCtrlPts, nBezCurvePts);
glFlush();
}
void winReshapeFcn (GLint newWidth, GLint newHeight)
{
/*Характеристичне відношення підтримується рівним 1*/
glViewport (0,0, newHeight, newWidth);
glMatrixMode (GL_PROJECTION);
glLoadIdentity(); // одинична матриця
gluOrtho2D (xwcMin, xwcMax, ywcMin, ywcMax);
glClear (GL_COLOR_BUFFER_BIT); // очищення кольору
}
void keyboard (unsigned char key, int x, int y)
{
if (key==27)
{
exit(0); // вихід з програми
}
}
void main (int argc, char** argv) // головна функція програми
{
glutInit (&argc, argv); // для ініціалізації GLUT
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // режим відображення інформації у вікні
glutInitWindowPosition (50, 100); // положення створюваного вікна щодо верхнього лівого кута екрану
glutInitWindowSize (winWidth, winHeight); // визначення розмірів вікна
glutCreateWindow («Kriva9 Bez'e»); // створення вікна
init(); // виклик функції init
glutDisplayFunc(displayFcn); // функція, яка відповідає за малювання
glutReshapeFunc (winReshapeFcn); // відслідковує зміну розмірів вікна
glutMainLoop(); // перехід в головний цикл.
}
Список літератури
1. С.В. Глушаков, Г.А. Крабе Компьютерная графика, Харьков 2002
2. Блінова Т.О., Порєв В.М. Комп'ютерна графіка / За ред. В.М. Горєва. - К.: Видавництво «Юніор», 2004.
Размещено на Allbest.ru
Подобные документы
Класифікація систем комп’ютерної графіки, її різновиди та сфери використання. Міні-комп’ютери як зменшена версія магістральних. Загальна структура і функції комп’ютерної графіки. Растрова графіка, класифікація, призначення і функції її прикладних систем.
контрольная работа [12,5 K], добавлен 12.10.2010Загальна характеристика підприємства "Focus". Огляд програмного забезпечення для створення комп’ютерної мережі. Вибір мережевої служби та протоколів, архітектури, кабелю. Розрахунок обсягу даних, мінімальної конфігурації для серверів та робочих станцій.
курсовая работа [600,9 K], добавлен 20.05.2015Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.
контрольная работа [2,3 M], добавлен 10.09.2009Історія розвитку інформаційних технологій. Швидка зміна концептуальних представлень, технічних засобів, методів і сфер їх застосування. Основні види, можливості та сфера застосування комп'ютерної графіки. Векторна та об'єктно-орієнтована графіка.
курсовая работа [725,5 K], добавлен 28.03.2015Теоретичні основи технології віртуалізації як інструменту навчання, проектування мереж та системного адміністрування. Планування складу комп’ютерної мережі, вибір платформи та операційної системи, установка і налаштування програм. Питання охорони праці.
дипломная работа [5,9 M], добавлен 24.04.2014Загальна характеристика мережі та мережевого обладнання, а також програмного забезпечення підприємства. Обґрунтування необхідності створення та налаштування комп’ютерної мережі, зміст відповідних заходів. Розрахунок затрат на матеріали і комплектуючі.
дипломная работа [2,4 M], добавлен 21.06.2014Розрахунок елементів структурованої кабельної системи, ІР-адресації комп’ютерної мережі, плану прокладання кабельних трас та розміщення робочих місць. Створення моделі КМ у програмі PacketTracer. Особливості настройки її комутаторів та маршрутизаторів.
курсовая работа [1,6 M], добавлен 15.06.2014Класифікація програмного забезпечення, системне та прикладне забезпечення, інструментальні системи. Програмна складова комп'ютерної системи, опис алгоритмів розв'язання певної задачі. Класифікація операційних систем, основні групи прикладних програм.
презентация [945,0 K], добавлен 01.04.2013Обгрунтування фізичної топології комп’ютерної мережі. Розробка схеми фізичного розташування кабелів та вузлів. Типи кабельних з’єднань та їх прокладка. Вибір сервера та інсталяція його програмного забезпечення, налаштування ОС Windows 2008 Server.
курсовая работа [1,4 M], добавлен 07.02.2016Побудова апаратної структури для серверу, встановлення операційної системи і програмного забезпечення, розробка веб-сайту. Розрахунок річної суми економічного ефекту від впровадження комп’ютерної мережі. Проектування освітлення, засобів пожежогасіння.
дипломная работа [5,6 M], добавлен 02.07.2015