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

Пример 3: Введение Узла в Существующем Множественном Узле

А что, если новый узел t вводится в монжественный узел? Пусть t вводится в узел uk множественности s. Таким образом, имеем s последовательных одинаковых узлов: uk = uk-1 = uk-2 = .... = uk-s+1 и uk-s+1, не равный uk-s. В вычислении коэффициентов ak, ...., ak-p+1, имеем следующее:

ak = (t - uk) / (uk+p - uk) = (uk - uk) / (uk+p - uk) = 0 ak-1 = (t - uk-1) / (uk+p-1 - uk-1) = (uk - uk-1) / (uk+p-1 - uk-1) = 0 .......... ak-s+1 = (t - uk-s+1) / (uk-s+1+p - uk-s+1) = (uk - uk-s+1) / = 0

Отсюда, коэффициенты ak, ...., ak-p+1 все равны нулю и, следовательно, имеем

qk = (1 - ak)pk-1 + akpk = pk-1 qk-1 = (1 - ak-1)pk-2 + ak-1pk-1 = pk-2 .......... qk-s = (1 - ak-s+1) pk-s + ak-s+1pk-s = pk-s

Это показывает, что, если новый узел t вводится в существующий узел uk множественности s, то последние s новых контр. точек, qk, qk-1, ..., qk-s+1 равны исходным контр. точкам pk-1, pk-2, ..., pk-s. Если s = 1 (т.e. это простой узел), qk равно pk-1, что как раз и обсуждалось во 2 примере. Если s = 0 (т.e. t не является узлом), то все контр. точки от pk-p до pk являются зависимыми [involved]. Это случай из 1 Примера. Следующая диаграмма показывает схему вычислений:

Введение Узла для Кривых nurbs

Только что обсуждалось введение узла для кривых B-spline. Так как кривые NURBS - это проекции 4D-кривых B-spline на 3D-пространство, то введение узлов для кривых NURBS - это довольно просто. Заметьте, вышеизложенное обсуждение и вычисления не требуют, чтобы контр. точки были в трехмерном пространстве. Таким образом, введение узла для кривых NURBS делается в три шага: (1) преобразуем данную кривую NURBS в 3D в кривую B-spline в 4D, (2) проводим введение узла для этой четырехмерной кривой B-spline, и (3) проецируем новый набор контр. точек обратно на трехмерное пространство, чтобы получить новый набор контр. точек для данной кривой NURBS после введения узла.

Пусть имеется n + 1 контр. точек p0, p1, ..., pn с соответствующими весами w0, w1, ..., wn, узловой вектор U и степень p. Пусть pi = (xi, yi, zi). Тогда контр. точки Pi = ( wixi, wiyi, wizi, wi ), 0 <= i <= n и узловой вектор U определяют четырехмерную кривую B-spline степени p. Мы можем ввести узел t в эту четырехмерную кривую B-spline, получим новый набор контр. точек Qi = ( Xi, Yi, Zi, Wi ), 0 <= i <= n. Проецируем эти контр. точки обратно на трехмерное пространство с помощью деления первых трех составляющих на четвертую, и получаем новый набор контр. точек для данной кривой NURBS.

Рассмотрим пример. Допустим, есть 9 узлов

u0 - u3

u4

u5 - u8

0

0.5

1

и кривая NURBS 3 степени, построенная по 5 контр. точкам на плоскости xy:

x

y

w

p0

-70

-76

1

p1

-70

75

0.5

p2

74

75

4

p3

74

-77

5

p4

-40

-76

1

Вот кривая и ее базисные функции.

Давайте введем новый узел t = 0.4. Так как t на узловом интервале [u3, u4), а степень кривой NURBS равна 3, то зависимые точки - это p3, p2, p1 и p0. Так как это кривая NURBS, мы будем использовать [homogeneous] кординаты, умножив все контр. точки на соответствующие им весы. Назовем эти новые точки Pi:

x

y

w

P0

-70

-76

1

P1

-35

37.5

0.5

P2

296

300

4

P3

370

-385

5

Заметьте, так как на P4 не влияет введение узла, она не вычисляется в этой таблице. Затем, вычисляем a3, a2 и a1:

a3 = (t - u3)/ (u6 - u3) = (0.4 - 0)/(1 - 0) = 0.4 a2 = (t - u2)/ (u5 - u2) = (0.4 - 0)/(1 - 0) = 0.4 a1 = (t - u1)/ (u4 - u1) = (0.4 - 0)/(0.5 - 0) = 0.8

Новые контр. точки Q3, Q2 и Q1 - это

Q3 = (1 - a3)P2 + a3P3 = ( 325.6, 26, 4.4 ) Q2 = (1 - a2)P1 + a2P2 = ( 97.4, 142.5, 1.9 ) Q1 = (1 - a1)P0 + a1P1 = ( -42, 14.8, 0.6 )

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

q3 = ( 74, 5.9 ) с весом 4.4 q2 = ( 51.3, 75 ) с весом 1.9 q1 = ( -70, 24.6 ) с весом 0.6

Вот конечный вид кривой NURBS и ее базисных функций:

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