3. Krzywe Béziera dowolnego stopnia

3.1. Funkcje Bernsteina i krzywe wielomianowe Béziera

Wiemy już, że krzywą Béziera 3 stopnia opisuje funkcja wektorowa:

{\mathbf{P}}\left(u\right)=\ \mathbf{V}_\mathbf{0}{(1-u)}^3+\mathbf{V}_\mathbf{1}3u{(1-u)}^2+\mathbf{V}_\mathbf{2}3u^2\left(1-u\right)+\mathbf{V}_\mathbf{3}u^3

Można ją jednak zapisać inaczej:

{\mathbf{P}}\left(u\right)=\sum_{i=0}^{3}\mathbf{V}_\mathbf{i}\cdot\ B_{i,3}\left(u\right)\ ;\ \ \ \ \ \ \ \ \ \ \ 0\le\ u\le1

gdzie f

B_{1,3}\left(u\right)=\left(\begin{matrix}3\\i\\\end{matrix}\right){(1-u)}^{3-i}u^i\ \ \ ;\ \ 0\le\ u\le1

są szczególnym przypadkiem znanych z matematyki funkcji Bernsteina (stosowanych w dowodzie twierdzenia Weierstrassa o przybliżeniu funkcji ciągłych), które mogą być dowolnego,  n-tego stopnia:

B_{i,n}\left(u\right)=\left(\begin{matrix}n\\i\\\end{matrix}\right){(1-u)}^{n-i}u^i\ \ ;\ \ \ \ 0\le\ u\le1

Dla  funkcji Bernsteina  Pierre Bézier  w genialny, nowatorski sposób znalazł jednak zupełnie inne, bardzo praktyczne zastosowanie, gdyż  wykorzystał  je  do definiowania   krzywych dowolnego stopnia, będących uogólnieniem krzywych 2 i 3 stopnia. Taka krzywa zdefiniowana jest dowolną liczbą wierzchołków kontrolnych (Rysunek 22).

{\mathbf{P}}\left(u\right)=\sum_{i=0}^{n}\mathbf{V}_\mathbf{i}\cdot\ B_{i,n}\left(u\right)\ \ \ ;\ \ \ \ 0\le\ u\le1

Jeśli  ponumerujemy je  od 0 do n (Rysunek 22), to krzywa jest stopnia n i określona jest wzorem:

gdzie  V0, V1, … , Vn są wierzchołkami kontrolnymi krzywej, a funkcje Bernsteina n-tego stopnia pełnią rolę współczynników wagowych przy wierzchołkach. Przykłady funkcji Bernsteina 1, 2 i 3 stopnia przedstawia Rysunek 23.

Funkcje Bernsteina mają następujące własności:

  • są zawsze dodatnie w całym przedziale 0 <u < 1,  a to oznacza, że przesunięcie pojedynczego wierzchołka wieloboku wpływa na zmianę kształtu całej krzywej;
  • suma ich dla dowolnej wartości u jest tożsamościowo równa 1, co w połączeniu z własnością 1 oznacza, że każdy punkt krzywej jest średnią ważoną wszystkich wierzchołków kontrolnych (współczynnikami wagowymi są funkcje Bernsteina) i to w taki sposób, że leży on wewnątrz wypukłego wieloboku rozpiętego na wszystkich wierzchołkach.

 Jak łatwo sprawdzić, podane wcześniej krzywe Béziera 2 stopnia są również szczególnym przypadkiem krzywych stopnia n.  I jak widać na Rysunek 23, krzywą Béziera pierwszego stopnia jest…odcinek.

Jeśli wielobok kontrolny ma n+1 wierzchołków, czyli n boków, to krzywa Béziera jest stopnia  n.

Rysunek 22.  Krzywa Béziera zdefiniowana dowolną liczbą wierzchołków, ponumerowanych od 0 do n. Wielobok ma więc n boków i krzywa jest stopnia n.

Rysunek 23 – Aplikacja nr 2. Krzywe Béziera  i funkcje Bernsteina:  a) 1 stopnia, b) 2 stopnia,  c) 3 stopnia.
Punkt zaznaczony na krzywej  obliczany jest na podstawie  wierzchołków kontrolnych i wartości funkcji zaznaczonych na wykresach.

Napisz wzory opisujące krzywą Béziera 1. stopnia

Do ilustracji własności funkcji Bernsteina i krzywych Béziera dowolnego stopnia służy Aplikacja nr 2, którą przedstawia Rysunek 24. Zaznaczając wierzchołki na  ekranie, można zamodelować krzywą Béziera dowolnego stopnia i obejrzeć funkcje Bernsteina składające się na jej definicję. Stopień krzywej wynika z liczby podanych wierzchołków i ukazuje się w okienku. Dodatkowo po włączeniu "Edytuj krzywą" można dowolnie przeciągać wierzchołki.

Rysunek 24 - Aplikacja nr 2. Krzywa Béziera i funkcje Bernsteina różnych stopni. Wybierając kliknięciem na ekranie kolejne wierzchołki kontrolne, otrzymujemy krzywą coraz wyższego stopnia, dla których suwakiem  można zmieniać wartość parametru u.

Można też modelować krzywą przy wyłączonym rysunku wieloboku, jak pokazuje Aplikacja nr 3 (Rysunek 25). Sposób taki, choć mniej oczywisty, jest spotykany w niektórych modelerach.

Rysunek 25 – Aplikacja nr 3. Modelowanie krzywej Béziera dowolnego stopnia.

Do wyznaczania funkcji Bernsteina najlepiej jest wykorzystać zależność rekurencyjną (i nie liczyć wszystkich silni od początku !):

\left(\begin{matrix}n\\0\\\end{matrix}\right)=1;\ \ \ \left(\begin{matrix}n\\1\\\end{matrix}\right)=n;\ \ \ \ \ \left(\begin{matrix}n\\i+1\\\end{matrix}\right)=\ \frac{n-i}{i+1}\left(\begin{matrix}n\\i\\\end{matrix}\right);\ \ \ \ \ i=2,\ldots,n

Stąd wynika tzw. algorytm Kiciaka:

Algorytm Kiciaka

 

s:=1-u;

P:=V0;    //  P jest punktem pomocniczym

e:=u; b:=n;

for  i:= 1 to n do begin

   P:=s*P+b*e*Vi;

   e:=e*u;

   b:=b*(n-i)/(i+1);

end;
//  otrzymany w końcowej iteracji punkt P jest szukanym punktem P(u)

Należy podkreślić, że krzywe Béziera wysokiego stopnia nie są zbyt wygodne w modelowaniu - jak łatwo zauważyć, coraz trudniej przewidzieć ich kształt na podstawie wieloboku i coraz mniej są do tego wieloboku zbliżone. Łatwiej też w nich wprowadzić niepożądane zafalowania. Dlatego zaleca się, by w projektowaniu nie używać krzywych Béziera stopnia wyższego niż 7.