Krzywa Béziera

Przykładowa krzywa Béziera

Krzywa Béziera (wym. ['be.zje.ra]) – parametryczna krzywa powszechnie stosowana w programach do projektowania inżynierskiego CAD (MicroStation), tworzenia grafiki wektorowej (Corel Draw, Adobe Illustrator, Inkscape), do reprezentowania kształtów znaków w czcionkach komputerowych (TrueType, METAFONT, Type1) i systemach przetwarzania grafiki (PostScript, MetaPost) oraz w grafice wektorowej (np. format SVG).

Krzywe Béziera zostały niezależnie opracowane przez Pierre’a Béziera[1], francuskiego inżyniera firmy Renault, oraz Paula de Casteljau[1], pracującego dla konkurencyjnej firmy Citroën. Prace nad krzywymi prowadzone były przez obu naukowców od początku lat 60. XX w., ale przez długi okres objęte ścisłą tajemnicą służbową. Dopiero pod koniec lat 60. pojawiły się pierwsze ogólnodostępne publikacje Pierre Béziera przedstawiające jego koncepcje, natomiast prace de Casteljau koncern Citroën ukrywał jeszcze przez kilka lat – pierwsze wzmianki o nim pojawiły się dopiero w 1971, gdy prace Béziera były znane od dawna. Do rozpowszechnienia się krzywych Béziera znacząco przyczynił się A.R. Forrest artykułem Interactive interpolation and approximation by Bezier polynomials opublikowanym w 1972 roku w branżowym piśmie „The Computer Journal[2].

Krzywe Béziera są krzywymi parametrycznymi, tzn. każda współrzędna punktu krzywej jest pewną funkcją liczby rzeczywistej będącej wspomnianym parametrem; aby określić krzywą na płaszczyźnie, potrzebne są dwie funkcje, aby określić krzywą w przestrzeni – trzy itd. Ze względu na rodzaj tych funkcji mówi się o krzywych wielomianowych oraz krzywych wymiernych. Powszechnie stosuje się również krzywe złożone z kawałków gładko połączonych krzywych wielomianowych bądź wymiernych, tzw. krzywych B-sklejanych (także: krzywych gładkich).

Niezależnie od rodzaju krzywej, na jej przebieg wpływa łamana kontrolna, określona za pomocą punktów kontrolnych, których liczba jest zwykle niewielka. Ta cecha bardzo ułatwia pracę interakcyjną, bowiem człowiek w naturalny sposób może ustalać położenie punktów i łatwo korygować błędy.

Podstawowe wiadomości

Przykład wielomianowej krzywej Béziera 14. stopnia
  • Krzywe wielomianowe są powszechnie stosowane. W praktyce wykorzystuje się krzywe niskich stopni, opisywane niewielką liczbą punktów kontrolnych. Najpowszechniej stosowane są krzywe drugiego stopnia (trzy punkty kontrolne, np. fonty TrueType) lub trzeciego (cztery punkty kontrolne, np. fonty Type1, METAFONT, SVG, cała gama różnych pakietów graficznych); rzadziej stosuje się krzywe wyższych stopni. Krzywe wielomianowe są również dostępne w wielu bibliotekach programistycznych, np. OpenGL, Java2D, Tcl. Krzywe niskich stopni są wygodniejsze w użyciu, łatwiejsze w realizacji są różne algorytmy związane z takimi krzywymi np. obcinanie, wyznaczanie przecięć z innymi krzywymi, wyznaczanie ekstremów itp.
  • Krzywe wymierne mają nad krzywymi wielomianowymi jedną zasadniczą przewagę: można za ich pomocą reprezentować wszystkie krzywe stożkowe, w szczególności okręgi, elipsy i ich wycinki, co ma fundamentalne znaczenie w projektowaniu wspomaganym komputerowo. Krzywe wielomianowe mogą okręgi i elipsy zaledwie aproksymować, co jednak nie jest wadą w zastosowaniach rysunkowych, gdzie dokładność nie jest priorytetem.

Zarówno krzywe wielomianowe, jak i wymierne cechuje jedna wspólną niedogodność – trudno za pomocą jednej krzywej przedstawiać skomplikowane kształty. Można co prawda dodawać nowe punkty kontrolne, ale to powoduje, że kontrola kształtu jest mocno utrudniona, przemieszczenie bowiem jednego punktu wpływa na całą krzywą, a ponadto im wyższy stopień, tym zmiana położenia punktów kontrolnych jest mniej widoczna (mówiąc obrazowo, trzeba punkty przemieszczać na duże odległości, aby odniosło to jakiś widoczny skutek). Z tego względu powszechnie stosuje się krzywe B-sklejane, które oferują lokalną kontrolę kształtu – na skutek przemieszczenia jednego punktu kontrolnego zmianie ulegnie tylko jego bliskie otoczenie. Krzywe B-sklejane są to takie krzywe, które składają się z fragmentów krzywych bądź to wielomianowych, bądź wymiernych (względnie niskiego stopnia), natomiast matematyczne równania opisujące taką krzywą gwarantują, iż w punktach połączenia różnych fragmentów krzywa będzie gładka. Szczególną popularność zyskały wymierne krzywe oraz powierzchnie B-sklejane, znane jako NURBS.

Podstawy matematyczne

Krzywe wielomianowe

  • kod programu rysującego dowolne krzywe wielomianowe

Dane są punkty kontrolne p 0 , , p n {\displaystyle p_{0},\dots ,p_{n}} w liczbie n + 1. {\displaystyle n+1.}

Kształt krzywej Béziera opisują wielomiany, dla których przyjęto dziedzinę [ 0 , 1 ] . {\displaystyle [0,1].} Stopień wielomianu wprost zależy od liczby punktów kontrolnych – wynosi n {\displaystyle n} (liczba punktów kontrolnych minus jeden). Wielomiany są zwykle przedstawiane w bazie wielomianów Bernsteina[1] (oznaczane jako B i n ( t ) , {\displaystyle B_{i}^{n}(t),} bądź w literaturze anglojęzycznej B i , j ( t ) {\displaystyle B_{i,j}(t)} ). Wielomiany bazowe Bernsteina są wygodne w tym sensie, że punkty kontrolne są w naturalny sposób współczynnikami takiego wielomianu – nie trzeba dokonywać dodatkowych przeliczeń.

Dowolny punkt na krzywej jest opisywany zależnością:

p ( t ) = i = 0 n p i B i n ( t ) dla\  t [ 0 , 1 ] , {\displaystyle p(t)=\sum _{i=0}^{n}p_{i}B_{i}^{n}(t)\quad {\textrm {dla\ }}t\in [0,1],}

np. krzywą dwuwymiarową opisuje para wielomianów:

( x , y ) = ( i = 0 n x i B i n ( t ) , i = 0 n y i B i n ( t ) ) . {\displaystyle (x,y)=\left(\sum _{i=0}^{n}x_{i}B_{i}^{n}(t),\sum _{i=0}^{n}y_{i}B_{i}^{n}(t)\right).}

Punkt p ( t ) {\displaystyle p(t)} można również znaleźć za pomocą algorytmu de Casteljau.

Przykład dwuwymiarowej krzywej Béziera 4. stopnia i wielomiany X(t) i Y(t), które ją tworzą. Kolorem niebieskim zaznaczono punkty kontrolne, szarym narysowane są wykresy wielomianów bazowych Bernsteina przemnożonych przez współrzędne punktów kontrolnych.

Cechy charakterystyczne wielomianowych krzywych Béziera:

  • Krzywa interpoluje skrajne punkty kontrolne (tj. p ( 0 ) = p 0 {\displaystyle p(0)=p_{0}} i p ( 1 ) = p n {\displaystyle p(1)=p_{n}} ), a przybliża pozostałe.
  • Krzywa ma własność otoczki wypukłej, tzn. dla t [ 0 , 1 ] {\displaystyle t\in [0,1]} punkt p ( t ) {\displaystyle p(t)} leży w otoczce wypukłej punktów kontrolnych p 0 , , p n {\displaystyle p_{0},\dots ,p_{n}} [3].
  • Konstrukcja krzywej jest niezmiennicza względem przekształceń afinicznych, tzn. krzywa wyznaczona z przekształconych punktów kontrolnych jest taka sama jak krzywa po tym przekształceniu.
  • Pojedyncza krzywa ma nieskończenie wiele reprezentacji – dla krzywej opisywanej przez n {\displaystyle n} punktów kontrolnych można wskazać taki ciąg punktów kontrolnych w liczbie n + k {\displaystyle n+k} ( k = 1 , ) , {\displaystyle (k=1,\dots ),} które opisują dokładnie tę samą krzywą. Taka procedura wyznaczania dodatkowych punktów nosi nazwę podnoszenia stopnia (ang. degree elevation). W praktyce stosuje się jednak krzywe możliwie niskich stopni, natomiast zwiększanie ilości punktów kontrolnych służy do konwersji między różnymi krzywymi.

Wadą wielomianowych krzywych Béziera jest to, że nie można za ich pomocą reprezentować krzywych stożkowych, okręgów, elips itd. Tej wady pozbawione są wymierne krzywe Béziera.

Wielomianowe krzywe Béziera trzeciego stopnia

Krzywa Béziera trzeciego stopnia

Najczęściej używane są krzywe trzeciego stopnia leżące na płaszczyźnie. Definiując krzywą trzeciego stopnia, określa się 4 punkty A , {\displaystyle A,} B , {\displaystyle B,} C {\displaystyle C} i D {\displaystyle D} (na rysunku odpowiednio P 0 , P 1 , P 2 , P 3 {\displaystyle P_{0},P_{1},P_{2},P_{3}} ), których położenie wyznacza przebieg krzywej. Krzywa ma swój początek w punkcie A {\displaystyle A} i skierowana jest w stronę punktu B . {\displaystyle B.} Następnie zmierza w stronę punktu D {\displaystyle D} , dochodząc do niego od strony punktu C . {\displaystyle C.} Odcinek A B ¯ {\displaystyle {\overline {AB}}} jest styczny do krzywej w punkcie A , {\displaystyle A,} natomiast odcinek C D ¯ {\displaystyle {\overline {CD}}} jest styczny w punkcie D {\displaystyle D}

Krzywą Béziera trzeciego stopnia określa następujące równanie:

P ( t ) = A ( 1 t ) 3 + 3 B t ( 1 t ) 2 + 3 C t 2 ( 1 t ) + D t 3 {\displaystyle P(t)=A(1-t)^{3}+3Bt(1-t)^{2}+3Ct^{2}(1-t)+Dt^{3}\quad {}} dla 0 t 1 , {\displaystyle 0\leqslant t\leqslant 1,}

czyli:

P x ( t ) = A x ( 1 t ) 3 + 3 B x t ( 1 t ) 2 + 3 C x t 2 ( 1 t ) + D x t 3 , {\displaystyle P_{x}(t)=A_{x}(1-t)^{3}+3B_{x}t(1-t)^{2}+3C_{x}t^{2}(1-t)+D_{x}t^{3},}
P y ( t ) = A y ( 1 t ) 3 + 3 B y t ( 1 t ) 2 + 3 C y t 2 ( 1 t ) + D y t 3 . {\displaystyle P_{y}(t)=A_{y}(1-t)^{3}+3B_{y}t(1-t)^{2}+3C_{y}t^{2}(1-t)+D_{y}t^{3}.}

Alternatywny zapis macierzowy:

P ( t ) = [ A , B , C , D ] [ 1 3 3 1 3 6 3 0 3 3 0 0 1 0 0 0 ] [ t 3 t 2 t 1 ] . {\displaystyle P(t)=\left[A,B,C,D\right]\cdot \left[{\begin{matrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{matrix}}\right]\cdot \left[{\begin{matrix}t^{3}\\t^{2}\\t\\1\end{matrix}}\right].}

Krzywa ma swój początek w punkcie A {\displaystyle A} ( t = 0 ) {\displaystyle (t=0)} i koniec w punkcie D {\displaystyle D} ( t = 1 ) . {\displaystyle (t=1).}

Krzywą Béziera trzeciego stopnia można też opisać następującym układem równań dla A = ( x 0 , y 0 ) , B = ( x 1 , y 1 ) , C = ( x 2 , y 2 ) , D = ( x 3 , y 3 ) : {\displaystyle A=(x_{0},y_{0}),B=(x_{1},y_{1}),C=(x_{2},y_{2}),D=(x_{3},y_{3}){:}}

x ( t ) = a x t 3 + b x t 2 + c x t + x 0 , {\displaystyle x_{(t)}=a_{x}t^{3}+b_{x}t^{2}+c_{x}t+x_{0},}
x 1 = x 0 + c x 3 , {\displaystyle x_{1}=x_{0}+{\frac {c_{x}}{3}},}
x 2 = x 1 + c x + b x 3 , {\displaystyle x_{2}=x_{1}+{\frac {c_{x}+b_{x}}{3}},}
x 3 = x 0 + c x + b x + a x , {\displaystyle x_{3}=x_{0}+c_{x}+b_{x}+a_{x},}
y ( t ) = a y t 3 + b y t 2 + c y t + y 0 , {\displaystyle y_{(t)}=a_{y}t^{3}+b_{y}t^{2}+c_{y}t+y_{0},}
y 1 = y 0 + c y 3 , {\displaystyle y_{1}=y_{0}+{\frac {c_{y}}{3}},}
y 2 = y 1 + c y + b y 3 , {\displaystyle y_{2}=y_{1}+{\frac {c_{y}+b_{y}}{3}},}
y 3 = y 0 + c y + b y + a y . {\displaystyle y_{3}=y_{0}+c_{y}+b_{y}+a_{y}.}

Zdefiniowane w ten sposób wzory mogą zostać odwrócone tak, by otrzymać zmienne kierunkowe (są one stałe dla każdej krzywej Béziera):

c x = 3 ( x 1 x 0 ) , {\displaystyle c_{x}=3(x_{1}-x_{0}),}
b x = 3 ( x 2 x 1 ) c x , {\displaystyle b_{x}=3(x_{2}-x_{1})-c_{x},}
a x = x 3 x 0 c x b x , {\displaystyle a_{x}=x_{3}-x_{0}-c_{x}-b_{x},}
c y = 3 ( y 1 y 0 ) , {\displaystyle c_{y}=3(y_{1}-y_{0}),}
b y = 3 ( y 2 y 1 ) c y , {\displaystyle b_{y}=3(y_{2}-y_{1})-c_{y},}
a y = y 3 y 0 c y b y . {\displaystyle a_{y}=y_{3}-y_{0}-c_{y}-b_{y}.}

Wymierne krzywe Béziera

 Osobny artykuł: Wymierna krzywa Béziera.
Wymierne krzywe Béziera

Wymierna krzywa Béziera to rzut środkowy wielomianowej krzywej Béziera zdefiniowanej we współrzędnych jednorodnych na płaszczyznę W = 1. {\displaystyle W=1.} Tak samo dane jest n + 1 {\displaystyle n+1} punktów kontrolnych.

Jeśli przestrzeń jednorodna jest k + 1 {\displaystyle k+1} -wymiarowa, wówczas do opisu krzywej potrzebne jest tyleż wielomianów. Dowolny punkt krzywej wielomianowej jest dany jako P ( t ) = ( X ( t ) , Y ( t ) , , W ( t ) ) . {\displaystyle P(t)=(X(t),Y(t),\dots ,W(t)).} Po przejściu na współrzędne kartezjańskie (rzucie środkowym P ( t ) {\displaystyle P(t)} na płaszczyznę W = 1 {\displaystyle W=1} ) otrzymuje się k {\displaystyle k} wyrażeń wymiernych, a punkt na tej płaszczyźnie dany jest wzorem p ( t ) = ( X ( t ) W ( t ) , Y ( t ) W ( t ) , ) . {\displaystyle p(t)=\left({\frac {X(t)}{W(t)}},{\frac {Y(t)}{W(t)}},\dots \right).}

Jeśli W ( t ) = const {\displaystyle W(t)={\textrm {const}}} to krzywa jest wielomianowa – mówiąc nieformalnie krzywe wielomianowe to specjalny przypadek krzywych wymiernych.

Dowolny punkt na krzywej wymiernej dany jest wzorem:

p ( t ) = i = 0 n w i p i B i n ( t ) i = 0 n w i B i n ( t ) t [ 0 , 1 ] , {\displaystyle p(t)={\frac {\sum _{i=0}^{n}w_{i}p_{i}B_{i}^{n}(t)}{\sum _{i=0}^{n}w_{i}B_{i}^{n}(t)}}\qquad t\in [0,1],}

gdzie w i {\displaystyle w_{i}} to współrzędna W, jednak częściej nazywana jest wagą punktu kontrolnego.

Aby wyznaczyć punkt na krzywej, można także posłużyć się algorytmem de Casteljau albo wariantem dla krzywych wymiernych lub wielomianowych.

Atuty w stosunku do wielomianowych krzywych Béziera są następujące:

  • mogą reprezentować wszystkie krzywe stożkowe, co ma znaczenie w zastosowaniach CAD;
  • rzut perspektywiczny krzywej wymiernej jest zawsze krzywą wymierną, podczas gdy rzut perspektywiczny krzywej wielomianowej nie musi być krzywą wielomianową, co ma znaczenie w grafice komputerowej;
  • wagi w i {\displaystyle w_{i}} pozwalają na lepszą kontrolę nad kształtem krzywej.

Krzywe B-sklejane

 Osobny artykuł: Krzywa B-sklejana.

Krzywe B-sklejane składają się z fragmentów wielomianowych bądź wymiernych krzywych Béziera, najczęściej niskiego stopnia ( n ) . {\displaystyle (n).} Dla krzywej B-sklejanej parametr t {\displaystyle t} również należy do przedziału [ 0 , 1 ] . {\displaystyle [0,1].} Przedział ten jest dzielony na podprzedziały, a liczby określające ich granicę nazywane są węzłami (ang. knot). Kolejne węzły mogą być sobie równe, tworząc w ten sposób puste podprzedziały – nie jest to błąd.

Jeśli węzłów jest m + 1 {\displaystyle m+1} ( u 0 , , u m ) , {\displaystyle (u_{0},\dots ,u_{m}),} a stopień wielomianów jest równy n , {\displaystyle n,} to do określenia krzywej potrzebne jest m n {\displaystyle m-n} punktów kontrolnych, zaś liczba krzywych, które składają się na całość, wynosi m 2 n . {\displaystyle m-2n.} Sklejane krzywe są zdefiniowane na przedziale [ u n , u m n ] , {\displaystyle [u_{n},u_{m-n}],} nie na [ 0 , 1 ] . {\displaystyle [0,1].}

Dowolny punkt na krzywej B-sklejanej jest dany wzorem, który wynika z algorytmu Mansfielda-de Boora-Coxa:

p ( t ) = i = 0 m n 1 p i N i n ( t ) dla\  t [ u n , u m n ] , {\displaystyle p(t)=\sum _{i=0}^{m-n-1}p_{i}N_{i}^{n}(t)\quad {\textrm {dla\ }}t\in [u_{n},u_{m-n}],}

gdzie N i n {\displaystyle N_{i}^{n}} to unormowane funkcje B-sklejane stopnia n . {\displaystyle n.}

Krzywe B-sklejane mają następujące zalety w stosunku do krzywych wielomianowych i wymiernych:

  • Lokalna kontrola kształtu – przemieszczanie jednego punktu kontrolnego wpływa na niewielkie otoczenie tego punktu, najwyżej n {\displaystyle n} sąsiednich krzywych.
  • Możliwość dowolnego rozmieszczania węzłów daje lepszą i większą kontrolę nad kształtem krzywej. Dodatkowo jeśli węzły pokrywają się, tzn. istnieją puste podprzedziały, uzyskuje się „ostre” (nie gładkie) połączenia.
  • W łatwy sposób można wstawiać nowe węzły (ang. knot insertion), dzięki czemu proces modelowania jest prostszy.

Szczególne znaczenie i popularność zyskały wymierne krzywe B-sklejane (NURBS), łączące zalety zwykłych krzywych wymiernych z wymienionymi wyżej.

Zobacz też

Przypisy

  1. a b c Jankowski 1990 ↓, s. 133.
  2. A.R. Forrest. Interactive Interpolation and Approximation by Bézier Polynomials. „The Computer Journal”. 15 (1), s. 71–79, 1972. DOI: 10.1093/comjnl/15.1.71.  Reprint z poprawkami i komentarzami autora: A.R. Forrest. Interactive interpolation and approximation by Bézier polynomials. „Computer-Aided Design”. 22 (9), s. 527–537, 1990. DOI: 10.1016/0010-4485(90)90038-E. 
  3. Jankowski 1990 ↓, s. 135.

Bibliografia

  • James DJ.D. Foley James DJ.D. i inni, Wprowadzenie do grafiki komputerowej, JanJ. Zabrodzki (tłum.), Warszawa: Wydawnictwa Naukowo-Techniczne, 1995, ISBN 83-204-1840-2 .
  • MichałM. Jankowski MichałM., Elementy grafiki komputerowej, Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, ISBN 83-204-1326-5 .
  • PrzemysławP. Kiciak PrzemysławP., Podstawy modelowania krzywych i powierzchni: zastosowania w grafice komputerowej, Warszawa: Wydawnictwa Naukowo-Techniczne, 2000, ISBN 83-204-2464-X .

Linki zewnętrzne

  • Interaktywny applet Javy obrazujący krzywe Béziera