Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИГС / IGS_2014-2015 / Lab_03 / labor_03a.doc
Скачиваний:
15
Добавлен:
17.04.2018
Размер:
1.34 Mб
Скачать

Сплайновые кривые Безье.

Сплайновая кривая Безье (Bezierspline), в отличие от кривой Эрмита, определяется только заданием опорных векторов. Если заданыN+1 опорные векторы, то кривая Безье порядкаN, строится с помощью следующей формулы:

. (27)

Здесь bN,i(t)– многочлены Бернштейна, которые обладают следующим свойством:

. (28)

Это, в свою очередь, приводит к тому, что кривая Безье порядка Nобладает следующими свойствами.

1) Кривая Безье – гладкая кривая.

2) Кривая Безье начинается в точке V0, а заканчивается в точкеVN.

(29)

3) Кривая Безье в начале при t=0 касается отрезка, а в конце приt=1 кривая Безье касается отрезка. Другими словами касательные вектора в начале и конце кривой Безье параллельны указанным отрезкам.

4) Кривая Безье лежит целиком в выпуклой оболочке порожденной опорными точками . Другими словами, если на этих опорных точках построить выпуклый многогранник, то кривая Безье будет целиком располагаться внутри этого многогранника.

В дальнейшем многочлены Бернштейна bN,i(t) будем называть функциями Безье. Запишем в явном виде кубическую сплайновую кривую Безье. В этом случае четыре функции Безье будут иметь следующий вид.

(30)

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

(31)

Уравнение (21) для кривой Безье можно записать в матричном виде, как и уравнение (25) для кривой Эрмита. Введем столбец, элементами которого будут опорные векторы.

(32)

Тогда уравнение кривой Безье (31) можно представить в виде матричного уравнения.

(33)

Здесь матрица Mbназывается матрицей Безье (Beziermatrix) и имеет следующий вид:

(34)

На Рис.13. показана элементарная кривая Безье, построенная с помощью формулы (31). На этом рисунке показаны четыре опорные точки V0,V1,V2,V3. Из рисунка видно, что кривая Безье начинается в опорной точкеV0, а заканчивается в опорной точкеV3.

На Рис.13 показаны также касательные векторы в начале кривой T0, и в конце кривойT1. Из рисунка видно, что касательный векторT0в начале кривой приt=0 параллелен отрезку, а в конце кривой касательный векторT1приt=1 параллелен отрезку.

Составная сплайновая кривая Безье может быть создана из нескольких стыкующихся между собой элементарных кривых Безье. По сути дела, составная кубическая кривая Безье представляет собой объединение Nэлементарных кубических кривых Безьеc0,c0,c1,,cN-1. Для определения составной кривой понадобитсяNp= 3N+1 опорных векторов.

Каждая элементарная кривая Безье cnописывается параметрическим векторным уравнением:

(35)

Здесь векторная функция определятся по формуле (31), где в качестве четырех опорных векторов выступают четыре следующих опорных вектора.

(36)

В опорных точках стыкуются соседние элементарные кривые Безье. Так в точкестыкуются соседние элементарные кривыеcn-1иcn, причем выполняется следующее условие:

(37)

На Рис.14. показана составная кривая Безье, полученная путем стыковки трех элементарных кривых Безье.

Рис.13.

Элементарная кривая Безье. Опорные точки V0,V1V2,V3. Касательные векторыT0,T1.

Рис.14.

Составная кривая Безье. Опорные точки V0,V1,V2,,V9. Касательные векторы – желтый цвет, векторы кривизны – красный цвет.

(Изображение на Рис.13 создано программой line7.cpp, на Рис.14 создано line8.cpp.)

На Рис.14 показаны 10 опорных точек, обозначенные зелеными кружками. Желтыми стрелками показаны касательные векторы в начале и конце каждой элементарной кривой Безье. Красными стрелками показаны векторы кривизны в начале и конце элементарных кривых Безье.

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

Чтобы сделать составную кривую Безье гладкой кривой, необходимо предпринять дополнительные усилия по выбору опорных векторов. Пусть стыковка соседних элементарных кривых Безье происходит в точке Vn. Тогда для непрерывности касательного вектора в точке стыковки три вектораVn-1Vn,Vn+1должны лежать на одной прямой. Такую кривую называютG1– непрерывной кривой.

На Рис.15. показана гладкая составная кривая Безье, полученная путем стыковки двух элементарных кривых Безье в точке V3.

Рис.15.

Составная кривая Безье. Непрерывный касательный вектор. Опорные точки V2,V3,V4лежат на одной прямой.

Рис.16.

Составная кривая Безье. Непрерывный касательный вектор и непрерывный вектор кривизны. Опорные точки V1,V2,V3,V4,V5лежат в одной плоскости.

(Изображения на Рис. 15, 16 созданы программой line8.cpp.)

На Рис.15 видно, что три опорные точки V2V3,V4лежат на одной прямой. В результате касательный вектор оказался непрерывным в точке стыковкиV3.

Однако в точке стыковки соседних элементарных кривых Безье вектор кривизны претерпевает разрыв. Можно путем выбора опорных точек сделать вектор кривизны непрерывным в точке стыковки. Такую кривую называют G2– непрерывной кривой. Так вот чтобы составная кривая Безье былаG2– непрерывной кривой, нужно чтобы три точкиVn-1Vn,Vn+1лежали на одной прямой, а пять точекVn-2,Vn-1,Vn,Vn+1,Vn+2 лежали в одной плоскости.

На Рис.16. показана гладкая составная кривая Безье, которая является G1– непрерывной кривой иG2– непрерывной кривой. Здесь стыковка соседних элементарных кривых Безье происходит в точкеV3. Три опорные точкиV2V3,V4лежат на одной прямой, что приводит к непрерывности касательного вектора. В дополнении к этому пять опорных точекV1,V2,V3,V4,V5лежат в одной плоскости, что приводит к непрерывности вектора кривизны.

Соседние файлы в папке Lab_03