512 |
Приложение Ж. Вычисление В-сnлайновой кривой по методу Кокса-де Бура |
|
1 |
|
|
|
""'2 |
N;.k-2, |
(Ж.4) |
|
Р(и) = ~Р; |
|
i=l-k+З
где Р/определяется следующим образом:
р;2-- и -t; р1; + (1-
ti+k-1 - t;
и -t; )р1
i-1·
ti+k-2 - t;
Иными словами, Р;2 также представляет собой внутреннюю точку разбиения сег
мента линии Р/Р;~1 •
Повторив ту же процедуру Произвольное число раз r, мы получим:
1 |
|
Р(и) = L Р[Ni.k-r (и), |
(Ж.5) |
i=l-k+r+1 |
|
где |
|
Р!= и-t; pr-1+(1- и~t; )Р!~1 |
(Ж.6) |
Р[ носит название точки де Бура. Обратите внимание, что под Р;0 в выраже
нии (Ж.6) понимается Р;.
Делая в уравнении (Ж.6) подстановку r = (k- 1), получим |
|
Р(и) = P,k-1 N 1•1 (и)= Р/-1 |
(Ж.7) |
Поэтому мы можем сказать, что координаты точки, соответствующей значению
параметра и в диапазоне t 1 :5; и :5; t1+1, - это координаты Р/-1 , получаемые путем
рекурсивного разбиения сегментов линий между соответствующими точками,
начиная с сегмента между двумя исходными задающими точками.
ПримерЖ.1
Для кривой В-сплайна, показаиной в примере 6.4, вычислите координаты точки, соответствующей и= 2,5, используя алгоритм Кокса-де Бура.
Решение
В соответствии с условием примера 6.4 значения узлов таковы:
to = О, t1 = О, t2 = О, tз = 1, t4 = 2, ts = 3, tб = 4, t1 = 4, ts = 4.
Таким образом, в данном случае 1становится равным 4, поскольку t4 :5; 2,5 :5; t5,
и в соответствии с уравнением (Ж.7) Р(2,5) = Р}. Используя уравнение (Ж.6), можно выразить Р1как
Р} = и-t4 |
|
р~ +(1- |
и-t4 |
)р~ = |
t4+k-2 - t4 |
|
|
t4+k-2 - t4 |
|
_ и-t4 р1 |
+ |
( |
1 |
и-t4 |
)pl _ |
(Ж.8) |
--- 4 |
|
|
--- |
з- |
|
ts -t4 |
|
|
|
ts -t4 |
|
|
=0,5Pl +0,5Р~.
Обратите внимание, что при выводе уравнения (Ж.8) были подставлены значе ния k = 3 и и = 2,5.
Можно также получить Pl и Р~, используя уравнение (Ж.6):
Вычисление В-сплайновой кривой по методу Кокса-де Бура |
|
513 |
P l |
и-t4 |
( |
и-t4 ) |
1 |
3 |
(Ж.9) |
4 |
=---Р4 + |
|
1 ---- |
Рз =-Р4 +-Рз; |
|
tб - t4 |
|
t6 - t4 |
4 |
4 |
|
P t |
и-t3 |
( |
и-t3 ) |
3 |
1 |
(Ж.10) |
з =--Рз + |
|
1 --- |
Р2 =-Рз +-Р2. |
|
t 5 - t3 |
|
t 5 - t3 |
4 |
4 |
|
Обратите внимание, что Р;0 заменяется наР;. как и прежде.
Теперь можно найти точку Р(2,5) на кривой (см. рис. 6.6), используя уравне
ния (Ж.10), (Ж.9) и (Ж.8), как показано на рис. Ж.1.
Ps
Рис. Ж.1. Создание точки Р{
Рисунок Ж.1 показывает, что исходная кривая В-сплайна разделена на две кри
вые В-сплайна того же порядка, как это делалось для кривых Безье: одна кривая
определена задающими точками Р0, Рр Р2, Р~ и Pi, а другая- Pi, Р1, Р4 и Р5.
Первая кривая В-сплайна имеет пять задающих точек (n =4) и порядок 3 (k = 3), так что она имела бы узловые значения [О О О 1 2 2,5 2,5 2,5]. Аналогичным обра
зом, вторая кривая В-сплайна имела бы узловые значения [2,5 2,5 2,5 3 4 4 4].
Процесс итеративного вычисления Р/-1 с использованием уравнения (Ж.6) мож
но иллюстрировать схематически (рис. Ж.2). Любая точкаР( определяется верх
ним левым соседом Р(_~1 и левым соседом Р(-1 , следовательно, новые точки, соз даваемые в процессе рекурсии, образуют нижний треугольник с вершиной в Р1*-1
Эта схематическая диаграмма содержит дополнительную полезную информа цию. Мы показали, что кривая В-сплайна порядка 3 в процессе применения ал
горитма Кокса-де Бура в примере Ж.1 может быть разделена на две кривые В
сплайна того же порядка. Эту идею можно распространить на кривую В-сплайна любой степени, как и в случае кривых Безье. На самом деле две группы точек на
рис. 6.12, окруженные пунктирными линиями,- это задающие точки двух кри
вых В-сплайна, полученных путем разделения исходной кривой В-сплайна, оп
ределенной точками Р0 , Р1 , ... , Р., в точке, где параметр и принимает значение t 1 ::>и::> t1+t· Таким образом, кривую В-сплайна любого порядка можно разбить на
множество кривых В-сплайна того же проядка, многократно применяя алгоритм
Кокса-де Бура, и результируюшие задающие многоугольники будут достаточно
514 |
Приложение Ж. Вычисление В-сnлайновой кривой по методу Кокса-де Бура |
близко аппроксимировать исходную кривую, как и в случае применения алго ритма де Кастильо для аппроксимации кривой Безье. Такая аппроксимация пря
молинейными сегментами может использоваться для вычисления начальных
значений точек пересечения между кривыми В-сплайна. Алгоритм Кокса
де Бура может быть реализован на языке С (листинг Ж.1).
Ро
.
•
•
Рис. Ж.2. Схема вычисления p,k-1
Листинг Ж.l. Реализация алгоритма Кокса -де Бура на языке С
Сох de Boor(k. t. Р. u. 1. R)
iпt- - |
k: |
|
/* порядок В-сплайна */ |
|
Кпоt |
*t: |
|
/* |
последовательность узлов |
*/ |
Poiпt |
*Р: |
|
/* |
задающие |
точки */ |
|
douЫe |
u: |
|
/* |
значение |
параметра */ |
|
iпt |
1: |
|
/*целое число. такое. что |
t[1] <• u < t[1+1] */ |
Poiпt |
*R: |
|
/* |
P(u) */ |
|
|
{ |
|
A[MaxOrder]: |
|
|
Poiпt |
|
|
|
i пt |
|
i . |
j. |
r: |
|
|
douЫe |
dl. |
d2: |
|
|
for(j•O: |
j<k: |
j++) |
|
|
A[j] • P[1-k+l+j]: |
|
|
for(r•l: |
r<k: |
r++) { |
|
|
for(j•k-1: j>•r: j--) |
|
|
Приложение 3
Объединение В-сплайнов
Чтобы получить новые задающие точки и узловые значения объединенной кри
вой, мы предположим, что объединяемые кривые имеют одинаковый порядок.
В противном случае перед тем как выполнить объединение, нам придется изме
нить ту кривую, у которой порядок меньше, придав ей тот же порядок, что и у дру
гой кривой (то есть мы будем находить узловые точки и узловые значения экви валентной кривой боле высокого порядка). Эта процедура описывается в [38].
Обозначим уравнения первого и второго В-сплайна порядка k как P 1(u) и P 2(u),
соответственно. Далее предположим, что P 1(u) определяется задающими точка
ми Q (i =О, 1, ..., n) с узловыми значениями v; (i =О, 1, ..., n + k). Аналогичным об
разом, P 2(u) определяется задающими точками R; (i =О, 1, ...,т) с узловыми зна
чениями W; (i =О, 1, ...,т+ k). Обратите внимание, что Qn- это то же самое, что
и R0 (рис. 3.1).
Рис. 3. 1. Обьединение IJIJVX В-сnлайнов
Тогда уравнения P 1(u) и P 2(u) могут быть записаны следующим образом:
Р1(и)=f Q;N;.k(u); |
(3.1) |
,. |
|
P2 (u) =:LR;N;,k(u). |
(3.2) |
;.о
Теперь определим задающие точки и узловые значения объединенной кривой (без вывода). Мы проверим результат, показав, что объединенная кривая в своих соответствующих частях представляет исходные кривые. Во-первых, множество
задающих точек объединенной кривой Р; представляет собой простое объедине
ние множеств задающих точек двух кривых:
|
Р. ={Q; |
(i=O, ... ,n); |
(3.3) |
|
' R;-n |
(i = n+ 1, ... , т+ n). |
|
|
...,
Объединение 8-сплайнов |
517 |
|
|
|
Обратите внимание, что R0 не фигурирует в уравнении (3.3), поскольку это то
же самое, что и Q".
Узловые значения объединенной кривой находятся путем слияния двух наборов
узловых значений, после того как все узлы w; будут сдвинуты так, что w0 будет равняться Vn+k· Нам известно, что сдвиг всех узлов на одно и то же расстояние не
влияет на уравнение кривой, поскольку важность имеет только разность между
узловыми значениями. При объединении двух наборов узловых значений не
которые из них, соответствующие точке сопряжения между двумя кривыми,
исключаются, так что они будут повторяться только k- 1 раз. Если количество
повторений больше, чем k - 1, получившаяся объединенная кривая не может рассматриваться как один В-сплайн и, таким образом, не удовлетворяет соотно
шению, определяющему число задающих точек, их порядок и количество узло
вых значений. Процесс получения узловых значений для объединенной кривой
иллюстрирует рис. 3.2. Узловые значения W; сдвигаются на расстояние (vп+k- w0),
так что узловое значение w0 становится равным Vn+l• и из попарно равных узло
вых значений Vn+l• ••• , Vn+k и w1, ..., wk-l оставляются только (k- 1) узлов от v"+ 1до
Vn+k· Таким образом, узловые значения, которые будут использоваться для объе
диненной кривой, находятся, как показано штриховыми прямоугольниками на
рис. 3.2, и могут быть выражены следующим образом:
|
(i =О, ... , n + k = 1); |
|
|
|
|
(3.4) |
|
|
|
kраз |
|
|
·------------~---~'--------..' |
[ VO |
Vl ' ' ' Vk-1 Vk Vk+l ' ' ' Vn |
Vn+1 |
' ' ' Vn+k-11 |
Vn+k |
\....._ |
_,/ |
|
|
г:------·---, |
|
Wo |
w1 |
wk-1 |
1 wk wk+1 • • • Wm+ki |
kраз
'~-----------~'
kраз
Рис. 3.2. Объединение узловых значений
Теперь убедимся, что объединенная кривая, которая определяется задающими
точками и узловыми значениями, заданными формулами (3.3) и (3.4), совпадает
с двумя исходными В-сплайнами в каждой из соответствующих частей. Рассмот
рим часть кривой, соответствующую интервалу t" (= v") и tn+t (= Vn+t = Vn+2 =... =
= Vn+k- 1). Мы знаем, что N".1(и) - единственная функция сопряжения первого
порядка, не убывающая в данном диапазоне и. Распространяя эффект N",1(и) (рис. 6.5), мы найдем, что Nn-k+l.k(и), Nn-k+2,k(и), N",k(и) являются иенулевыми
функциями сопряжения порядка k. Таким образом, кривая определяется задаю
щими точками P"_k+l• P"_k+2, ..., Р". Эти задающие точки совпадают с точками Q.-k+l• Q"-k+2, ..., Q". Далее, подмножество узловых значений объединенной кривой, уча ствующих в вычислении функций сопряжения Nn-k+l.k(и), Nn-k+2.k(и), ..., N",k(и),
будет совпадать со значениями, входящими в Р1(и). Из этого мы можем заклю
чить, что объединенная кривая Р(и) совпадает с Р1(и) для значений и в иитерва
ле t" и tn+t· К тому же заключению мы придем в случае, когда и находятся .меж-
518 |
Приложение 3. Обьединение В-сплайнов |
|
|
|
ду узловыми значениями, меньшими t". Таким же образом можно показать, что
Р(и) совпадает с Р2(и) при и t"+k·
Пример 3.1
Два непериодических однородных В-сплайна порядка 4, один из которых опре
делен задающими точками Р1, Р2, Р3 и Р4, а другой- Q1 (= Р3), Qz, Qз и~. тре
буется представить с помощью объединенного В-сплайна. Найти узловые значе
ния объединенной кривой.
Решение
Кривая В-сплайна, определенная точками Р;, будет иметь узловые значения
О О О О 1 1 1 1, а кривая, определенная точками Q, - узловые значения
О О О О 1 2 2 2 2. Чтобы сделать первое узловое значение из второго набора рав ным последнему узловому значению первого набора, узловые значения второго набора сдвигаются на 1, в результате чего получаются значения 1 1 1 1 2 3 3 3 3.
После этого два набора узловых значений объединяются, и некоторые из узло
вых значений, равные 1, удаляются, чтобы они фигурировали только три (то есть k - 1) раза. Соответственно, объединенная кривая будет иметь узловые зна чения О О О О 1 1 1 2 3 3 3 3.
Приложение И
Доказательство формулы
дифференцирования В-сплайна
Чтобы доказать формулу (6.43), сначала докажем справедливость следующего
соотношения:
N;,r(и)=(r-1){ Ni.r-l~и)-Ni+l,:l(и)}· |
(И.1) |
ti+r-1 t; ti+r ti+l |
|
Для доказательства (И.1) мы перепишем уравнения (6.32) и (6.33) более удоб
ным образом:
|
|
|
|
|
t; ~и~ ti+l |
|
|
|
(И.2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
во всех остальных случах |
|
|
|
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
N ( |
и |
) |
и- t; |
N ( |
и |
) |
+ |
t;н -и N |
( |
и |
) |
(И.3) |
i,r |
|
= t. |
_ t. |
i,•·-1 |
|
i+l,r-1 |
|
· |
|
|
|
t+r-1 |
1 |
|
|
|
|
ti+r -ti+l |
|
|
|
|
Теперь выведем формулу (И.1), рассуждая по индукции. Иными словами, мы покажем, что уравнение (И.1) справедливо при r = k, если установлена его спра ведливость при r = k- 1. Мы также покажем, что равенство (И.1) выполняется при r = 2. В таком случае оно должно выполняться и при r =3. Повторяя это ин
дуктивное рассуждение с увеличением r, мы можем доказать, что формула (И.1)
выполняется для всех r.
Первым делом покажем, что равенство (И.1) выполняется при r = 2. Подставляя r = 2 в (И.3), получим
и-t. |
Ni.l(и)+ |
t. |
2 |
-и |
|
N;,2 (и)= |
' |
•+ |
|
N;+1,1 (и). |
(И.4) |
ti+l |
- t; |
|
|
ti+2 |
- |
ti+l |
|
Дифференцирование уравнения (И.4) дает |
|
|
|
|
. |
|
N;,1 |
(и) |
N;+1•1 (и) |
|
N 2 (и) = |
ti+l |
- |
ti+2 |
, |
|
/, |
|
-t; |
-ti+l |
|
что эквивалентно уравнению (И.1) при ,. = 2. |
|
|
|
Предполагая, что' (И.1) справедливо для r = k- 1, имеем |
|
N;.k-l(и)=(k-2){ Ni.k-2~и)- Ni+l,k~(и)}· |
(И.S) |
|
|
ti+k-2 |
t; |
|
ti+k-1 ti+ 1 |
|
Теперь с помощью уравнения (И.S) нам необходимо показать, что уравнение (И.1) справедливо при r =k. Подставляя r =k в уравнение (И.3) и дифференцируя его
520 |
|
|
|
Приложение И. Доказательство формулы дифференцирования В-сnлайна |
N. |
( |
и |
)= Ni.k-l(и)- Ni+l.k-l(и)+ |
|
и-t; |
N'. |
|
(и)+ |
ti+k |
-и |
N'. |
(и) |
(И6) |
i,k |
|
ti+k-1 - t; |
|
ti+k |
- ti+l |
|
ti+k-1 - t; |
l.k-1 |
|
ti+k - |
ti+l |
t+l,k-1 |
. |
. |
|
|
|
|
|
|
|
|
|
|
|
|
Возьмем выражения zil;,"_1(и) и Ni+l.k-l (и) йз уравнения (И.S) |
и подставим их |
в уравнение (И.6): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
zil;,k(и)= { |
N;,k-1 ~и) |
_ Ni+l,~l(и)}+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ti+k-1 |
t; |
|
ti+k |
ti+l |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ { |
k -2 |
t; |
[ |
и - t.1 |
Ni.k-2 (и)- |
и- |
|
t.1 |
Ni+l.k-2 (и)]} + |
|
(И.7) |
|
|
|
|
ti+k-1 - |
ti+k-2 |
- |
t; |
|
|
ti+k-1 - t; |
|
|
|
|
|
|
|
|
+ { |
k -2 |
|
[ |
ti+k |
-и |
N i+l.k-2 ( и) |
- |
|
ti+k |
-и |
N i+2,k-2 ( и>]}. |
|
|
|
|
|
|
ti+k - ti+l |
ti+k-1 |
- |
ti+l |
|
|
|
ti+k - |
ti+2 |
|
|
|
|
Теперь перепишем второе слагаемое, прибавив и вычтя член |
|
|
|
|
|
|
|
|
|
|
|
ti+k-1 |
-и N |
|
( |
и |
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t |
|
- |
t |
i+l,k-2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i+k-1 |
|
i+t |
|
|
|
|
|
|
|
|
|
|
|
и затем применив формулу (И.З):
Второе слагаемое= |
|
k-2 |
[ и-t; |
Ni.k-2 |
(и)+ |
ti+k-t -и |
Ni+t,k-2 (и)- |
|
|
_ |
|
_ |
|
_ |
|
|
|
|
|
ti+k-t |
t; |
ti+k-2 t; |
|
|
|
|
|
|
ti+k-t |
ti+t |
|
|
ti+k-t -и |
N . |
|
() |
и-t; |
N |
|
( |
и |
>] |
= |
|
|
|
t |
- t |
i+l.k-2 |
и |
- |
t |
- t |
i+l.k-2 |
|
|
|
|
|
|
i+k-1 |
i+l |
() |
|
i+k-1 |
i |
|
|
|
|
|
|
|
|
|
= |
k-2 |
|
[N |
t;+k-1 |
-t; |
N |
( |
и |
>] |
= |
|
|
|
- |
t; |
i.k-1 |
и |
- |
|
- |
|
i+l,k-2 |
|
|
|
|
|
|
ti+k-t |
|
|
|
ti+k-t |
ti+t |
|
|
|
|
|
|
|
|
|
|
= |
k- 2 |
t; |
Ni.k-1 (и)- |
|
k- 2 Ni+t.k-2 (и). |
|
|
|
|
|
ti+k-t - |
|
|
|
ti+k-t - |
ti+l |
|
|
|
|
|
|
|
|
|
|
Изменим порядок суммирования во втором и третьем слагаемом формулы (И.7):
Второе слагаемое + Третье слагаемое =
k-2 |
k-2 |
[ t.k-и |
Ni+l,k-2 (и)- |
= |
Ni.k-t (и)+ |
|
l+ |
· |
ti+k-1 |
-t; |
ti+k -ti+l |
ti+k-t |
-ti+l |
|
Наконец, добавив этот результат к первому слагаемому в формуле (И.7), полу
Докаэательсrво формулы дифференцирования В-сплайна |
521 |
|
|
|
(Первое слагаемое)+ (Второе слагаемое + Третье слагаемое) =
= (1)[ Ni.k-1 ~и) _ Ni+l.~l(и)]+(k _ 2)[ N;.k.,.l ~и) _ N;.1,~1(и)]=
ti+k-1 t; ti+k ti+l ti+k-1 t; ti+k ti+l
= (k _ 1)[ Ni.k-1 (и) |
Ni+l.~l(и)]· |
ti+k-1 - t; |
ti+k ti+l |
Результат идентичен формуле (И.1).
Теперь докажем формулу (6.43) с помощью формулы (И.1). Перепишем произ
водную первого порядка от кривой В-сплайна при условии, что значение пара
метра и находится в интервале t 1 и t1+ 1, следующим образом:
dР(и) = f,P;Z\T;.k(и)= ±PJ{;.k(и).
|
|
dи |
;~о |
i·l-k+l |
|
Из формулы (И.1) получаем: |
|
|
|
|
dР(и) = |
± P;(k- 1JN;,k-l(и) |
_ Ni+l.k-l(и)] = |
dи |
|
i=l-k+l |
Lt;+k-1 - t; |
t;+k - ti+l |
(И.8) |
= ± |
P;(k -1) N;,k-1 (и) - |
±P;(k -1) Ni+l,k-1 (и). |
i=l-k+2 |
|
|
ti+k-1 - t; |
igl-k+l |
ti+k - |
ti+l |
Обратите внимание, что мы сократили диапазон суммирования в формуле (И.8),
зная, что N_k+ |
,н(и) =О и N+t.k-t(и) =О при t 1 и t1+ |
1· |
1 |
1 |
1 |
|
Замена (i + 1) наj во втором слагаемом формулы (И.8) даст
Таким образом, мы имеем
1
L Р/ N;.k-1 (и), i·f-k+2