• Nie Znaleziono Wyników

Powierzchnie B´ eziera i B-sklejane

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

6. Elementy modelowania geometrycznego

6.3. Powierzchnie B´ eziera i B-sklejane

6.3.1. Płaty tensorowe

Do określenia powierzchni potrzebne są funkcje dwóch zmiennych. Najczęściej wykorzystuje się iloczyn tensorowy przestrzeni funkcji jednej zmiennej. Użycie go prowadzi do wzorów

p(u, v) = n X i=0 m X j=0 pijBin(u)Bjm(v), s(u, v) = N −n−1 X i=0 M −m−1 X j=0 dijNin(u)Njm(v),

które opisują odpowiednio płat powierzchni B´eziera i płat powierzchni B-sklejanej stopnia (n, m). W przypadku płata B-sklejanego, nawet jeśli stopień ze względu na każdy parametr jest taki sam, można podać inny ciąg węzłów określających funkcje bazowe.

Rysunek 6.12. Płat B-sklejany.

Dziedziną płata B´eziera jest zwykle kwadrat jednostkowy. Dziedziną płata B-sklejanego jest prostokąt [un, uN −n] × [vm, vM −m]. Często dziedzinę otrzymuje się przez odrzucenie fragmentów takiego prostokąta; mamy wtedy płat obcięty (rys.6.13).

Rysunek 6.13. Obcięty płat B´eziera.

Punkty kontrolne płata każdego z tych rodzajów dla wygody kształtowania przedstawia się w postaci siatki. Wyróżniamy w niej wiersze i kolumny. Wyznaczenie punktu na powierzchni, dla ustalonych parametrów u, v, można sprowadzić do wyznaczania punktów na krzywych (B´eziera albo B-sklejanych), np.

p(u, v) = n X i=0 m X j=0 pijBjm(v) | {z } qi Bin(u) = n X i=0 qiBin(u).

Wszystkie działania wykonujemy na kolumnach siatki, traktując je tak, jakby to były łamane kontrolne krzywych. Punkty tych krzywych, odpowiadające ustalonemu v, są punktami kon-trolnymi krzywej stałego parametru u leżącymi na płacie. Można też postąpić w odwrotnej kolejności i najpierw przetwarzać wiersze, a potem kolumnę otrzymanych punktów.

Rysunek 6.14. Wyznaczanie punktu na płacie B´eziera.

Zasada przetwarzania reprezentacji płata w celu podwyższenia stopnia, podziału na kawałki, wstawienia węzła i obliczenia pochodnych cząstkowych jest identyczna.

6.3.2. Płaty trójkątne

Dziedziną trójkątnego płata B´eziera jest zwykle trójkąt, którego wierzchołki stanowią układ odniesienia układu współrzędnych barycentrycznych r, s, t. Suma tych współrzędnych jest równa 1, wewnątrz trójkąta mają one wartości dodatnie.

Płat jest określony wzorem

p(r, s, t) = X

i,j,k­0 i+j+k=n

pijkBnijk(r, s, t),

w którym występują wielomiany Bernsteina trzech zmiennych stopnia n i punkty kon-trolne pijk, będące wierzchołkami siatki kontrolnej płata trójkątnego.

Rysunek 6.15. Trójkątny płat B´eziera i jego siatka kontrolna.

Algorytm wyznaczania punktu (algorytm de Casteljau) jest następujący: Listing.

{p(0)ijk = pijk dlai, j, k ­ 0, i + j + k = n}

for l := 1 to n do

for i, j, k ­ 0, i + j + k = n − l do p(l)ijk := rp(l−1)i+1,j,k+ sp(l−1)i,j+1,k+ tp(l−1)i,j,k+1;

{p(r, s, t) = p(n)000 }

Podobnie jak w przypadku krzywych B´eziera, algorytm de Casteljau pozwala dokonać po-działu płata. Punkty kontrolne jego fragmentów to odpowiednio p(i)0jk, p(j)i0k, p(k)ij0. Jeśli współ-rzędna r, s lub t jest równa 0 (punkt, któremu odpowiada obliczony punkt na płacie, leży na

boku trójkąta, który jest dziedziną), to mamy możliwość podziału płata na dwa fragmenty. Algorytm de Casteljau działa wtedy w taki sposób, jakby poszczególne wiersze siatki kontrolnej były łamanymi kontrolnymi krzywych B´eziera stopni 0, 1, . . . , n.

6.3.3. Metody siatek

Algorytm Lane’a-Riesenfelda dla powierzchni B-sklejanych stopnia (n, n) jest dwuwymiaro-wą wersją algorytmu przedstawionego wcześniej dla krzywej. Punkty cik, przy użyciu których powierzchnia sklejana jest określona wzorem

s(u, v) = X

i∈Zs X j∈Zs

cikNin(u)Nkn(v),

z funkcjami B-sklejanymi stopnia n opartymi na (tym samym) ciągu węzłów całkowitych, po-służą do obliczenia punktów dik, takich że

s(u, v) = X

i∈Zs X j∈Zs

dijMin(u)Mjn(v),

gdzie funkcje Min są określone przy użyciu ciągu węzłów (2i)i∈Zs. Algorytm składa się z kroku podwajania i n kroków uśredniania, przy czym

1. W kroku podwajania przyjmujemy

d(0)2i,2k= d(0)2i,2k+1= d(0)2i+1,2k = d(0)2i+1,2k+1 = cik.

2. W kroku uśredniania dla j = 1, . . . , n przyjmujemy

d(j)ik = 1

4 d(j−1)i−1,k−1+ d(j−1)i,k−1 + d(j−1)i−1,k+ d(j−1)ik 

.

W ten sposób otrzymujemy nową siatkę kontrolną; powtarzając ten algorytm, otrzymamy ciąg siatek szybko zbieżny do powierzchni s. Dowolną z tych siatek (otrzymaną np. po kilku, naj-wyżej kilkunastu iteracjach) możemy uznać za dostatecznie dokładne przybliżenie powierzchni i narysować zamiast niej.

Okazuje się, że opisane wyżej postępowanie daje się uogólnić na siatki nieregularne, tj. takie, których wierzchołków nie można ustawić w prostokątną tablicę. Rozważmy siatkę jako graf; wierzchołki siatki są wierzchołkami grafu, odcinki siatki są krawędziami grafu, możemy też określić ściany grafu, jako łamane zamknięte złożone z krawędzi, takie że odrzucenie wierz-chołków i krawędzi łamanej nie likwiduje spójności grafu. Zakładamy, że każda krawędź należy do jednej lub do dwóch ścian.

Siatka jest regularna, jeśli wszystkie ściany mają 4 krawędzie i każdy wierzchołek nie leżący na brzegu siatki, tzw. wewnetrzny, jest stopnia 4 (tj. jest incydentny z czterema krawędziami). Każda ściana nie-czworokątna i każdy wierzchołek wewnętrzny stopnia różnego od 4 jest tzw. elementem specjalnym siatki.

Dla siatki, która zawiera elementy specjalne, możemy określić operację podwajania w ten sposób: każdy wierzchołek stopnia k zastępujemy przez ścianę (zdegenerowaną do punktu), która ma k wierzchołków i krawędzi. Każdą krawędź zastępujemy przez ścianę czworokątną, zdegenerowaną do odcinka; ściany dotychczasowe pozostawiamy (oczywiście, w nowej siatce zmieni się numeracja wierzchołków każdej ściany). Jeśli siatka jest regularna, to wynik jest taki sam jak wynik kroku podwajania w algorytmie Lane’a-Riesenfelda dla powierzchni.

Operację uśredniania określamy tak: konstruujemy graf dualny do siatki danej. Dla każdej ściany określamy wierzchołek, jako środek ciężkości wierzchołków tej ściany. Dla każdej krawędzi wspólnej dla dwóch ścian wprowadzamy krawędź łączącą wierzchołki skonstruowane dla tych

Rysunek 6.16. Siatki przetwarzane przez algorytmy Doo-Sabina i Catmulla-Clarka.

ścian. Ściany nowej siatki odpowiadają wierzchołkom wewnętrznym siatki danej. Również taka operacja uśredniania jest dla siatki regularnej identyczna z uśrednianiem wykonywanym w al-gorytmie Lane’a-Riesenfelda. Zauważmy, że choć liczba wierzchołków, krawędzi i ścian rośnie podczas podwajania, ale żadna z opisanych operacji nie może powiększyć liczby elementów specjalnych w siatce.

Możemy teraz wykonać podwajanie, a następnie n kroków uśredniania. Dwa najczęściej stosowane przypadki, dla n = 2 oraz n = 3, są znane odpowiednio jako algorytmy Doo-Sabina i Catmulla-Clarka. Iterując dowolny z tych algorytmów, otrzymamy ciąg siatek zbieżny do powierzchni granicznej. Powierzchnia ta prawie w całości składa się z kawałków wielomianowych stopnia (n, n); wyjątkiem jest otoczenie punktów, do których zbiegają elementy specjalne siatki.

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