книги / Основы САПР. CAD CAM CAE
.pdf172 |
Глава б. Представление кривых и работа с ними |
о При изменении порядка вершин многоугольника на противоположный полу
чается та же самая кривая.
Задавшись этими требованиями, Безье выбрал в качестве функций сопряжения
полином Бернштейна:
В;,п(и)= (~)и;(1-и)"-i, |
(6.15) |
где
(~)=i!(:~i)l'
Если функцию сопряжения (6.15) применить к вершинам многоугольника, по
лучается уравнение кривой Безье: |
|
Р(и)=ta(~)u;(1-иy-ipjl |
(6.16) |
где Р; - радиус-вектор i-й вершины. Верiшшы многоугольника называются за
дающими (cont1'ol vertices), как и сам многоугольник (control polygon). Из форму
лы (6.16) видно, что для кривой, заданной n + 1 точками, максимальная стеnень
будет и". Таким образом, степень кривой Безье определяется количеством задаю
щих точек. Кривые Безье разных степеней с разным количеством задающих то
чек показаны на рис. 6.3.
а |
б |
в |
Рис. 6.3. Кривые Безье различных степеней
Покажем теперь, что кривая Безье, заданная уравнением (6.16), удовлетворяет требованиям, перечисленным в начале раздела. Для начала проверим, что кривая
проходит через nервую и последнюю задающие-.точки. В этом легко убедиться,
подставив в уравнение значения О и 1 параметра и. Раскроем суммирование сле дующим образом:
Р(и)=(~)(1-и)nР0 +(~)и(1-иУ-1Р1 +(;)и2(1-иУ-2Р2 + ...
+ (п:1)п"-1(1-и)1Р"_1 +(:)и"Рn.
Рассчитаем значения Р(О) и Р(1):
Р(О)=(~)Ро =Р0;
Р(1)=(:)Р" =F".
6.4. Кривая Беэье |
173 |
|
|
|
|
Мы убедились, что кривая проходит через первую и последнюю задающие точки.
Второе и третье свойства можно проверить дифференцированием уравнения кривой Безье, чем мы займемся в следующем разделе. Четвертое свойство прове
ряется путем рассмотрения двух кривых, определяемых уравнениями
Р(и)= :t(~)и;(1-иу-iр; (О~и~1); |
(6.17) |
;~о z
и
(6.18)
Уравнения (6.17) и (6.18) можно интерпретировать следующим образом: кривая
Р(и) проводится от точки Р0 к точке Р"' тогда как p•(v) проводится от P 11(=Qo) к
Р0(=~). Если мы введем новый параметр и· и заменим v на (1- и·), направление р• изменится на противоположное (то есть кривая будет идти от Р0 к Р11 при из
менении и· от О до 1). Поэтому мы сможем сказать, что кривыеРи р• идентич ны, если р•(1 -и") при разложении даст нам то же выражение, что и Р(и) с точ
ностью до названий параметров. Мы получим выражение для р·(1 - и"),
подставив (1 - и) вместо v в формулу (6.18). |
|
|
P"(1-u)=,t..~(n), . (1-и)1.и"-1.Р._1 . |
(6.19) |
|
}•О } |
|
|
Перепишем выражение (6.19), подставив в неrо i вместо (n- j): |
|
|
p•(t-u)= ±( |
n .)(1-u)"-;u;P, = |
|
l•n |
n- z |
(6.20) |
= :t( |
|
|
n .) (1-u)"-1u 1P;. |
|
|
;.о |
n- z |
|
Поскольку
эквивалентно
мы можем заключить, что формула (6.20) совпадает с (6.17).
Кривая Безье обладает еще одним важным свойством, помимо перечисленных
выше,- выпуклостью оболочки (convex hull property). Выпуклой оболочкой кри
вой Безье является выпуклый многоугольник, получаемый соединением задаю щих точек (рис. 6.4). Обратите внимание, что на этом рисунке все кривые Безье
полностью лежат внутри своих выпуклых оболочек.
Выпуклость оболочки кривой Безье обеспечивается тем, что значения сопрягаю
тих функций лежат на отрезке [0, 1], а их сумма равна 1 для любого и. Это утвер
ждение легко проверить для кривой Безье, определяемой двумя задающими точ
ками. Кривая, заданная точками Р0 и Р1, будет отрезком прямой, а ее выпуклой
оболочкой будет тот же самый отрезок. Любую точку этой кривой можно полу-
6.4. Кривая Безье |
175 |
Множители
и
в формуле (6.21) могут быть расписаны в явном виде следующим образом:
("+ 1)( |
n )= |
(j+1)n! |
= |
n(n-1)! |
=n(n-1) |
(6.22) |
1 |
j+1 |
(j+1)!(n-j-1)! |
jl(n-j-1)! |
j |
|
|
(n-i)(n)= (n-i)n! = |
n(n-i)! =n(n-1)· |
(6.23) |
||||
|
i |
il(n-i)l |
i!(n-i-1)! |
i |
|
Подстапавка (6.22) и (6.23) в (6.21) дает:
dР(и) = ~п(n~1)иj(1-и)"-j-tpj+t _ ~n(n~1)и;(l-и)"-i-tp; =
dи |
j=O |
1 |
i=O |
z |
(6.24) |
= n~n (n ~1) и;(1-и)"-н(Pi+t -Р;). i=O l
Заменив Р;+1-Р на а;, выразим формулу (6.24) в виде
dР(и) |
~(n..,.1) |
и |
;( |
1-и |
)n-1-i |
а;. |
(6.25) |
-- =nL..J . |
|
|
|||||
dи |
i=O l |
|
|
|
|
|
|
Правая часть формулы (6.25), если забыть о множителе n, стоящем перед знаком суммирования, представляет собой уравнение кривой Безье, заданной точками
ао. а1, ••• ,а.+ Отсюда получаем следующие равенства: |
|
0 |
|
(6.26) |
||||||
[ L |
(n |
-.1) |
и. |
. |
|
= |
|
|
||
n-1 |
|
'(1-иу-•-• а;.J |
|
а |
|
; |
|
|||
r=O |
|
l |
|
|
и•О |
|
|
|
|
|
[~(п~1)и;(1-и)"-•-iа;] |
|
=а._1• |
(6.27) |
|||||||
r=O |
l |
|
|
|
и=1 |
|
|
|
|
|
Равенства (6.26) и (6.27) выражают тот факт, что кривая Безье проходит через
первую и последнюю задающие точки.
Из формул (6.25), (6.26) и (6.27) можно получить значения первой производной
в начальной и конечной точках:
|
|
(6.28) |
dPI |
=па._1 =n(P. -Р"_1). |
(6.29) |
dи |
и•l |
|
Поэтому можно утверждать, что касательные к кривой Безье в ее начальной
и конечной точках совпадают по направлению с первым и последним отрезками
задающего многоугольника. Кроме того, формула (6.25) может использоваться
176 |
Глава б. Представление кривых и работа с н\<IМИ |
|
|
|
|
для рекурсивного определения производных более высоких порядков, поскольку ее правая часть совпадает по форме с уравнением кривой Безье. Отсюда вырЮ~<е
ние для второй производной имеет вид |
|
|
d2P~u) =п(п-1)I(n ~2)и;(1-u)"-2-i Ь;. |
(6.30) |
|
du |
;.о z |
|
где Ь; =а;+!- а;. Выражение (6.30) говорит нам, что вторая производпая в начаJiь
ной точке определяется векторами Р0, Р1, Р2, а в конечной точке - векторами
Р11_2, Р11_1, Р". Продолжая дифференцировать уравнение (6.30), мы будем тем же
путем получать уравнения для производных более высоких порядков. Таким об
разом, мы можем показать, что производвые порядка r в начальной и конечной
точках определяются координатами r + 1 задающих точек.
6.4.2. Вычисление кривой &езье
Даже если у нас есть формула, описывающая кривую, например уравнение кри
вой Безье, это уравнение будет практически бесполезным, если мы не найдем эффективного способа вычислять координаты точек на кривой. Мы знаем, что для отображения кривой необходимо вычислять координаты точек с небольшим
приращением параметра, и делать это достаточно эффективно. Посмотрев на
уравнение кривой Безье (6.15), можно прийти к выводу, что нам придется доста
точно часто вычислять биномиальный коэффициент
(~)
в функции сопряжения В;,11(и), а это требует серьезных затрат. Поэтому нам мо
жет поиадабиться алгоритм, позволяющий вычислить точку на кривой Безье не
посредственно, без вычисления значений биномиальных коэффициентов. Такой алгоритм существует и называется алгоритмом де КастW!ьо (de Casteijau algorithm). Он излагается в приложении Е.
6.5. в-сппайн
Вспомните, что степень кривой Безье определяется количеством задающих то чек, причем все они влияют на форму всей кривой. Эти особенности кривых Бе
зье создают определенные неудобства. Во-первых, при аппроксимации кривой
сложной формы при помощи кривой Безье неизбежно используется множество
задающих точек, в результате чего получается кривая высокого порядка. Такая
кривая может осциллировать, но она к тому же создает большую вычислитель ную нагрузку на компьютер. Почему бы в таком случае не попытаться предста вить ту же исходную кривую множеством кривых Безье низших порядков, чтобы
избежать этих неприятностей? Проблема в том, что соединение кривых с обеспе
чением непрерывности пронзводных нужных порядков оказывается довольно
сложной процедурой.
Во-вторых, трудоемким оказывается локальное изменение формы kривой. Кажет ся естественным переместить задающие точки вблизи изменяемого участка кри вой, и действительно, это приводит к модификации нужной области, но вместе с ней изменяется вся кривая целиком. Эта особенность называется свойством
6.5. в-сnлайн |
177 |
lЛобалыюсти измеиеиий (global modification property). Глобальность изменений
нежелательна при создании кривых заданной формы, поскольку кривые всегда
создаются или проектируются путем непрерывной модификации грубой формы
начального приближения. В системах автоматизированного проектирования же
лательно наличие прямо противоположного свойства - локальиости изменеиий
(/оса/ modification pгoperty).
Описанные недостатки кривых Безье связаны с выбором функций сопряжения.
Таким образом, нам нужно выбрать новый набор функций сопряжения, обла
дающих определенными свойствами. Во-первых, в определение новой функции
сопряжения не должно входить число точек n, в отличие от функции В;,"(и). Сте пень функции сопряжения, а значит, и степень кривой, должны быть независи
мы от числа задающих точек n. Во-вторых, все функции сопряжения должны
быть отличны от нуля только на ограниченных подмножествах значений пара метра, причем для каждой функции такое подмножество должно быть уникаль ным. В этом случае форма сегмента будет определяться только теми задающими
точками, которые учитываются функциями сопряжения, имеющими неиулевые
значения на данном сегменте.
В 1972 г. Кокс [41] и де Бур [43) предложили использовать функции N1.k(и),
определяемые рекурсивно. Кривая, которая строится таким образом, называется
В-сплайном (B-spline) и записывается в следующем виде:
|
|
n |
|
|
|
|
Р(и) =:LP1N;.k(и) |
(tk-l |
~и ~ tk+l ), |
(6.31) |
|||
|
|
i•O. |
|
|
|
|
где |
|
|
|
|
|
|
N "k (и) |
_(и- t; )N;.k-l (и)+ (t;.,.k |
-и)N1.,.1,"_1 (и), |
(6.32) |
|||
- |
ti+k-1 -t; |
|
|
' |
||
'· |
|
|
|
ti+k -t/+1 |
|
|
N |
|
(и)={1 |
t; |
~и ~tl+l; |
(6.33) |
|
|
1•1 |
О в |
противном случае. |
|
||
Значения t1 называются узловыми - |
они ограничивают отрезки значений па |
раметра, внутри которых функции сопряжения имеют иенулевые значения1•
В формуле (6.32) неопределенность 0/0 считается равной нулю. Как следует из
этого уравнения, для определения n + 1 функций сопряжения необходимо задать n + k + 1 узловых значений от t0 до t11+k· Разные методы задания узловых значе
ний позволяют получить разные функции сопряжения и, соответственно, разные
кривые. Ниже мы расскажем, как это делается. Обратите внимание, что из фор
мулы (6.32) следует, что одновременный сдвиг всех узловых значений на одно и то же число не приводит к изменению формы кривой. При этом происходит
лишь изменение диапазона значений параметра для уравнения (6.31).
Проверим, удовлетворяют ли функции сопряжения, заданные уравнениями (6.32)
и (6.33), требованиям, изложенным в начале раздела. Из уравнения (6.32) следу-
1Когда и совnадает с границей интервала, следуст быть аккуратным, nоскольку для любо
го значения и только одна функция N;,1(и) может быть отличной от нуля. Это предпола
гается в определении (6.32). Например, когда и - tt. только одна из функций No.l(tl) и N1•1(t1) может быть равна единице, хотя из уравнения (6.33) следует, что они обе могли
бы иметь это значение. В любом случае значение P(tt) окажется одним и тем же.
178 Глава б. Представление кривых и работа с ними
ет, что степень N;.k(u) на единицу выше, чем у N;,"_ 1(u) и N;+ц-1(и). Следователь но, N;,2(u) имеет степень 1, поскольку Ni.l(u)- константа, а N;,3(u) по той же при
чине имеет степень 2. Продолжая в том же духе, можно прийти к выводу, что
функция N;J,(u) имеет степень k- 1. Таким образом, степень В-сплайна опреде ляется не числом задающих точек, а значением k, которое должно быть на ед11:ИИ
цу больше желаемого значения степени кривой. Значение k называется порядком
В-сплайиа (order of the B-spline curve).
Чтобы показать, что любой участок В-сплайна определяется лишь конечным
числом задающих точек, рассмотрим сегмент кривой, соответствующий значе!fИ
ям параметра из отрезка [t;, t;+ 1]. Влиять на этот сегмент будут те задающие точ
ки, функции сопряжения которых (порядка k) отличны от нуля на отрезке [t;, t;+ 1].
Среди функций первого порядка от нуля отлична только N;,t(u). Подставив N;,1(u) в правую часть формулы (6.32), мы· получим иенулевые на рассматриваемом от резке функции N;,2(u) и N;_ 1.2(u). Первая функция получается подстановкой N;,1(u)
в первое слагаемое, а вторая функция - подстановкой во второе слагаемое. За тем по иенулевым функциям N;,2(u) и N;_ 1,2(u) мы получаем функции третьего
порядка и т. д., пока не будут получены функции порядка k. Распространение !fе
нулевых значений иллюстрирует рис. 6.5.
|
|
|
/ |
N;-k+t,k |
|
|
N;-k+2,k-t - |
N;-k+2,k |
|
|
• |
./-- |
|
|
|
N;-2,3 |
|
|
|
|
/ |
N;-Ц-1-- |
|
|
|
N;-1,2- N;-1,3 |
N;-1,k |
||
/ |
/ |
/ |
/ |
|
N;,1- N;,2- N;:J • • |
• -- N;,k-1 |
-- |
N;,k |
Рис. 6.5. Расnространение значений N1,1(u)
По рис. 6.5 видно, что неиулевые значения на отрезке [t;, ti+ 1] будут иметь только функции N;-k+t.k• Ni-k+ 2.k, ..., N;.k- Поэтому и влиять на форму отрезка кривой будут только точки P;-k+t• P;-k+2, ..., Р; (всего k штук). Например, если взять кривую чет
вертого порядка, то на форму отрезка будут влиять четыре задающие точки, а все остальные не будут.
Займемся теперь определением n + k + 1 узловых значений от t0 до tn+k· Узлы бы
вают двух основных типов: периодические и непериодические. Периодические
узлы определяются из равенства
t; =i-k (O~i~n+k). |
(6.34) |
Непериодические узлы задаются формулой
о |
о~ i ~ k; |
|
t; = {i- k + 1 |
k ~ i ~ n; |
(6.35) |
n- k + 2 |
n < i ~ n + k. |
|
6.5.·В-сплайн |
179 |
Главное отличие узлов разных типов состоит в том, что первый и последний не периодические узлы повторяются k раз. Повторение узлов приводит к тому, что В-сплайн проходит через первую и последнюю задающие точки подобно кривой Безье. В периодическом В-сплайне первая и последняя точки влияют на форму кривой точно в той же степени, что и все остальные точки, а потому кривая не
проходит через них. Вообще говоря, функция сопряжения для периодических
узлов повторяется через равные промежутки значений параметра, почему узлы и называются периодическими. Непериодические кривые чаще используются в
системах автоматизированного проектирования, поскольку большинству конст
рукторов привычнее работать с кривыми, проходящими через первую и послед
нюю точки.
Выражения (6.34) и (6.35) показывают, что расстояние между соседними узлами
всегда одинаково и равно единице. Такие узлы называются одиородны.ми (иniform knots), как и В-сплайн, через них проходящий. Однородный В-сплайн может быть
как периодическим, так и непериодическим. При изменении формы кривой кон
структоры часто добавляют1 и удаляют узлы, в результате чего В-сплайн стано
вится неоднородным. Поскольку однородность является частным случаем неод
нородности, неоднородные В-сплайны считаются обобщением однородных. Таким
образом, большинство САПР позволяют создавать и модифицировать неодно родные и непериодические В-сплайны.
Приведеиные ниже примеры должны прояснить суть описываемых в этом разде ле понятий.
Примерб.З
Записать уравнение непериодичноrо однородного В-сплайна третьего порядка в
полиномиальной форме. Задающие точки кривой: Р0, Р1 и Р2•
Решение
По формуле (6.35) узлы t; имеют следующие значения:
t0 =О, t1 =О, t 2 =О, t 3 = 1, t4 = 1, t5 = 1.
Параметр и меняется от О до 1. Воспользуемся формулой (6.33), чтобы получить
функции сопряжения первого порядка- N;,1(и):
N0.1(и)= {~ |
в противном случае; |
|
t0 Sи S t1 (и =0); |
N1.t (и)={ ~ |
t1 Sи S t2 (и =0); |
в противном случае; |
|
N2.t(и) = { О1 |
t 2 S и S t 3 (и S 1); |
|
в противном случае; |
1 При создании поверхности нз набора В-сплайнов необходимо, чтобы узловые значения
всех кривых были одинаковыми. Подробно об этом рассказывается в работе Тилле
ра [152].
180 |
Глава б. Представление кривых и работа с ними |
|
|
N 3•1 (и)={ ~ |
t 3 ~и ~ t 4 (и = 1); |
впротивном случае;
N4,t (и)={~ |
t 4 ~и ~ t 5 (и = 1); |
|
в противном случае. |
Мы должны выбрать, какая из трех функций N0,1(и), N1,1(и) и N2,1(и) будет иметь
неиулевое значение при и= О. Пусть это будет функция N2•1(и). Аналогично, вы берем ту же функцию N2,1(и) в качестве неиулевой в точке и= 1. Таким образом,
N2,1(и) становится единственной иенулевой функцией сопряжения первого nо
рядка для диапазона значений параметра [0,1], причем на всем этом диапазоне
она постоянна и равна единице.
Теперь получим нетривиальные функции сопряжения второго порядка по фор
муле (6.32)1:
N 1,2(и)= (и
N 2,2(и)= (и
- t1
t2 -
-t2
t 3 -
)N , |
(t3 -и)N |
, |
1 |
_ |
(1-и)N |
, |
1 |
_ ( |
)· |
|
11 + |
t 3 - |
2 |
|
- |
2 |
|
- |
1-и, |
||
t 1 |
t 2 |
|
|
|
1 |
|
|
|
|
|
)N21 |
(t4 -и)N31 |
|
иN21 |
|
|
|
|
|||
· + |
|
|
|
· =--·=и. |
|
|
||||
t 2 |
t 4 - |
tjj |
|
|
|
1 |
|
|
|
|
Аналогичным образом получим функции сопряжения третьего порядка:
N |
( ) _(и-t 0 )N0,2 |
(t3 -и)N1,2 |
_ (1-и)N1,2 |
_ ( 1- ) 2 • |
||
|
о.зи- |
+ |
-t2 |
- |
- |
и 1 |
|
t 3 - t1 |
t 4 |
1 |
|
|
N t.з(и) =(и -tt )Nt,2 |
+ (t4 -и)N2.2 |
=и(1-и)+(1-и)и =2и(1-и); |
||
|
tз |
-tl |
t4 -t2 |
|
N |
(и-t2 )N2.2 |
(t5 -и)N3,2 |
2 |
|
2,з(и)= |
- t2 |
+ |
=и. |
|
|
t4 |
ts - tз |
|
Итак, раскрытое в полиномиальной форме уравнение В-сплайна имеет вид:
Р(и)=(1-и)2 Р0 +2и(1-и)Р1 +и 2Р2. |
(6.36) |
Уравнение кривой Безье с задающими точками Р0, Р1 и Р2 тоже можно записать
в полиномиальной форме:
Р(и)=(~)0и0(1-и)2Р0 +(~}и1(1-и)1Р1 +(~)2и2(1-и)0Р2 = (6.37)
= (1-и)2 Р0 +2и(1-и)Р1 +и2Р2•
Сравнивая формулы (6.36) и (6.37), можно прийти к выводу, что непериодиче ский однородный В-сплайн третьего порядка с задающими точками Р0, Р1 и Р2
совпадает с кривой Безье, определяемой теми же задающими точками. Верно и
более общее утверждение: непериодический однородный В-сплайн совпадает с
кривой Безье с теми же задающими точками, если порядок k совпадает с количе
ством задающих точек n + 1. Другими словами, кривая Безье представляет собой
частный случай В-сплайна.
1 В выражении для N1,2(u) первый член с N1,1 paвett нулю, поскольку он представляет собой
нсопределенность вида 0/0.
6.5. В-сплайн |
181 |
Пример 6.4
Записать уравнение непериодичного однородного В-сплайна третьего порядка
с задающими точками Р0, Р1, ..., Р5 в полиномиальной форме и продемонстри ровать свойство локальности изменений.
Решение
По формуле (6.35) определяем узловые значения t;:
t 0 =О, t 1 =О, t 2 =О, ( 1 = 1, t 4 = 2, t 5 = 3, t 6 = 4, t 7 = 4, t 8 = 4.
Параметр и меняется от О до 4. Воспользуемся формулой (6.33) для получения
функций сопряжения первого порядка- N;,1(и):
N 2•1 |
(и)={ ~ |
О ~и~ 1; |
|
|
|
||
N3,1 |
(и)={~ |
в противном случае; |
|
в противном случае; |
|||
|
|
1 |
~и~ 2; |
N 4•1 |
(и)={ ~ |
2 |
~и~ 3; |
|
|
||
N5.1 |
(и)={~ |
в противном случае; |
|
в противном случае. |
|||
|
|
3 |
~и~ 4; |
Функции N0•1(u) и N1,1(и) мы не рассматриваем, выбирая N2,1(и) в качестве един
ственной отличной от нуля при и = О. По той же причине не рассматриваются N6,1(и) и N7,1(и). Теперь вычислимнетривиальные функции сопряжения второго порядка по формуле (6.32):
Nl,2(и)=(и-ti)NI,I +(tз-и)N2.1 =(1-и)N2.1;
t 2 |
- |
t1 |
t3 |
- |
t 2 |
N2.2(и)= (и -t2)N2.1 |
+ (t 4 -и)Nз.l =иN2,1 +(2-и)Nз.t; |
||||
tз |
- |
t2 |
t4 |
- |
tз |
Nз.2(и)= (и-tз)Nз.l |
+ <ts -.u)N4.1 |
=(и -1)Nз.l |
+ (3-и)N4.1; |
|||
|
t4 - tэ |
|
t5 - t4 |
|
|
|
- |
(и"""'t4 )N4.1 |
+ <tr. |
-и)Ns.l |
-(и -2)N |
4,1 |
+ (4 -и)N . |
N 4,2 (и ) - |
ts - t4 |
|
tб - ts |
- |
5.1' |
|
|
|
|
|
|
||
Ns.2(и)= (и-ts)Ns.l |
+ (t7 |
-u)Nr..l |
=(и-3)Ns.l· |
|
||
|
tб - ts |
|
t7 - tб |
|
|
|
Аналогичным образом вычисляются функции сопряжения третьего порядка:
Nо.з(и)= (и-to )No.2 |
+ <tз -и)NI.2 |
= (1-и)NI.2 |
= (1-и)2N2.1; |
|||||
|
|
t 2 |
- t 0 |
t 3 |
- t1 |
|
|
|
N |
_(и- t 1 )N1,2 |
+ (t4 -u)N2•2 |
|
2 -и |
||||
(и) |
t |
- t |
t |
- t |
=uNI2 +--N22 = |
|||
I,З |
- |
. |
2 |
. |
||||
|
|
з |
1 |
4 |
2 |
|
|
|