книги / Основы САПР. CAD CAM CAE
.pdf514 |
Приложение Ж. Вычисление В-с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.