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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    256,93 Кб
  • Опубликовано:
    2013-08-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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








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

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

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









Липецк 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 Определение кривой Безье

Кривая Безье - параметрическая кривая <#"656227.files/image001.gif">

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

,

где - число сочетаний <#"656227.files/image003.gif">, где - степень полинома, - порядковый номер опорной вершины.

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

.2.1 Линейные кривые

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

.

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

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

.


.2.3 Кубические кривые

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

.

 <#"656227.files/image011.gif">

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

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

 (1)

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

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

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

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

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


и при :

.

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

 и .

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

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

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

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


Или

.

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

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

, (2)

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

,

,

,

.

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

, ,

, .

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

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

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

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

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

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

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

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

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

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

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

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

.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 .Описание структуры ПО 

.1 Структура ПО

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

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

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

hPrevInstance - дескриптор предыдущего экземпляра окна;- указатель на командную строку;- показывает состояние окна (режим отображения).CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) - функция, обрабатывающая сообщения, поступающие окну.

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

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

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

Параметр: nExitCode - код завершения прикладной программы.DrawTestScene(DrawingContext* ctx, HWND hwnd, POINT pt) - функция рисования окна. Функция очищает окно, рисует кривую и ее определяющие точки.

Параметры: ctx - контекст рисования;- дескриптор окна;- положение курсора.

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

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

Параметры: hwnd - дескриптор окна;- положение курсора;- параметры перемещения мыши;- контекст рисования.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:


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!