Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИГС / Lab_03 / labor_03b.doc
Скачиваний:
9
Добавлен:
17.04.2018
Размер:
330.75 Кб
Скачать

Бикубическая b-сплайновая поверхность.

Создадим бикубическую элементарную B-сплайновую поверхность. Для этого обратимся к общей формуле (72) для сплайновой поверхности в тензорном виде. В качестве опорных векторов возьмем 16 опорных векторов, которые оформим в виде следующей матрицы опорных векторов:

(84)

В качестве функций ai(u),bj(v) в формуле (72) возьмем кубическиеB-сплайновые функции (39)B3,i(t).

Элементарная бикубическая B-сплайновая поверхность будет иметь следующий вид:

(85)

Уравнение (85) можно переписать в матричном виде. Введем два столбца, элементами которых являются разные степени параметров u,v:

(86)

Теперь, если взять матрицу B-сплайна (49)MB, то уравнение (85) можно записать в следующем виде:

(87)

Создадим программу gr3D04.cppкоторая строит элементарнуюB-сплайновую поверхность. Возьмем за основу программуgr3D02.cppи переделаем ее. Изменения будут совсем незначительные.

Во-первых, заменим функцию, вычисляющую 4-ре функции Безье, на функцию, вычисляющую 4-ре B-сплайновые функции.

//четыре В-сплайновые функции

double Bspline(int i, double t)

{

double b;

double t2 = t*t, t3 = t2*t;

switch(i)

{

case 0: b = (1 - 3*t + 3*t2 - t3)/6; break;

case 1: b = (4 - 6*t2 + 3*t3)/6; break;

case 2: b = (1 + 3*t + 3*t2 - 3*t3)/6; break;

case 3: b = t3/6; break;

}

return b;

}

Во-вторых, заменим все названия, связанные функциями Безье, на названия, связанные с B-сплайновыми функциями.

На Рис.38 изображена элементарная бикубическая B-сплайновая поверхность, построенная по формулам (85).

Составная B-сплайновая поверхность строится аналогично составной поверхности Безье. Однако имеются отличия.

Первое отличие касается числа опорных векторов. Если составная поверхность содержит NeMeэлементарных поверхностей, то число опорных векторов будет равноNM, где.

(88)

Второе отличие состоит в способе выбора 16 опорных векторов из матрицы векторов (79). При создании составной поверхности Безье мы скользили по матрице (79) вправо с шагом в 4-е столбика и вниз с шагом в 4-е строчки. При создании же составной B-сплайновой поверхности надо скользить по матрице (79) вправо с шагом в один столбик и вниз с шагом в одну строчку.

На Рис.39 изображена составная B-сплайновая поверхность. Эта поверхность состоит из 6-ти элементарных поверхностей. Число опорных точек равно 30. На каждую элементарнуюB-сплайновую поверхность наложена текстура в виде цветка. Каждый узор окрашен своим цветом. Полигональная сетка была построена по опорным точкам и окрашена белым цветом.

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

Теперь мы не будем закреплять граничные опорные точки на поверхности сферы, как все остальные опорные точки. Наоборот, положение граничных точек будет определяться положением внутренних опорных точек.

Перенесем соотношения (44) для B-сплайновых кривых, наB-сплайновые поверхности. Обратимся к матрице опорных векторов (79), и наложим следующие условия на граничные опорные векторы.

(89)

На Рис.40 изображена составная B-сплайновая поверхность с закрепленными концами. Для опорных векторов этой поверхности использованы соотношения (89).

Рис.39

Составная бикубическая B-сплайновая поверхность, составленная из 6-и элементарныхB-сплайновых поверхностей. Полигональная сетка построена на 30-ти опорных точках.

Рис.40

Составная бикубическая B-сплайновая поверхность с закрепленными концами.

(Изображение на Рис. 39, 40 создано программой gr3D05.cpp.)

На Рис.40 видно, что граничные опорные точки являются вспомогательными точками. Поэтому полигональную сетку лучше строить только по внутренним точкам, как это показано на Рис.41.

СоставнуюB-сплайновую поверхность можно замкнуть двумя крайними границами. Вспомним условия (45), которые приходиться накладывать на граничные опорные векторы, что замкнутьB-сплайновую кривую. Если эти условия применить к трем столбикам опорных векторов, стоящих с левой стороны матрицы (79), и к трем столбикам опорных векторов, стоящих с правой стороны матрицы (79), то эти условия примут следующий вид:

(90)

Условия (90) означают, что составная B-сплайновая поверхность замыкается по левой и правой границам.

Если потребовать, чтобы сплайновая поверхность была закреплена по верхнему и нижнему краям, то необходимо добавить условия, аналогичные условиям (89).

(91)

На Рис.42 изображена составная бикубическая B-сплайновая поверхность, замкнутая по левой границе и правой границе, и закрепленная по верхнему и нижнему краям.

Рис.41

Составная бикубическая B-сплайновая поверхность с закрепленными концами. Полигональная сетка построена по внутренним опорным точкам. Граничные опорные точки не приведены на рисунке.

Рис.42

Составная бикубическая B-сплайновая поверхность, замкнутая по левой границе и правой границе, и закрепленная по верхнему и нижнему краям.

(Изображение на Рис. 41 создано программой gr3D05.cpp.)

(Изображение на Рис. 42 создано программой gr3D06.cpp.)

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