• Nie Znaleziono Wyników

Krzywe B-sklejane

W dokumencie Grafika komputerowa I – MIM UW (Stron 72-78)

6. Elementy modelowania geometrycznego

6.2. Krzywe B-sklejane

sn+ p1 n 1 ! tsn−1+ · · · + pn−1 n n − 1 ! tn−1s + pn n n ! tn = · · · (p0 n 0 ! s + p1 n 1 ! t)s + · · · + pn−1 n n − 1 ! tn−1 s + pn n n ! tn.

Schemat Hornera ze względu na s trzeba tylko uzupełnić o obliczanie wektorów p0 n0

, p1 n1t, . . . , pn nntn. Ponieważ n0

= 1 i i+1n 

= n−ii+1 ni

, więc mamy stąd algorytm Listing. s := 1 − t; p := p0; d := t; b := n; for i := 1 to n do begin p := sp + b∗dpi; d := d∗t; b := b∗(n − i)/(i + 1) end; {p(t) = p} 6.2. Krzywe B-sklejane

6.2.1. Określenie krzywych B-sklejanych

Modelowanie figur o skomplikowanym kształcie wymagałoby użycia krzywych B´eziera wyso-kiego stopnia, co oprócz niewygody (z punktu widzenia użytkownika programu interakcyjnego) sprawiałoby różne kłopoty implementacyjne (bardzo duże wartości współczynników dwumiano-wych, wysoki koszt algorytmów obliczania punktu). Dlatego często stosuje się krzywe kawałkami wielomianowe w reprezentacji B-sklejanej; jest ona uogólnieniem reprezentacji B´eziera krzywych wielomianowych.

Krzywa B-sklejana jest określona przez podanie: stopnia n, ciągu N + 1 węzłów u0, . . . , uN (ciąg ten powinien być niemalejący, a ponadto N powinno być większe od 2n), oraz N − n punktów kontrolnych d0, . . . , dN −n−1. Wzór, który jest definicją krzywej B-sklejanej ma postać s(t) = N −n−1 X i=0 diNin(t), t ∈ [un, uN −n].

We wzorze tym występują funkcje B-sklejane Ninstopnia n, które są określone przez ustalony ciąg węzłów.

Istnieje kilka definicji funkcji B-sklejanych, które różnią się stopniem skomplikowania, a także trudnością dowodzenia na podstawie takiej definicji różnych własności tych funkcji (w zasadzie

Rysunek 6.5. Porównanie krzywej B´eziera z krzywą B-sklejaną.

więc wychodzi na jedno, której definicji użyjemy, jeśli chcemy dowodzić twierdzenia, to trudności nie da się uniknąć). Ponieważ w tym wykładzie ograniczamy się do praktycznych aspektów za-gadnienia, więc przytoczę rekurencyjny wzór Mansfielda-de Boora-Coxa, który w książkach o grafice chyba najczęściej pełni rolę definicji:

Ni0(t) = ( 1 dla t ∈ [ui, ui+1), 0 w przeciwnym razie, (6.1) Nin(t) = t − ui ui+n− uiN n−1 i (t) + ui+n+1− t ui+n+1− ui+1N n−1 i+1(t) dla n > 0. (6.2)

Wzór ten jest uogólnieniem rozważanego wcześniej wzoru wiążącego wielomiany Bernsteina stopni n − 1 i n.

6.2.2. Algorytm de Boora

Na podstawie wzoru Mansfielda-de Boora-Coxa łatwo jest otrzymać algorytm de Boora obliczania punktu s(t) na podstawie danych opisujących krzywą s i parametru t. Algorytm ten jest uogólnieniem algorytmu de Casteljau i jest realizowany przez następujące instrukcje:

Listing. {d(0)i = di dlai = k − n, . . . , k.} k := N − n − 1; while t < uk do k := k − 1; r := 0; while (r < n) and (t = uk−r) do r := r + 1; for j := 1 to n − r do for i := k − n + j to k − r do begin αi(j):= (t − ui)/(ui+n+1−j− ui); d(j)i := (1 − αi(j))d(j−1)i−1 + α(j)i d(j−1)i end; {s(t) = d(n−r)k−r }

Rysunek 6.6. Algorytm de Boora.

6.2.3. Podstawowe własności krzywych B-sklejanych

Własności krzywych B-sklejanych najbardziej istotne w zastosowaniach związanych z grafiką komputerową, są takie:

— Jeśli wszystkie węzły od un do uN −n są różne (tworzą ciąg rosnący), to krzywa składa się z N − 2n łuków wielomianowych. W przeciwnym razie (jeśli występują tzw. węzły krotne), to liczba łuków jest mniejsza.

— Algorytm de Boora dokonuje liniowej interpolacji kolejno otrzymywanych punktów (liczby

α(j)i należą do przedziału [0, 1]); stąd wynika silna własność otoczki wypukłej: wszystkie punkty łuku dla t ∈ [uk, uk+1] leżą w otoczce wypukłej punktów dk−n, . . . , dk. Mamy też afiniczną niezmienniczość tej reprezentacji krzywej; aby otrzymać jej obraz w dowolnym przekształceniu afinicznym, wystarczy zastosować to przekształcenie do punktów kontrol-nych d0, . . . , dN −n−1.

— Lokalna kontrola kształtu. Ponieważ punkt s(t) dla t ∈ [uk, uk+1) zależy tylko od punktów dn−k, . . . , dk, więc zmiana punktu di powoduje zmianę fragmentu krzywej dla

t ∈ [ui, ui+n+1].

Rysunek 6.8. Lokalna kontrola kształtu. — Pochodna krzywej B-sklejanej stopnia n jest krzywą stopnia n − 1:

s0(t) =

N −n−2 X i=0

n

ui+n+1− ui+1(di+1− di)N

n−1 i+1(t).

Funkcje B-sklejane Nin−1 występujące w powyższym wzorze są określone dla tego samego ciągu węzłów, co funkcje Ninw określeniu krzywej s. Zastosowanie (silnej) własności otoczki wypukłej do pochodnej daje (silną) własność hodografu krzywych B-sklejanych.

Rysunek 6.9. Pochodna krzywej B-sklejanej.

— W otoczeniu węzła o krotności r krzywa jest klasy Cn−r (dowód na podstawie wzoru Mansfielda-de Boora-Coxa, który przyjęliśmy tu za definicję, jest pracochłonny, ale reguła jest prosta, więc warto ją zapamiętać).

— Jeśli dwa sąsiednie węzły są n-krotne, to łuk krzywej między nimi jest krzywą B´eziera; dokładniej, jeśli uk−n+1= · · · = uk < uk+1 = · · · = uk+n, to dla t ∈ [uk, uk+1] mamy

s(t) = n X i=0 dk−n+iBin t − uk uk+1− uk  .

6.2.4. Wstawianie węzła

Wstawianie węzła jest procedurą, która zmienia reprezentację krzywej, nie zmieniając samej krzywej. W wyniku zastosowania tej procedury otrzymujemy reprezentację o większej liczbie wę-złów i punktów kontrolnych. Idea postępowania, które prowadzi do otrzymania tej reprezentacji może być przedstawiona w następujących krokach

1. Określamy tak zwane współrzędne Greville’a:

ξi = 1

n(ui+1+ · · · + ui+n).

Będziemy (w myśli) przekształcać łamaną o wierzchołkach fi= [ξi, di].

2. Dołączamy liczbę t ∈ [un, uN −n] (wstawiany węzeł) do wyjściowego ciągu węzłów, z zacho-waniem uporządkowania.

3. Obliczamy nowe współrzędne Greville’a ξti, odpowiadające ciągowi węzłów z dołączoną licz-bą t.

4. Znajdujemy punkty fit = [ξit, dti] na łamanej. Punkty dti są punktami kontrolnymi nowej reprezentacji krzywej.

Praktyczna implementacja procedury wstawiania węzła nie musi obliczać współrzędnych Gre-ville’a, które pełnią tu rolę pomocniczą. Równoważny skutek daje następujący podprogram:

Listing.

{u[i] = ui dlai = 1, . . . , N −1, d[i] = di dlai = 0, . . . , N −n−1, } {t ∈ [un, uN −n]}

k := N − 1;

while t < u[k] do

k := k − 1; r := 0; i := k;

while (i ­ 1) and (t = u[i]) do begin i := i − 1; r := r + 1 end; for i := N − n − 1 downto k − r do

d[i + 1] := d[i];

for i := k − r downto k − n + 1 do

d[i] := (u[i + n] − t)∗d[i − 1] + (t − u[i])∗d[i]/(u[i + n] − u[i]); for i := N − 1 downto k + 1 do

u[i + 1] := u[i]; u[k + 1] := t; N := N + 1;

{ zmiennaN oraz tabliceuidzawierają wynik wstawiania węzła. }

Własności tego przekształcenia reprezentacji krzywej są następujące: — Po wstawieniu węzła liczba punktów kontrolnych jest większa o 1. — Wynik wstawienia kilku węzłów nie zależy od kolejności ich wstawiania.

— Krzywa reprezentowana przez nowy ciąg węzłów i nowy ciąg punktów kontrolnych jest iden-tyczna z krzywą wyjściową.

— Algorytm de Boora jest procedurą wstawiania węzła, powtórzoną tyle razy, aby ostatecznie otrzymać n-krotny węzeł t.

— Po wstawieniu dostatecznie wielu węzłów (tak, aby ich odległości stały się dostatecznie ma-łe), otrzymujemy łamaną kontrolną, która jest dowolnie bliska krzywej. Odległość odpowied-nio sparametryzowanej łamanej kontrolnej od reprezentowanej przez nią krzywej B-sklejanej jest proporcjonalna do h2, gdzie h oznacza maksymalną odległość sąsiednich węzłów. Datego po wstawieniu nawet niezbyt dużej liczby węzłów możemy otrzymać łamaną, którą można narysować w celu uzyskania dość dokładnego obrazu krzywej.

Rysunek 6.10. Zasada wstawiania węzła.

Procedurę wstawiania węzła możemy wykorzystać tak:

1. wybieramy początkowo małą liczbę węzłów i punktów kontrolnych w celu zgrubnego ukształ-towania krzywej,

2. wstawiamy pewną liczbę dodatkowych węzłów,

3. poprawiamy krzywą w celu wymodelowania szczegółów.

Inne zastosowanie to wstawienie węzłów tak, aby krotność wszystkich węzłów była równa n + 1; łamana kontrolna składa się wtedy z łamanych kontrolnych B´eziera poszczególnych łuków wielomianowych, które można narysować za pomocą jakiejś szybkiej procedury, np. opartej na schemacie Hornera. Procedury rysowania krzywych B´eziera mogą być zaimplementowane w sprzęcie. Mając procedurę wstawiania węzłów, możemy użyć takiego sprzętu do rysowania krzywych B-sklejanych.

6.2.5. Krzywe B-sklejane z węzłami równoodległymi

Narzucenie węzłów równoodległych ogranicza klasę krzywych B-sklejanych, ale jednocześnie upraszcza wzory i umożliwia stosowanie specjalnych algorytmów.

Przypuśćmy (bez straty ogólności), że dana krzywa jest reprezentowana przez nieskończo-ny ciąg węzłów, składający się z wszystkich liczb całkowitych, i nieskończonieskończo-ny ciąg punktów kontrolnych ci; mamy zatem

s(t) = X

i∈Zs

ciNin(t),

gdzie każda funkcja B-sklejana Ninstopnia n przyjmuje wartości różne od zera tylko w przedziale [i, i + n + 1). Ponadto dla każdego i ∈ Z oraz t ∈ R mamy Nin(t) = N0n(t − i).

Rozważmy teraz nieskończony ciąg węzłów, składający się z wszystkich całkowitych wielo-krotności liczby 12. Niech Min oznacza funkcję B-sklejaną opartą na tym ciągu węzłów i przyj-mującą niezerowe wartości w przedziale i

2,i+n+12 

. Krzywą s możemy przedstawić w postaci

s(t) = X

i∈Zs

diMin(t).

Na podstawie danych punktów ci należy znaleźć punkty di.

Algorytm Lane’a-Riesenfelda, który rozwiązuje to zadanie, podaję bez dowodu. Algo-rytm ten składa się z dwóch etapów. Pierwszy z nich to podwajanie: konstruujemy punkty

d(0)2i = d(0)2i+1 = ci. W drugim etapie wykonujemy n-krotnie operację uśredniania: obliczamy punkty d(j)i = 12 d(j−1)i−1 + d(j−1)i 

. Mając daną początkową reprezentację krzywej s w posta-ci łamanej o wierzchołkach c0, . . . , cN, w kolejnych krokach uśredniania otrzymamy łamane o wierzchołkach d(j)j , . . . , d(j)2N +1−j. Wynikiem obliczenia są punkty di = d(n)i dla każdego i ∈ Z.

Rysunek 6.11. Algorytm Lane’a-Riesenfelda dla krzywych stopnia 2, 3 i 4.

Wyniki działania algorytmu dla krzywych stopnia 2, 3 i 4 są pokazane na rysunku 6.11. Otrzymaną łamaną można następnie użyć jako dane dla algorytmu Lane’a-Riesenfelda i otrzy-mać łamaną reprezentującą krzywą s przy użyciu ciągu węzłów (4i)i∈Zs itd. Określony w ten sposób nieskończony ciąg łamanych, z których każda jest reprezentacją krzywej związaną z od-powiednim ciągiem węzłów równoodległych, jest szybko zbieżny do krzywej, można zatem na-rysować jedną z tych łamanych zamiast krzywej.

W dokumencie Grafika komputerowa I – MIM UW (Stron 72-78)