Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Curves.doc
Скачиваний:
51
Добавлен:
01.09.2019
Размер:
4.51 Mб
Скачать

Кривые b-spline/nurbs: Множественное Введение Узла

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

Замечание (Наблюдение) I: Коэффициенты для Вычисления Новых Контр. Точек

Начнем с простого случая. Пусть t вводится в середине узлового интервала [uk, uk+1) и пусть степень будет равна p. Коэффициенты ai,1, где k-p+1 <= i <= k, вычисляются следующим образом:

ai,1 = (t - ui) / (ui+p - ui)

После введеиня t, он становится узлом, а узлы uk+1, uk+2, ..., um сдвинутся на одну позицию вправо. Говоря точнее, новые узлы, v0, v1, ..., vk, vk+1, ..., vm и vm+1 - это

v0

v1

.....

vk

vk+1

vk+2

.....

vm

vm+1

u0

u1

.....

uk

t

uk+1

.....

um-1

um

Пожалуйста, заметьте, что vk+1 делит новый узловой вектор на две половины. Узлы слева от vk+1 = t равны соответствующим значениям исходных узлов, а справа от t удовлетворяют отношению vh = uh-1.

Если t вводится снова, то он лежит на узловом интервале [vk+1,vk+2). Так как t равно левому краю, то это второе введние делает vk+1 двойным узлом. Коэффициенты ai,2 для этого второго введения, основываясь на новой узловой последовательности, вычисляются так:

ai,2 = ( t - vi ) / ( vi+p - vi ) ,

где i меньше или равно k+1. Переписывая вышеуказанное выражение через u, получим

ai,2 = ( t - ui ) / ( ui+p-1 - ui )

Пожалуйста, заметьте, что ui находится слева от t = vk+1, а ui+p - справа от v = vk+1.

Пусть эта новая последовательность узлов будет wi. Соотношение с началом координат будет таким:

w0

w1

.....

wk

wk+1 = wk+2

wk+3

.....

wm+1

wm+2

v0

v1

.....

vk

vk+1

vk+2

.....

vm

vm+1

u0

u1

.....

uk

t

uk+1

.....

um-1

um

Пусть t вводится третий раз, при этом узел wk+1 становится тройным. Несложно увидеть, что коэффициенты ai,3 для этого третьего введения вычисляются так:

ai,3 = ( t - wi) / ( wi+p - wi)

Это можно переписать так:

ai,3 = ( t - ui) / ( ui+p-2 - ui)

Обобщая эту идею, получим, что ai,h, коэффициенты для h-го введения, вычисляются так:

ai,h = ( t - ui) / ( ui+p-(h-1) - ui)

Что, если исходный узловой вектор uk - это множественный узел множественности s и t вводится в uk? Изменит ли это вышеуказанную формулу? К счастью, ничего не изменится. Посмотрим, почему. Если uk - это множественный узел множественности s, то uk = uk-1 = uk-2 = ... = uk-s+1:

w0

w1

.....

wk-s+1 = ... = wk-2 = wk-1 = wk = wk+1 = wk+2

wk+3

.....

wm+1

wm+2

v0

v1

.....

vk-s+1 = ... = vk-2 = vk-1 = vk = vk+1

vk+2

.....

vm

vm+1

u0

u1

.....

uk-s+1 = ... = uk-2 = uk-1 = uk = t

uk+1

.....

um-1

um

Из-за того, что все они лежат слева от t и из-за того, что сдвиг индексов влияет только на узлы, лежащие справа от t, формула вычисления ai,h не будет изменяться. Таким образом, мы заключаем, что

Если новый узел t вводится в узловой интервал [uk, uk+1) h раз, то коэффициенты ai,h могут быть рассчитаны так:

ai,h = ( t - ui ) / ( ui+p-(h-1) - ui )

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]