Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Основы САПР. CAD CAM CAE

.pdf
Скачиваний:
13
Добавлен:
19.11.2023
Размер:
29.79 Mб
Скачать

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)

r

ti+k-r - t

l

ti+k-r - t;

1-

Р[ носит название точки де Бура. Обратите внимание, что под Р;0 в выраже­

нии (Ж.6) понимается Р;.

Делая в уравнении (Ж.6) подстановку r = (k- 1), получим

 

Р(и) = P,k-1 N 11 (и)= Р/-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, = 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 +-Рз;

 

- 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--)

 

 

515

i

-

1

k + 1 +

j:

 

 

d1

u

t[i]:

d2

• t[i+k-r]

u:

A[j]

(d1 * A[j]

+ d2 * A[j-1])/(d1 + d2):

}

*R • A[k-1]:

Приложение 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(и).

 

 

;~о

i·l-k+l

 

Из формулы (И.1) получаем:

 

 

 

 

dР(и) =

± P;(k- 1JN;,k-l(и)

_ Ni+l.k-l(и)] =

 

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

 

Замена (i + 1) наj во втором слагаемом формулы (И.8) даст

Таким образом, мы имеем

dР(и)

-- =

1

L Р/ N;.k-1 (и), i·f-k+2

где

Р/ =(k-1) Р; -Р;-1.

ti+k-1 - t;

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