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

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

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

172

Глава б. Представление кривых и работа с ними

о При изменении порядка вершин многоугольника на противоположный полу­

чается та же самая кривая.

Задавшись этими требованиями, Безье выбрал в качестве функций сопряжения

полином Бернштейна:

В;,п(и)= (~)и;(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; =

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 .

 

 

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)

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

 

11

О в

противном случае.

 

Значения 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) и N11(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 t1 =0);

N1.t (и)={ ~

t1 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(и) будет иметь

неиулевое значение при и= О. Пусть это будет функция N21(и). Аналогично, вы­ берем ту же функцию 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-и);

 

-tl

t4 -t2

 

N

(и-t2 )N2.2

(t5 -и)N3,2

2

2,з(и)=

- t2

+

=и.

 

t4

ts -

 

Итак, раскрытое в полиномиальной форме уравнение В-сплайна имеет вид:

Р(и)=(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;

Функции N01(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;

-

t2

t4

-

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

 

- ts

-

5.1'

 

 

 

 

 

Ns.2(и)= (и-ts)Ns.l

+ (t7

-u)Nr..l

=(и-3)Ns.l·

 

 

- ts

 

t7 -

 

 

 

Аналогичным образом вычисляются функции сопряжения третьего порядка:

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

 

 

 

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