VI. FIGURY GEOMETRYCZNE i MODELE 6.1. Wprowadzenie Jednym z głównych zastosowań grafiki komputerowej jest modelowanie obiektów, czyli ich opis matematyczny, na podstawie którego na ekranie można stworzyć obraz symulujący obiekty rzeczywiste. Do opisu matematycznego można używać podstawowych elementów geometrycznych, takich jak punkty, odcinki, łamane, wielokąty i wielościany. Opis tych elementów charakteryzuje się prostotą i dlatego łatwo je implementować na komputerze oraz wykonywać na nich najróżniejsze przekształcenia. Za ich pomocą konstruuje się modele siatkowe, szeroko stosowane głównie w pracach projektowych. Do konstruowania bardziej realistycznych modeli używa się odcinków krzywych płaskich i przestrzennych oraz wycinków powierzchni. Dodatkowymi elementami, które znacząco wpływają na zwiększenie realizmu obrazów obiektów, są kolory, cienie (zob. rozdział 9) i tekstury, tj. symulacje układu ziarn, warstw lub włókien w wewnętrznej budowie obiektów. W wielu językach programowania wysokiego poziomu, np. C++, Delphi czy Java, istnieją gotowe narzędzia (funkcje i procedury) do konstruowania prostych figur dwuwymiarowych, takich jak wielokąty (w tym: trójkąty, równoległoboki, romb, prostokąt, kwadrat i trapez), okrąg, koło i jego elementy (odcinek, wycinek i pierścień kołowy) oraz elipsę. Narzędzia te w wielu przypadkach ułatwiają otrzymywanie obrazów odzwierciedlających obiekty rzeczywiste. 6.2. Modele siatkowe Model siatkowy (ang. wireframe model), zwany też siatką wielokątową (ang. polygonal net, polygonal mesh) składa się z krawędzi, wierzchołków i wielokątów. Krawędzie łączą wierzchołki, a wielokąty są ciągami wierzchołków lub krawędzi. Krawędzie mogą być odcinkami krzywych lub prostych. Siatkę wielokątową można przedstawić na kilka sposobów. Najbardziej znanymi sposobami są reprezentacje przez:! listę wierzchołków,! listę wielokątów,! listę krawędzi. Reprezentacja za pomocą listy wierzchołków polega na zapamiętaniu wierzchołków P i o współrzędnych (x i, y i, z i ) (i ' 0, 1,..., N) w kolejności, w której będą one odczytywane podczas rysowania modelu. Otrzymana w ten sposób lista V ' { P 0, P 1,..., P N } jest jednak użyteczna tylko w przypadku prostej siatki wielokątów. Dla siatki złożonej reprezentacja taka jest nieefektywna, gdyż w liście V te same punkty mogą być zapamiętane wiele razy, a przy rysowaniu modelu wielokrotnie mogą być rysowane krawędzie pokrywające się.
110 VI. Figury geometryczne i modele Przykład 6.1 Rozważmy reprezentację za pomocą listy wierzchołków prostopadłościanu przedstawionego na rys. 60. Jedną z możliwych list jest V ' {A, B, C, D, A, F, E, D, C, H, E, F, G, H, G, B}. Czytelnik powinien sprawdzić, że odczytywanie kolejnych elementów tej listy i rysowanie odpowiednich odcinków (AB, BC, CD itd.) spowoduje narysowanie całego prostopadłościanu. W liście V każdy punkt jest jednak pamiętany dwukrotnie, a ponadto dwukrotnie będzie rysowana krawędź łącząca wierzchołki E i F (raz jako odcinek FE i drugi raz jako odcinek EF). To samo dotyczy krawędzi łączących wierzchołki C i D oraz G i H. Rys. 60. Prostopadłościan W przypadku reprezentacji za pomocą listy wielokątów każdy wierzchołek jest pamiętany tylko raz w liście P ' {P 0, P 1,..., P K }, a każdy wielokąt jest zdefiniowany przez odpowiednie wskaźniki lub indeksy do tej listy. Ciąg kolejno rysowanych wielokątów jest przy tym pamiętany w innej liście, którą oznaczymy W ' { W 0, W 1,..., W M }. Niestety, także w tej reprezentacji, krawędzie pokrywające się mogą być rysowane wiele razy. Przykład 6.2 Przy reprezentacji za pomocą listy wielokątów dla prostopadłościanu z poprzedniego przykładu lista wierzchołków ma postać P ' {A, B, C, D, E, F, G, H}. Właściwa lista wielokątów W składa się z sześciu elementów: W ' { W 0, W 1, W 2, W 3, W 4, W 5 }, przy czym poszczególne elementy (wielokąty, będące w tym przypadku prostokątami), których kolejność nie jest istotna, zawierają wskazania (lub indeksy) na następujące punkty: W 0 ' {A, B, C, D}, W 1 ' {A, B, G, F}, W 2 ' {B, C, H, G}, W 3 ' {D, C, H, E}, W 4 ' {D, A, F, E}, W 5 ' {E, F, G, H}. Oczywiście punkty te mogą być cyklicznie przesunięte. Zauważmy, że każda krawędź będzie rysowana dwukrotnie. Przy przedstawieniu siatki wielokątowej za pomocą listy krawędzi sporządza się listę wierzchołków P ' {P 0, P 1,..., P K }, w której każdy wierzchołek jest pamiętany tylko raz oraz listę krawędzi K ' {K 0, K 1,..., K L }, w której każda krawędź jest też pamiętana tylko raz. Każdy element K i (i ' 0, 1,..., L) wskazuje (lub indeksuje) na dwa wierzchołki P i i P j (i j) definiujące początek i koniec krawędzi. Wielokąty składające się na model mogą być przedstawione przez listę wskaźników (lub indeksów) do listy krawędzi. Każdy element listy krawędzi może zawierać
6.3. Konstruowanie krzywych płaskich 111 przy tym dodatkowe pole (na przykład typu logicznego), określające, czy dana krawędź została już narysowana. Dzięki temu podczas rysowania kolejnych wielokątów każda krawędź zostanie narysowana tylko raz. Oczywiście można też po kolei narysować wszystkie krawędzie (bez definiowania wielokątów). Przykład 6.3 Rozważmy ponownie prostopadłościan z rys. 60. Lista wierzchołków prostopadłościanu zawiera osiem elementów: P ' {A, B, C, D, E, F, G, H}. Lista krawędzi, w której kolejność elementów nie jest istotna, ma postać K ' {AB, AF, AD, BC, BG, CD, CH, DE, EF, EH, FG, GH}. Prostokąty, tworzące poszczególne ściany, mogą być przedstawione za pomocą czteroelementowych podzbiorów listy K, np. dla czworokąta ABCD mamy W 0 ' {AB, AD, BC, CD}. 6.3. Konstruowanie krzywych płaskich Konstrukcja krzywej płaskiej polega na jej wyznaczeniu na podstawie danych n%1 punktów P 0, P 1,..., P n o współrzędnych odpowiednio (x 0, y 0 ), (x 1, y 1 ),..., (x n, y n ). Oczywiście przez pewną liczbę punktów (lub w ich pobliżu) można przeprowadzić nieskończenie wiele krzywych. Dlatego ważne jest dokładne określenie sposobu ich wyznaczania. Zagadnienie, w którym krzywa ma przechodzić przez wszystkie dane punkty, nazywa się interpolacją. Jeśli krzywa ma tylko przechodzić w pobliżu tych punktów, to zadanie nazywa się aproksymacją. W obu tych zagadnieniach będziemy zakładać, że krzywa jest przedstawiona parametrycznie, tj. gdzie x(t) i y(t) oznaczają ciągłe funkcje zmiennej t 0 [a, b] 1). Interpolację lub aproksymację wykonuje się dla każdej składowej przedstawienia Q(t). W przypadku interpolacji określa się klasę funkcji, w której poszukuje się funkcji interpolującej, a w przypadku aproksymacji należy dodatkowo określić kryteria aproksymacji, tj. zdefiniować znaczenie terminu przechodzenia w pobliżu punktów. W obu tych zadaniach (interpolacji i aproksymacji) często jest konieczne skonstruowanie odpowiedniej krzywej z mniejszych części, zwanych segmentami lub odcinkami krzywymi. Funkcję f(x) składającą się z segmentów określamy zwykle jako skończoną sumę funkcji bazowych (ang. basis functions, blending functions), które reprezentują poszczególne segmenty: Jako funkcje bazowe wybiera się zwykle wielomiany, które można łatwo zapamiętać, obliczać (na przykład za pomocą zależności rekurencyjnych) i przedstawiać na ekranie. 1) Tę samą krzywą można różnie parametryzować. Dwa przedstawienia: Q 1 (t) dla t 0 [a, b] oraz Q 2 (s) dla s 0 [c, d] nazywamy równoważnymi, gdy istnieje ciągła i niemalejąca funkcja t(s), t: [a, b] 6 [c, d], taka że Q 1 (t(s)) ' Q 2 (s).
112 VI. Figury geometryczne i modele Wielomianem stopnia n nazywamy funkcję postaci Do określenia tego wielomianu wystarczy znajomość n%1 współczynników a 0, a 1,..., a n. Ciągłym wielomianem segmentowym (ang. piecewise polynomial) stopnia n 1) nazywamy zbiór k wielomianów q n,i (x) stopnia nie wyższego od n oraz k%1 węzłów t 0, t 1,..., t k takich, że Zauważmy, że definicja ta wymaga, by w węzłach wartości dwu kolejnych wielomianów pokrywały się, tj. q n,i&1 (t i ) ' q n,i (t i ), a ponadto, że nie nakłada ona żadnych ograniczeń na gładkość funkcji Q n (x) w węzłach. Z uwagi na duże oscylacje wielomiany segmentowe wysokich stopni nie są używane. Największe znaczenie praktyczne mają wielomiany segmentowe stopnia trzeciego (n ' 3), które z jednej strony zapewniają wymaganą gładkość rysunku krzywej, a z drugiej nie są zbyt skomplikowane w obliczeniach. 6.3.1. Funkcje wielomianowe Poniżej przedstawiamy wielomiany najczęściej używane jako funkcje bazowe przy konstruowaniu krzywych w grafice komputerowej. Wielomiany Lagrange'a stopnia n Dla n%1 danych punktów t 0, t 1,..., t n, przy czym t i t j dla i j, wielomiany Lagrange'a stopnia n są określone wzorem (6.1) Zauważmy, że L n,i (t i ) ' 1. Wielomiany Hermite'a stopnia trzeciego Niech t 0 < t 1 <... < t k oznaczają węzły. Wielomiany Hermite'a stopnia trzeciego mają postać (zob. rys. 61) (6.2) 1) Pojęcia tego nie należy mylić z funkcją sklejaną, której definicja jest następująca: Funkcję rzeczywistą S nazywamy funkcją sklejaną stopnia n z węzłami a ' t 0 # t 1 #... # t k ' b, jeśli! w każdym przedziale [ t i, t i%1 ), gdzie i ' 0, 1,..., k & 1, funkcja S jest wielomianem stopnia nie wyższego niż n,! funkcja S i jej pochodne rzędu 1, 2,..., n & 1 są ciągłe dla t 0 [ a, b ].
6.3. Konstruowanie krzywych płaskich 113 (6.3) przy czym i ' 1, 2,..., k&1. Zauważmy, że, oraz. Rys. 61. Wielomiany Hermite'a stopnia trzeciego Bazowe funkcje B-sklejane Niech t 0, t 1,..., t k oznaczają węzły. Bazowe funkcje B-sklejane B n, i stopnia n są zdefiniowane rekurencyjnie: (6.4) Poza przedziałem [t i, t n%i%1 ] mamy B n,i (x) ' 0. Z wzorów (6.4) otrzymujemy w szczególności, często używane w praktyce, bazowe funkcje B-sklejane stopnia trzeciego B 3,i (x), które przyjmują wartości różne od 0 wewnątrz przedziału [t i, t i%4 ] (zob. rys. 62). Dla bazowych funkcji B-sklejanych można wykazać, że gdy węzły nie są wielokrotne, to dla n $ 1 na końcach przedziału [t i, t n%i%1 ] przyjmują one wartość 0, tj.
114 VI. Figury geometryczne i modele Przy stosowaniu tych funkcji dopuszcza się też możliwość występowania węzłów wielokrotnych. Pojawiające się wówczas ilorazy interpretuje się jako wartości równe 0. Rys. 62. Funkcja bazowa B 3, i (x) Wielomiany Bernsteina stopnia n Wielomiany Bernsteina są zdefiniowane w przedziale [0, 1]: (6.5) gdzie k ' 0, 1,..., n. W szczególności wielomiany Bernsteina stopnia trzeciego są określone następującymi wzorami (zob. rys. 63): Rys. 63. Wielomiany Bernsteina stopnia trzeciego
6.3. Konstruowanie krzywych płaskich 115 (6.6) 6.3.2. Interpolacje krzywych Zadanie interpolacji funkcji f(x) (jednej zmiennej x) polega na wyznaczeniu n%1 parametrów " 0, " 1,..., " n funkcji tak, by dla danych n%1 par liczb rzeczywistych (x i, f(x i )) 1), gdzie x i x j dla i j, spełnione były warunki W grafice komputerowej stosuje się zwykle liniowe zadanie interpolacyjne, w którym funkcja zależy liniowo od parametrów: gdzie funkcje są funkcjami bazowymi (odpowiednimi wielomianami 2) ). W celu interpolacji krzywej przechodzącej przez punkty P 0, P 1,..., P n o współrzędnych odpowiednio (x 0, y 0 ), (x 1, y 1 ),..., (x n, y n ) 3) zakładamy, że jest ona przedstawiona parametrycznie: gdzie x(t) i y(t) oznaczają ciągłe funkcje zmiennej t 0 [a, b]. Interpolację wykonujemy dla każdej składowej przedstawienia Q(t), tj. oddzielnie dla funkcji x(t) oraz y(t). Poniżej przedstawiamy zadanie interpolacyjne Lagrange'a oraz przypadki szczególne (stosowane w grafice komputerowej) interpolacji Hermite'a i interpolacji funkcjami sklejanymi. Interpolacja Lagrange'a Zadanie interpolacji Lagrange'a polega na znalezieniu wielomianu L n (t) stopnia nie wyższego niż n, który dla danych n%1 par liczb (t i, f(t i )) (i ' 0, 1,..., n), gdzie t i t j dla i j, spełnia warunki 1) W ogólności pary te mogą być liczbami zespolonymi. 2) W ogólnym liniowym zadaniu interpolacyjnym funkcje bazowe nie muszą być wielomianami. 3) Dalsze rozważania można uogólnić na przypadek krzywej przestrzennej przechodzącej przez punkty P, 0 P 1,..., P n o współrzędnych odpowiednio ( x 0, y 0, z 0 ), ( x 1, y 1, z 1 ),..., ( x n, y n, z n ).
116 VI. Figury geometryczne i modele Rozwiązaniem tego zadania jest wielomian postaci (6.7) gdzie L n,i (t) (i ' 0, 1,..., n) oznaczają wielomiany Lagrange'a określone wzorem (6.1). W praktyce nie stosujemy bezpośrednio wzoru (6.7), lecz korzystamy z tzw. postaci Newtona wielomianu (6.7), w której niezbędne współczynniki wyznaczamy algorytmem opartym na ilorazach różnicowych (zob. p. 7.2.1). Warto dodać, że przy różnych wyborach węzłów t i wielomianowe krzywe interpolujące będą na ogół różne oraz przy dużej liczbie punktów, a tym samym wysokim stopniu n, wartości wielomianu interpolacyjnego mogą bardzo oscylować. Interpolacja Hermite'a Ogólne sformułowanie zadania interpolacyjnego Hermite'a można znaleźć w podręcznikach dotyczących metod numerycznych. W zadaniu tym zakłada się, że w węzłach dane są nie tylko wartości interpolowanej funkcji, ale także wartości pochodnych odpowiednich rzędów. W szczególności załóżmy, że we wszystkich węzłach t i (i ' 0, 1,..., k) dane są wartości i. Wielomian segmentowy H(t) stopnia trzeciego przechodzący przez te węzły i różniczkowalny w nich w sposób ciągły, który ponadto spełnia warunki interpolacji, tj. ma postać (6.8) gdzie i oznaczają wielomiany bazowe Hermite'a stopnia trzeciego określone wzorami (6.2) i (6.3). Interpolacja funkcjami sklejanymi W grafice komputerowej stosuje się zwykle interpolację funkcjami B-sklejanymi stopnia trzeciego. Każda funkcja sklejana ma tę własność, że w węzłach wielomiany-segmenty są połączone w możliwie najgładszy sposób, co oznacza, że funkcja sklejana stopnia n ma w węzłach ciągłe pochodne do rzędu n&1. Można udowodnić, że każda funkcja sklejana stopnia n, która przechodzi przez k%1 punktów może być przedstawiona jako kombinacja liniowa bazowych funkcji B-sklejanych: Aby funkcję tę zastosować do rozwiązania zagadnienia interpolacji, należy odpowiednio dobrać węzły występujące we wzorach (6.4), definiujących funkcje bazowe B n,i (t). Ponieważ we wzorach tych węzły były oznaczone przez t i, a obecnie użyliśmy tego oznaczenia dla wartości argumentów interpolowanej funkcji, oznaczmy chwilowo węzły definiujące funkcje bazowe przez J i. Z uwagi na fakt, że w powyższym przedstawieniu funkcji sklejanej indeks i zmienia się od 0 do n%k&1 i dla tych wartości indeksów należy wyznaczyć funkcje bazowe B n,i (t) stopnia n, potrzebnych jest (n%k&1)%1%n%1 ' 2n%k%1 węzłów: J 0, J 1,..., J 2n%k.
6.3. Konstruowanie krzywych płaskich 117 Z zależności (6.4) wynika, że pierwsze n%1 węzłów definiuje funkcję S n (t) w przedziale [J n, J n%1 ], a ostatnie n%1 węzłów określa tę funkcje w przedziale [J n%k&1, J n%k ]. Zatem funkcja S n (t) jest zdefiniowana w przedziale [J n, J n%k ]. Węzły początkowe J 0, J 1,..., J n oraz końcowe J n%k, J n%k%1,..., J 2n%k nazywają się węzłami brzegowymi. Jeśli J 0 ' J 1 '... ' ' J n oraz J n%k ' ' J n%k%1 '... ' J 2n%k, to (6.9) Można udowodnić, że pochodna funkcji S n (t), której bazą są funkcje B-sklejane oparte na węzłach J j, jest też kombinacją liniową bazowych funkcji B-sklejanych opartych na tych samych węzłach: gdzie (6.10) Załóżmy, że dane jest k%1 par liczb (t i, f(t i )) (i ' 0, 1,..., k), przy czym t 0 < t 1 <... < < t k. W bazie funkcji B-sklejanych funkcja sklejana stopnia trzeciego, przechodząca przez te punkty, ma postać co oznacza, że należy określić k%3 współczynniki a i. Z warunków interpolacji (6.11) i z wzoru (6.11) otrzymujemy k%1 równań liniowych: (6.12) Brakujące dwa równania otrzymuje się z określenia tzw. warunków brzegowych. Warunki te mogą być różne. Przy danych współczynnikach kierunkowych stycznych na końcach przedziału [t 0, t k ], tj. wartościach i, warunki te mają postać Jeśli warunkami brzegowymi będą (6.13) (6.14) to otrzymaną funkcję interpolującą nazywa się naturalną funkcją sklejaną. Przy warunkach brzegowych otrzymaną funkcję nazywamy okresową funkcją sklejaną. Wreszcie, przy warunkach (6.15)
118 VI. Figury geometryczne i modele (6.16) otrzymujemy tzw. antyokresową funkcję sklejaną (ang. anticyclic spline). W każdym z warunków brzegowych (6.13) (6.16) występują pochodne funkcji sklejanej. Z zależności (6.10) mamy (6.17) oraz (6.18) Węzły J i wiążemy z danymi punktami t j w taki sposób, by funkcja S 3 (t) była określona dla t 0 [t 0, t k ] i aby jednocześnie można skorzystać z zależności (6.9): Każda bazowa funkcja sklejana B 3,i (t) poza przedziałem [J i, J i%4 ] przyjmuje wartość 0. Podobnie, poza przedziałem [J i, J i%3 ] mamy B 2,i (t) ' 0, a poza przedziałem [J i, J i%2 ] mamy także B 1,i (t) ' 0. Uwzględniając te fakty, możemy określić postacie równań liniowych, które należy rozwiązać w celu zdefiniowania funkcji sklejanych stopnia trzeciego przy różnych warunkach brzegowych. We wszystkich przypadkach mamy (6.19) Jest to układ k&1 równań z k%1 niewiadomymi a 1, a 2,..., a k%1. Ponadto, z uwagi na określenie węzłów J i, zależności (6.9) i warunki interpolacji, mamy zawsze (6.20) Jeśli są dane warunki (6.13), to brakujące dwa równania wynikają z wzoru (6.17). Mamy bowiem gdyż B 2,i (t 0 ) ' 0 dla i > 1 oraz B 2,i (t n ) ' 0 dla i < k%2. Stąd oraz z warunków (6.13) wynika, że (6.21) Jeśli z powyższych wzorów wyznaczymy a 1 i a k%1, to na podstawie równań (6.19) do rozwiązania pozostanie nam układ postaci
6.3. Konstruowanie krzywych płaskich 119 w którym B oznacza macierz trójprzekątniową: (6.22) (6.23) oraz (6.24) Zauważmy, że gdy rozwiązujemy układ równań (7.22) dla każdej składowej parametrycznego przedstawienia krzywej, macierz B nie ulega zmianie. W przypadku naturalnej funkcji sklejanej z warunków (6.14) i zależności (6.18) wynika, że a więc dwa brakujące równania są następujące: (6.26) Łącząc równania (6.26) z układem (6.19) otrzymujemy układ k%1 równań z k%1 niewiadomymi postaci którego macierz jest trójprzekątniowa: (6.27)
120 VI. Figury geometryczne i modele (6.28) oraz (6.29) Dla okresowej funkcji sklejanej z warunków (6.15) oraz wzorów (6.17) i (6.18) otrzymujemy Stąd dwa brakujące równania są następujące: (6.30) Okresową funkcję sklejaną stosujemy w przypadku, gdy f(t 0 ) ' f(t k ) (jeśli warunek ten jest spełniony dla każdej składowej krzywej przedstawionej parametrycznie, to krzywa jest zamknięta). Wynika stąd, że a 0 ' a k%2. Uwzględniając ten fakt, z równań (6.19) i (6.30) otrzymujemy ostatecznie do rozwiązania układ równań liniowych w którym (6.31)
6.3. Konstruowanie krzywych płaskich 121 (6.32) przy czym oraz (6.34) W celu otrzymania antyokresowej funkcji sklejanej wystarczy zmienić znak z prawej strony równań (6.30) i uwzględnić fakt, że f(t 0 ) ' &f(t k ), czyli że a 0 ' &a k % 1. 6.3.3. Aproksymacje krzywych Załóżmy, że danych jest n%1 punktów P 0, P 1,..., P n o współrzędnych odpowiednio (x 0, y 0 ), (x 1, y 1 ),..., (x n, y n ), które będziemy nazywać punktami kontrolnymi. Punkty te określają łamaną. Naszym celem jest wyznaczenie gładkiej krzywej, która będzie przybliżać kształt tej łamanej (zob. rys. 64). Przedstawimy dwie różne aproksymacje:! Béziera-Bernsteina,! Béziera za pomocą funkcji B-sklejanych. W obu przypadkach będziemy poszukiwać parametrycznej reprezentacji krzywej.
122 VI. Figury geometryczne i modele Rys. 64. Przybliżenie łamanej krzywą Aproksymacja Béziera-Bernsteina W aproksymacji tej wykorzystuje się wielomiany Bernsteina wzorem (6.5) i poszukuje krzywej o przedstawieniu parametrycznym (i ' 0, 1,..., n) określone gdzie (6.35) przy czym t 0 [0, 1]. Krzywa Q(t) określona powyższymi wzorami nazywa się krzywą Béziera. Aproksymację Béziera-Bernsteina cechują cztery ważne własności:! krzywa Béziera Q(t) ma te same punkty końcowe, co łamana, tj.! kierunki wektorów stycznych do krzywej Q(t) 1) w punktach P 0 oraz P n są takie same, jak kierunki wektorów łączących punkty odpowiednio P 0 i P 1 oraz P n&1 i P n, przy czym! krzywa Béziera leży w całości w powłoce wypukłej 2) punktów kontrolnych P i, 1) Wektorem stycznym do krzywej Q(t) w punkcie t ' t 0 nazywamy wektor QN(t 0 ) ' [xn(t 0 ), yn(t 0 )]. 2) Powłoką wypukłą zbioru punktów nazywamy najmniejszy (w sensie zawierania) zbiór wypukły, do którego należą dane punkty. Zbiór X punktów nazywamy wypukłym, gdy odcinek łączący dowolne dwa punkty zbioru X jest zawarty w X.
6.3. Konstruowanie krzywych płaskich 123 Rys. 65. Połączenie krzywych Béziera! jeśli punkty R n&1, R n ' P 0 i P 1 dwóch łamanych S(t) oraz Q(t) są współliniowe 1), to krzywa powstała przez połączenie odpowiadających im krzywych Béziera jest różniczkowalna w sposób ciągły (zob. rys. 65). Ostatnia własność umożliwia wykorzystanie do konstrukcji krzywych Béziera wielomianów Bernsteina niskich stopni. Należy też zaznaczyć, że nie zawsze łatwo wyznaczyć zależność kształtu modelowanej krzywej od położenia punktów kontrolnych P 1, P 2,..., P n&1, a więc punktów innych niż końcowe punkty łamanej. Dla wielomianów Bernsteina zachodzi zależność rekurencyjna (6.36) z której korzysta się w algorytmie de Casteljau wyznaczania punktów krzywej Béziera na podstawie wzorów (6.35). Algorytm ten można zapisać następująco: (6.37) Można udowodnić, że Q n,n ' Q(t), a ponadto, że punkty Q 0,0, Q 1,1,..., Q n,n są punktami kontrolnymi fragmentu krzywej Béziera od punktu P 0 do punktu Q(t), zaś punkty Q n,n, Q n&1,n,..., Q 0,n punktami kontrolnymi tej krzywej od punktu Q(t) do punktu P n. Aproksymacja Béziera za pomocą funkcji B-sklejanych W aproksymacji tej używa się funkcji B-sklejanych (zob. p. 6.3.1). Dla danych k%1 punktów P i (i ' 0, 1,..., k) o współrzędnych (x i, y i ) krzywą aproksymującą o przedstawieniu parametrycznym określa się wzorami 1) Trzy punkty są współliniowe, jeżeli leżą na jednej prostej.
124 VI. Figury geometryczne i modele (6.38) gdzie t 0 [0, k&n%1], a funkcje B-sklejane są określone wzorami (6.4). Punkty węzłowe J 0, J 1,..., J k%n %1 tych funkcji (we wzorach (6.4) węzły są oznaczone przez t i ) wybiera się następująco: Wybór wielokrotnych węzłów brzegowych zapewnia, że końce krzywej B-sklejanej będą pokrywały się z końcowymi punktami kontrolnymi (początkowym i końcowym punktem łamanej). W celu skonstruowania zamkniętej krzywej B-sklejanej, aproksymującej zamkniętą łamaną, wystarczy wybrać węzły J i w taki sposób, aby były cykliczne, tj. Aproksymacja Béziera za pomocą funkcji B-sklejanych ma następujące własności:! dla n'k aproksymacja ta pokrywa się z aproksymacją Béziera-Bernsteina,! krzywa aproksymująca ma te same punkty końcowe, co łamana, kierunki wektorów stycznych do krzywej w punktach końcowych są takie same, jak kierunki wektorów łączących punkty P 0 i P 1 oraz P k&1 i P k, a ponadto krzywa aproksymująca leży w całości w powłoce wypukłej punktów kontrolnych (takie same własności ma aproksymacja Béziera-Bernsteina),! jeśli n%1 kolejne punkty kontrolne są współliniowe, to odpowiadająca im część krzywej B-sklejanej jest liniowa,! punkt kontrolny P i wpływa tylko lokalnie na kształt krzywej (wpływ ten jest ograniczony do przedziału [J i, J i % n % 1 ]),! krzywa B-sklejana na ogół lepiej przybliża łamaną (rozpiętą na punktach kontrolnych) niż krzywa Béziera. Do obliczania wartości punktów krzywej B-sklejanej stosuje się algorytm de Boora-Coxa. Algorytm ten opiera się na spostrzeżeniu, że dla J j < t < J j%1 tylko wartości funkcji B n,i (t) o indeksach i ' j&n, j&n%1,..., j są różne od 0, tj. Wspomniany algorytm, który obejmuje także przypadek t ' J j, gdzie J j oznacza węzeł p-krotny, a wartości t leżące wewnątrz przedziału (J j, J j%1 ) są traktowane jako węzły o krotności p ' 0, jest następujący:
6.4. Konstruowanie powierzchni 125 (6.39) Można udowodnić, że Q n&p, j ' Q(t). 6.4. Konstruowanie powierzchni Konstruowanie (modelowanie) powierzchni jest zadaniem dość trudnym. W kolejnych dwóch podpunktach przedstawiono metody modelowania powierzchni będące uogólnieniami metod aproksymacji krzywych oraz metodę interpolacji płata powierzchni. Powierzchnie będziemy przedstawiać parametrycznie, tj. (6.40) gdzie x, y i z oznaczają ciągłe funkcje zmiennych s 0 [a, b] i t 0 [c, d]. Parametry s i t noszą nazwę współrzędnych krzywoliniowych punktu powierzchni. Powierzchnie (6.40) opisuje się zwykle za pomocą przedstawienia parametrycznego w postaci iloczynu tensorowego: (6.41) a iloczyny F i (s)g j (t) tworzą funkcje bazowe. Określając funkcje F i (s) i G j (t) otrzymujemy różne rodzaje powierzchni. 6.4.1. Aproksymacje powierzchni Techniki aproksymacji powierzchni są bezpośrednim uogólnieniem metod aproksymacji krzywych. Najczęściej stosuje się aproksymacje Béziera-Bernsteina i funkcjami B-sklejanymi. W obu aproksymacjach zakładamy, że danych jest (n%1)(m%1) punktów kontrolnych P ij (i ' 0, 1,..., n; j ' 0, 1,..., m) o współrzędnych (x ij, y ij, z ij ), które tworzą siatkę wielokątową (zob. rys. 66). Punkty kontrolne P ij nazywa się też punktami Béziera. Aproksymacja Béziera-Bernsteina W aproksymacji tej wykorzystuje się wielomiany Bernsteina (zob. p. 6.3.1), a płat powierzchni, zwanej powierzchnią Béziera, określa się za pomocą następujących wzorów 1) : 1) Powierzchnie Béziera można też zdefiniować w obszarze trójkątnym (zob. dalej).
126 VI. Figury geometryczne i modele Rys. 66. Siatka wielokątowa (n ' 3, m ' 4) (6.42) przy czym s, t 0 [0, 1]. Płat powierzchni Béziera przechodzi przez punkty narożne P 00, P n0, P 0m i P nm. Większość pozostałych własności krzywej Béziera (zob. p. 6.3.3) przenosi się także na powierzchnię. W szczególności:! wartości pochodnych cząstkowych (wektory styczne) na brzegu płata zależą tylko od dwóch brzegowych wierszy (lub kolumn) punktów kontrolnych,! płat powierzchni Béziera leży w całości w powłoce wypukłej punktów P ij. Można też udowodnić, że brzegi płata powierzchni Béziera są krzywymi Béziera określonymi przez odpowiednie brzegowe punkty kontrolne tego płata. Do wyznaczania punktów powierzchni Béziera można wielokrotnie zastosować algorytm de Casteljau (zob. p. 6.3.3) do odpowiednich krzywych. W celu wyznaczenia współrzędnych punktu P w algorytmie tym najpierw oblicza się n%1 punktów kontrolnych P i, leżących na linii współrzędnej (krzywoliniowej) s, korzystając z wzoru Następnie obliczamy współrzędne punktu P na podstawie zależności
6.4. Konstruowanie powierzchni 127 Można też najpierw obliczyć algorytmem de Casteljau m%1 punktów P j leżących na linii współrzędnej t: a następnie wyznaczyć współrzędne punktu P z wzoru Drugi sposób jest bardziej zalecany w przypadku, gdy m < n (liczba działań w algorytmie jest wówczas mniejsza). Po wyznaczeniu wielu punktów płata powierzchni Béziera i zrzutowaniu ich na ekran, otrzymane rzuty punktów można połączyć odcinkami, tworząc w ten sposób model siatkowy płata. Należy przy tym pamiętać, że za małe zagęszczenie punktów płata może zdeformować jego obraz. Z kolei zbyt duże zagęszczenie tych punktów może obraz płata uczynić mało czytelnym. Przedstawiony sposób definiowania powierzchni Béziera dotyczył prostokątnego obszaru {(s, t): s 0 [0, 1], t 0 [0, 1]}. Płaty powierzchni Béziera mogą być też określane na trójkątach. Jeśli przez T oznaczymy trójkąt o wierzchołkach T 1, T 2 i T 3 leżący w płaszczyźnie st, to dowolny punkt P 0 T można jednoznacznie przedstawić w postaci kombinacji liniowej wierzchołków tego trójkąta: Współczynniki t 1, t 2 i t 3 noszą nazwę współrzędnych barycentrycznych punktu P. Gdy P 0 T, to mamy przy tym t i $ 0 (i ' 1, 2, 3) oraz t 1 % t 2 % t 3 ' 1. Trójkątny płat powierzchni Béziera określa się następującymi zależnościami: (6.43) gdzie (x ijk, y ijk, z ijk ) oznaczają współrzędne danych punktów kontrolnych P ijk, sumowanie rozciąga się na wszystkie nieujemne wartości i, j oraz k, dla których i%j%k ' n, a zapis oznacza wielomian Bernsteina trzech zmiennych zdefiniowany wzorem (6.44) Płat powierzchni określonej zależnościami (6.43) jest zdefiniowany przez (n%1)(n%2)/2 punktów kontrolnych P ijk, których uporządkowanie odpowiada trójkątom charakterystycznym dla n-tych potęg trójmianów (zob. rys. 67). Płat ten leży wewnątrz powłoki wypukłej punktów kontrolnych P ijk.
128 VI. Figury geometryczne i modele Rys. 67. Numerowanie wierzchołków trójkątnego płata powierzchni Béziera (n ' 3) Dla wielomianów (6.44) zachodzi następująca zależność rekurencyjna: Zależność tę wykorzystuje się w algorytmie de Casteljau wyznaczania punktów trójkątnego płata powierzchni Béziera, który składa się z trzech etapów:! obliczenia dla danych wartości s i t współrzędnych barycentrycznych (t 1, t 2, t 3 ) przez rozwiązanie układu trzech równań liniowych gdzie oznaczają współrzędne krzywoliniowe wierzchołka T i (i ' 1, 2, 3),! wykonania podstawienia dla wszystkich wartości i, j, k $ 0, takich że i%j%k ' n,! obliczenia wartości kolejno dla l ' 1, 2,..., n i wszystkich wartości i, j, k $ 0, takich że i%j%k ' n&l. Punkt P leżący na powierzchni (6.42) jest równy P n,0,0,0.
6.4. Konstruowanie powierzchni 129 Aproksymacja powierzchniami B-sklejanymi Parametryczne przedstawienie płata powierzchni B-sklejanej jest następujące: (6.45) gdzie 0 # s # n&"%1 oraz 0 # t # m&$%1, a węzły definiujące funkcje B-sklejane B ",i (s) (stopnia ") i B $,j (t) (stopnia $) określa się podobnie, jak w przypadku aproksymacji krzywych (zob. p. 6.4.3), tj. przyjmujemy w celu zdefiniowania funkcji B ",i (s) oraz w celu zdefiniowania funkcji B $,j (t). Powyższy wybór węzłów zapewnia przechodzenie narożnych punktów płata powierzchni B-sklejanej przez punkty kontrolne P 00, P n0, P 0m i P nm. Mamy bowiem Większość pozostałych własności krzywej B-sklejanej (zob. p. 6.3.3) przenosi się także na powierzchnię, a w szczególności:! płat powierzchni B-sklejanej leży w całości w powłoce wypukłej swoich punktów kontrolnych,! wpływ punktu P ij na kształt powierzchni B-sklejanej jest lokalny jest on ograniczony do fragmentu wyznaczonego przez prostokąt [F i, F i%" %1 ] [J j, J j%$%1 ],! w punktach narożnych wartości pochodnych cząstkowych S(s, t) względem s i t (wektory styczne) mają kierunki wektorów wyznaczonych przez odpowiedni narożny punkt kontrolny i sąsiedni punkt brzegowy. Można także udowodnić, że brzegi płata powierzchni B-sklejanej są krzywymi B-sklejanymi, określonymi przez odpowiednie brzegowe punkty kontrolne. Własność ta jest ogólniejsza: linie t ' t 0 są krzywymi B-sklejanymi określonymi przez punkty
130 VI. Figury geometryczne i modele (6.46) a linie s ' s 0 krzywymi B-sklejanymi określonymi przez punkty (6.47) Ostatnia własność jest podstawą wyznaczania punktów płata powierzchni (6.45) poprzez wielokrotne zastosowanie algorytmu de Boora-Coxa (zob. p. 6.3.3). Jeśli n # m, to najpierw na podstawie wzoru (6.46) wyznacza się n%1 punktów P i, leżących na linii współrzędnej krzywoliniowej s, a następnie współrzędne punktu P, leżącego na powierzchni S, wyznacza się z wzoru Gdy m < n, postępujemy odwrotnie: najpierw korzystając z wzoru (6.47) obliczamy m%1 punktów P j, leżących na linii współrzędnej t, a następnie znajdujemy punkt P z zależności 6.4.2. Interpolacje powierzchni Powierzchnie, podobnie jak krzywe, mogą być nie tylko aproksymowane, ale również interpolowane. Poniżej przedstawiamy dwa sposoby interpolacji powierzchni:! za pomocą funkcji kawałkami wielomianowej stopnia trzeciego,! poprzez powierzchnie Coonsa. Interpolacja funkcją kawałkami wielomianową stopnia trzeciego Załóżmy, że w układzie współrzędnych krzywoliniowych Ost jest dana prostokątna siatka o węzłach (s i, t j ), przy czym i ' 0, 1,..., n oraz j ' 0, 1,..., m. Niech w węzłach tych będą określone punkty P ij o współrzędnych (x ij, y ij, z ij ), gdzie x ij ' x(s i, t j ), y ij ' y(s i, t j ) i z ij ' z(s i, t j ). Powierzchnia S interpolująca punkty P ij powinna spełniać warunki (6.45) Powierzchnię S konstruujemy z nm płatów powierzchni Béziera stopnia trzeciego określonych w prostokątach [s l, s l%1 ] [t k, t k%1 ] (l ' 0, 1,..., n&1; k ' 0, 1,..., m&1). Zgodnie z wzorami (6.42) płat S lk jest określony następującymi zależnościami: (6.46)
6.4. Konstruowanie powierzchni 131 przy czym spośród 16 niezbędnych punktów o współrzędnych znane są tylko cztery punkty narożne: P lk, P l, k%1, P l%1, k i P l%1, k%1. Pozostałych 12 punktów określa się tak, aby powierzchnia S powstała przez połączenie wszystkich płatów była funkcją ciągłą i aby pochodne cząstkowe tej funkcji, tj. i, też były ciągłe. Przy takich założeniach brakujących punktów nie można wyznaczyć w sposób jednoznaczny. Poniżej przedstawiamy jeden ze sposobów ich określenia, zaproponowany przez Bessela i od jego nazwiska zwany metodą Bessela. Dla punktu P lk określamy kierunek stycznej v k tak, by pokrywał się ze styczną do paraboli wyznaczonej przez punkty P l, k&1, P lk i P l, k% 1. Dla k ' 1, 2,..., m&1 kierunek ten jest liniową kombinacją kierunków cięciw poprowadzonych przez punkty odpowiednio P l, k&1 i P lk oraz P lk i P l, k%1 (zob. rys. 68). Możemy zatem napisać: gdzie Dla pozostałych dwu wartości k, tj. k ' 0 oraz k ' m, mamy Rys. 68. Określanie kierunków stycznych w metodzie Bessela Po wyznaczeniu na podstawie tych wzorów wartości v k dla k ' 0, 1,..., m, środkowe punkty kontrolne P l, k&2/3 oraz P l, k&1/3 określamy z następujących zależności:
132 VI. Figury geometryczne i modele Powyższy algorytm należy wykonać dla l ' 0, 1,..., n. Otrzymamy w ten sposób dodatkowe punkty Béziera leżące na liniach s ' s l. Następnie powtarzamy cały algorytm dla wszystkich 3m%1 kolumn punktów, otrzymując w ten sposób dodatkowe punkty kontrolne leżące na liniach t ' t 0 oraz W praktyce często przyjmuje się, że odległości pomiędzy węzłami siatki są stałe, tzn. Powierzchnie Coonsa W metodzie Coonsa interpolowania powierzchni zakłada się, że dane są cztery odpowiednio przecinające się krzywe, które definiują brzeg płata powierzchni (zob. rys. 69). Dla parametrów s 0 [0, 1] oraz t 0 [0, 1] krzywe te można zapisać w postaci S(s, 0), S(s, 1), S(0, t) i S(1, t). Rys. 69. Krzywe brzegowe płata powierzchni Płat powierzchni Coonsa konstruuje się poprzez interpolację liniową przeciwległych brzegów. Jeżeli połączymy odcinkami przeciwległe brzegi, to otrzymamy powierzchnię łączącą punkty krzywych S(0, t) i S(1, t) oraz powierzchnię
6.5. Przekształcenia krzywych i powierzchni 133 która łączy punkty krzywych S(s, 0) i S(s, 1). Suma tych powierzchni nie spełnia jednak warunków brzegowych (na przykład (S 1 %S 2 )(0, t) S(0, t)). Jeśli jednak powierzchnię S utworzymy następująco: gdzie (6.62) to warunki brzegowe będą spełnione. Powyższą metodę określania powierzchni S można uogólnić przez zastąpienie wielomianów interpolacji liniowej 1& s, s, 1& t oraz t funkcjami u 1 ' u 1 (s), u 2 ' u 2 (s), v 1 ' v 1 (t) i v 2 ' v 2 (t), które spełniają warunki Dalsze uogólnienie polega na zastąpieniu dwóch danych par krzywych o wspólnych punktach narożnych dwiema rodzinami krzywych: S(s i, t) dla i ' 0, 1,..., n oraz S(s, t j ) dla j ' 0, 1,..., m, które przecinają się wzajemnie w (n%1)(m%1) punktach S(s i, t j ). Powierzchnie otrzymywane w tym przypadku nazywa się powierzchniami Gordona (powierzchnie Coonsa są ich szczególnym przypadkiem). 6.5. Przekształcenia krzywych i powierzchni Wszystkie modele krzywych i powierzchni można przedstawić w ogólnej postaci następująco: gdzie (x i, y i, z i ) oznaczają współrzędne odpowiednich punktów kontrolnych, a przez oznaczono symbolicznie funkcje zależne od przyjętego sposobu aproksymacji lub interpolacji (w przypadku dwuwymiarowym nie występuje współrzędna z). Jeśli przez M oznaczymy macierz dowolnego przekształcenia w przestrzeni, tj. (zob. p. 3.6.3) przy czym
134 VI. Figury geometryczne i modele to stosując to przekształcenie do funkcji x, y i z otrzymamy (we współrzędnych jednorodnych) gdyż (własność tę mają m. in. wielomiany Bernsteina i funkcje B-sklejane). Oznacza to, że w celu przekształcenia krzywej lub powierzchni wystarczy przekształcić punkty kontrolne o współrzędnych (x i, y i, z i ), po czym wykonać odpowiednią interpolację lub aproksymację na punktach uzyskanych po przekształceniu.