Построение кривых Безье

Математическая модель построения кривых Безье с описанием реализации на языке Visual С++. Вычисление длины кривой. Условие непрерывности соседних кривых Безье, частные случаи. Структура программы, вызываемые функции. Описание основных алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.08.2013
Размер файла 405,3 K

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

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

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

Липецкий государственный технический университет

Кафедра автоматизированных систем управления

КУРСОВАЯ РАБОТА

по компьютерной графике

Построение кривых Безье

Липецк 2012 г

АННОТАЦИЯ

С. 15. Ил. 6. Источники 3 назв.

В данной работе представлена математическая модель построения кривых Безье с описанием реализации на языке Visual С++.

ОГЛАВНЕНИЕ

1. Математическая модель

1.1 Определение кривой Безье

1.2 Частные случаи кривой Безье

1.3 Вычисление длины кривой

1.4 Условие непрерывности соседних кривых Безье

2. Описание алгоритмов

2.1 Построение кривой по четырем заданным точкам

2.2 Построение составной кривой

2.3 Выбор пользователем точки на составной кривой

2.4 Изменение координат определяющих точек (для углового узла)

2.5 Изменение координат определяющих точек (для гладкого узла)

3. Описание структуры ПО

3.1 Структура ПО

4. Контрольный пример

Список источников

программа кривая безье модель

1. Математическая модель

1.1 Определение кривой Безье

Кривая Безье -- параметрическая кривая, задаваемая выражением

где -- функция компонент векторов опорных вершин, а -- базисные функции кривой Безье.

,

где -- число сочетаний из по , где -- степень полинома, -- порядковый номер опорной вершины.

1.2 Частные случаи кривой Безье

1.2.1 Линейные кривые

При n = 1 кривая представляет собой отрезок прямой линии, опорные точки P0 и P1 определяют его начало и конец. Кривая задаётся уравнением:

.

1.2.2 Квадратичные кривые

Квадратичная кривая Безье (n = 2) задаётся 3-мя опорными точками: P0, P1 и P2.

.

1.2.3 Кубические кривые

В параметрической форме кубическая кривая Безье (n = 3) описывается следующим уравнением:

.

Рисунок 1. Кубическая кривая Безье.

Четыре опорные точки P0, P1, P2 и P3, заданные в 2-х или 3-мерном пространстве определяют форму кривой.

Линия берёт начало из точки P0 направляясь к P1 и заканчивается в точке P3 подходя к ней со стороны P2. То есть кривая не проходит через точки P1 и P2, они используются для указания её направления. Длина отрезка между P0 и P1 определяет, как скоро кривая повернёт к P3.

Квадратичная кривая Безье с координатами преобразовывается в кубическую кривую Безье с координатами 

1.3 Вычисление длины кривой

Длина кубической кривой, заданной четырьмя точками , приближается ломаными по формуле:

(1)

1.4 Условие непрерывности соседних кривых Безье

Пусть кривая Безье степени задана вершинами , а соседняя кривая Безье степени - вершинами . Тогда непрерывность первой производной в точке соединения выражается соотношением

, где - скаляр.

Рисунок 2. Непрерывность первой производной для кубических кривых Безье.

Вычисление -й производной при :

и при :

.

Отсюда первые производные в концах будут

и .

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

Пользуясь уравнениями получим . Из непрерывности кривой следует, что и .

Отсюда направления касательных на стыке совпадают, если три вершины , , коллинеарны, т.е. должна лежать на линии между и .

Если совпадают еще и величины касательных векторов, то является серединой отрезка от до :

Или

.

На рисунке 2 приведена иллюстрация для , т. е. для двух кубических кривых Безье.

Кубическая кривая Безье задается в виде

, (2)

где , , , , - определяющие вершины.

Тогда многоугольник , , , определяет кривую Безье ,, соответствующую первой половине исходной кривой, а именно ,. Подобным образом, многоугольник , , , определяет кривую Безье , , соответствующую второй половине исходной кривой, т.е. , . Новые определяющие вершины многоугольника и получаются путем приравнивания радиус-векторов и касательных векторов при , ; , и , ; , . Получаем

,

,

,

.

Решение этих уравнений дает

, ,

, .

2. Описание алгоритмов

2.1 Построение кривой по четырем заданным точкам

Вычислить приближенную длину кривой по формуле (1).

Принять шаг параметра , параметр t = 0.

Получить значение следующей точки, принадлежащей кривой, из уравнения (2).

Соединить прямой предыдущую точку с новой. Если t = 1 - закончить, иначе, увеличить t на dt и перейти к шагу 3.

2.2 Построение составной кривой

Определить количество точек в массиве. Если оно делится на три с остатком единица, то перейти к шагу 2, иначе закончить.

Взять первые четыре точки массива.

Построить кривую по четырем точкам.

Если достигнут конец массива, то закончить, иначе перейти к шагу 5.

Взять четвертую точку предыдущего сегмента и три следующие за ней точки массива и перейти к шагу 3.

2.3 Выбор пользователем точки на составной кривой

Считать координаты курсора в момент щелчка левой кнопкой мыши, сохранив как точку pt.

Взять точки начального сегмента составной кривой

Выполнить пункты 1-3 алгоритма 2.1.

Если t = 1, рассмотрен последний сегмент кривой и разность координат pt и рассчитанной точки, принадлежащей кривой, больше 2, то закончить. Иначе если t = 1, разность координат pt и рассчитанной точки больше 2, но рассмотрен не последний сегмент кривой, то взять точки следующего сегмента и перейти к шагу 3. Иначе если t < 1 и разность координат pt и рассчитанной точки больше 2, то перейти к шагу 5. Иначе если t < 1 и разность координат pt и рассчитанной точки меньше 2, то перейти к шагу 6.

Увеличить t на dt и, получив значение следующей точки, принадлежащей кривой, из уравнения (2), перейти к шагу 4.

Закрасить прямоугольник в окрестности двух пикселей от выбранной точки, принадлежащей кривой.

Вычислить направляющие точки по формулам:

; ,

где P0 - выбранная пользователем точка, P1 - правая точка сегмента кривой, P2 - левая точка.

В массиве определяющих кривую точек сместить все элементы, начиная с третьей точки выбранного сегмента, на 3 позиции вправо и записать в освободившиеся ячейки последовательно C, P0, B.

Построить составную кривую по новому массиву определяющих точек.

3 .Описание структуры ПО

3.1 Структура ПО

Рисунок 3. Структура программы

int CALLBACK WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) - точка входа в программу. В данной функции приложение выполняет необходимые действия по собственной инициализации, созданию и отображению главного окна.

Параметры: hInstance - дескриптор текущего экземпляра окна;

hPrevInstance - дескриптор предыдущего экземпляра окна;

lpCmdLine - указатель на командную строку;

nCmdShow - показывает состояние окна (режим отображения).

LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) - функция, обрабатывающая сообщения, поступающие окну.

Параметры: hwnd - дескриптор окна;

uMsg - сообщение;

wParam и lParam - параметры, задающие дополнительную информацию о сообщении, точное значение зависит от сообщения.

Вызываемые функции: при выборе пользователем пункта «Выход» - DestroyWindow; при поступлении сообщения завершения программы - PostQuitMessage; при движении мыши - OnMouseMove; при сообщении перерисовки окна - DrawTestScene.

BOOL DestroyWindow(HWND hWnd) - функция разрушающая окно.

Параметр: hWnd - дескриптор окна.

void PostQuitMessage(int nExitCode) - указывает системе, что поток сделал запрос на то, чтобы завершить свою работу.

Параметр: nExitCode - код завершения прикладной программы.

void DrawTestScene(DrawingContext* ctx, HWND hwnd, POINT pt) - функция рисования окна. Функция очищает окно, рисует кривую и ее определяющие точки.

Параметры: ctx - контекст рисования;

hwnd - дескриптор окна;

pt - положение курсора.

Вызываемые функции: для вычисления длины кривой - GetLenght; для последовательного определения координат точек, принадлежащих кривой - BCoord, для вычисления направляющих точек узла, выбранного пользователем, - QUAD.

void OnMouseMove(HWND hwnd, POINT pt, DWORD dwFlags, DrawingContext* ctx) - функция, обрабатывающая изменение мышью положения определяющих точек кривой.

Параметры: hwnd - дескриптор окна;

pt - положение курсора;

dwFlags - параметры перемещения мыши;

ctx - контекст рисования.

double GetLenght(Point* points) - функция возвращает длину кривой.

Параметр: points - массив определяющих точек сегмента кривой.

int BCoord(int x0, int x1, int x2, int x3, double t) - возвращает координаты принадлежащей кривой точки, соответствующей заданному значению параметра.

Параметры: x0, x1, x2, x3 - координата определяющих точек сегмента кривой;

t - параметр кривой.

void QUAD(DrawingContext* ctx, Point* p) - функция вычисляет направляющие точки выбранного пользователем узла и записывает их в массив определяющих точек кривой.

Параметры: ctx - контекст рисования;

p - точка, выбранная пользователем.

4. Контрольный пример

Рисунок 4. Построение кривой с угловым узлом

Рисунок 5. Построение кривой с гладким узлом

Рисунок 6. Режим просмотра полученной кривой

СПИСОК ИСТОЧНИКОВ

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

Кривая Безье. Википедия. URL: http://ru.wikipedia.org. 20.12.2012. Загл. с экрана.

Кривые Безье. Применение. URL:

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


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

  • Произвольные кривые. Узлы кривой. Создание кривых Безье. Возможные применения инструмента Безье. Редактирование фигур и кривых. Инструменты Knife (нож), Erase (ластик) и Free Transform (свободное преобразование).

    реферат [38,4 K], добавлен 21.12.2003

  • Исследование элементов эллиптических кривых, необходимых для реализации криптографических протоколов. Изучение алгоритмов арифметики точек эллиптической кривой и способов генерации кривых для криптографических алгоритмов. Описание алгоритмов шифрования.

    курсовая работа [371,2 K], добавлен 07.08.2012

  • Характеристика программы для реализации проектов, созданных в формате трехмерного моделирования. Классификация кривых 2-го порядка. Построение окружности, эллипса, гиперболы и параболы в системе координат с помощью программного обеспечения 3D MAX.

    контрольная работа [667,7 K], добавлен 18.01.2014

  • Рассмотрение алгоритма, основанного на использовании рекурсивной функции. Пример построения простого самоподобного фрактала - ковра Серпинского, снежинки Коха, кривых Пеано и Гильберта. Понятие L-система и терл-графика. Составление программы "Koch.m".

    курсовая работа [3,6 M], добавлен 14.12.2012

  • Объёмные геометрические объекты и построение линии их пересечения. Выработка практических навыков в разработке и отладке программ. Содержание программы и результат ее выполнения. Методы конструирования кривых. Аппроксимация кривой методом Фергюсона.

    контрольная работа [239,7 K], добавлен 15.01.2009

  • Теория кривых и поверхностей. Кривизна кривой. Трехгранник Френе. Натуральные уравнения кривой. Гладкие поверхности - определения, параметрические уравнения. Формулы Гаусса-Петерсона-Кодацци. Моделирование поверхностей, заданных квадратичными формами.

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

  • Программирование и структура программы на языке Turbo Pascal и MS Visual C++6.0. Вычисление площади круга. Реализация программы в системе Turbo Pascal и MS VISUAL C++6.0 для Windows. Структура окна ТРW. Сохранение текста программы в файле на диске.

    лабораторная работа [3,7 M], добавлен 22.03.2012

  • Разработка программы-приложения для создания композиции кривых второго порядка в полярных координатах. Описание используемых констант, переменных, компонентов, процедур и функций. Источники входной и выходной информации. Требования к программе и системе.

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

  • Изучение устройства системы автоматического регулирования и метода экстраполяции кривой разгона объекта управления. Определение параметров объекта по экстраполированной кривой. Сравнение параметров экспериментальной и экстраполируемой кривых разгона.

    лабораторная работа [807,6 K], добавлен 18.01.2022

  • История криптографии. Сравнение алгоритмов шифрования, применение в операционной системе. Анализ продуктов в области пользовательского шифрования. Включение и отключение шифрования на эллиптических кривых. Использование хеш-функции. Электронная подпись.

    курсовая работа [492,6 K], добавлен 18.09.2016

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