II. REPREZENTACJA PRZEDMIOTU DWUWYMIAROWEGO W POLU WIDOCZNOŚCI 2.1. Okno i pole widoczności Przed wyświetleniem obrazu rzeczywistego obiektu na ekranie monitora należy przekształcić współrzędne punktów i linie definiujące dany obiekt (najczęściej są one określone w pewnym układzie kartezjańskim) do układu współrzędnych ekranu. Aby to było możliwe, obszar rzeczywisty, zawierający dany obiekt (lub jego część), ograniczamy do pewnego okna (w dwuwymiarowym układzie kartezjańskim okno ma zwykle kształt prostokąta), na granicy którego dokonujemy obcięcia rozważanego obszaru. Następnie okno przenosimy na ekran, otrzymując jego obraz, zwany polem widoczności lub krótko widokiem (ang. viewport), po czym w polu tym wyświetlamy obraz obiektu lub jego części (zob. rys. 18). Uwaga: Przekształcenie okna w pole widoczności wymaga uwzględnienia zorientowania współrzędnych ekranu. Ponieważ zwykle układ współrzędnych ekranu jest układem prawoskrętnym (o osi y skierowanej w dół), podczas gdy rzeczywisty układ kartezjański, w którym jest zdefiniowany obiekt, jest najczęściej układem lewoskrętnym, w dalszym ciągu będziemy zawsze zakładać, że wszystkie przekształcenia okien w pola widoczności są przekształceniami z układu lewoskrętnego do układu prawoskrętnego. Rys. 18. Okno i pole widoczności Jeśli w rzeczywistym układzie kartezjańskim okno ograniczymy prostymi (2.1)
26 II. Reprezentacja przedmiotu dwuwymiarowego w polu widoczności przy czym X min X max i Y min Y max, to odwzorowanie (2.2) gdzie (2.3) (GetMaxX i GetMaxY oznaczają maksymalne współrzędne odpowiednio x i y okna ekranu) przekształciłoby okno rzeczywiste na całą powierzchnię okna ekranu, gdyby układ współrzędnych ekranu był normalnym układem kartezjańskim (zauważmy, że przekształcenie (2.2) (2.3) nie zmienia orientacji obrazu obiektu w stosunku do orientacji rzeczywistego obiektu w oknie, choć orientacje układów współrzędnych okna i pola widoczności są różne zob. rys. 18). Układ współrzędnych ekranu jest jednak układem dyskretnym o wartościach całkowitych i dlatego w ogólności konieczne są zaokrąglenia wartości otrzymanych z wzorów (2.2) do liczb całkowitych. Jeśli funkcję wykonującą takie zaokrąglenie nazwiemy Round, to należy wykonać przekształcenia (2.4) Uwaga: W dalszym ciągu będziemy zakładać, że wzory na współrzędne ekranowe uwzględniają zastosowanie funkcji Round, tj. przekształcenie (2.4), choć nie będzie to zaznaczane w sposób jawny. Uwzględniając powyższą uwagę, odwzorowanie okna na ekran, będący polem widoczności, zapiszemy krótko w postaci (2.5) gdzie wielkości s x i s y są określone wzorami (2.3). Na ogół przekształcenie (2.5) deformuje obraz, gdyż proporcje okna i pola widoczności ekranu są różne, tj. s x s y. Deformacja ta powoduje na przykład, że okręgi występujące w oknie są wyświetlane na ekranie jako elipsy, a kwadraty jako prostokąty. W celu zachowania proporcji obrazu można pole widoczności wpisać centralnie w okno ekranu. Odpowiednie przekształcenie ma następującą postać: (2.6) Różnice w obrazie trójkąta równobocznego po odwzorowaniu za pomocą wzorów (2.5) i (2.6) przedstawiają rys. 19 i rys. 20.
2.1. Okno i pole widoczności 27 Rys. 19. Zdeformowany obraz trójkąta równobocznego po odwzorowaniu w pole widoczności Rys. 20. Obraz trójkąta równobocznego w polu widoczności z zachowaniem proporcji Dotychczas podane przekształcenia okna w pole widoczności nie umożliwiały określenia tego pola w dowolnym miejscu okna ekranu. Jeśli przyjmiemy, że pole widoczności jest prostokątem ograniczonym we współrzędnych ekranu prostymi przy czym spełnione są warunki (m.in. w celu umiejscowieniu całego pola na ekranie): to przekształcenie okna w pole widoczności bez zachowania proporcji obrazu ma postać gdzie (2.7) (2.8) (2.9) (2.10) Przy tych samych założeniach, dla transformacji zachowującej proporcje, otrzymujemy następujące wzory: (2.11)
28 II. Reprezentacja przedmiotu dwuwymiarowego w polu widoczności gdzie wielkości i są określone jak poprzednio. Zauważmy, że wzory (2.5) i (2.6) są szczególnymi przypadkami wzorów odpowiednio (2.9) i (2.11) (dla x min ' 0, x max ' GetMaxX, y min ' 0 i y max ' GetMaxY). Różnice w zastosowaniu wzorów (2.9) (2.10) i (2.11) w odniesieniu do obrazu trójkąta równobocznego przedstawiają odpowiednio rys. 21 i rys. 22. Rys. 21. Zdeformowany obraz trójkąta po odwzorowaniu w zadane pole widoczności Rys. 22. Obraz trójkąta w zadanym polu widoczności z zachowaniem proporcji 2.2. Obcinanie obrazu Przekształcenie rzeczywistego obiektu zawartego w oknie do pola widoczności na ekranie powoduje obcięcie wszystkich elementów obrazu leżących poza tym polem. Dla obrazu wyświetlanego w polu widoczności nie jest przy tym istotne, czy obcięcie następuje w przestrzeni danych rzeczywistych, a więc na granicy okna, czy też w przestrzeni obrazu (na ekranie). Dlatego w dalszym ciągu, jeśli nie będzie to prowadzić do nieporozumień, będziemy terminem okno nazywać zarówno okno rzeczywiste, jak i pole widoczności (okno na ekranie). Należy jednak pamiętać, że algorytmy obcinania zależą od kształtu okna. 2.2.1. Prostokątne okno obcięcia Załóżmy, że okno obcięcia (na ekranie) ma kształt prostokąta, którego boki są równoległe do osi współrzędnych. Punkt P o współrzędnych (x, y) będzie widoczny (wyświetlony) w tym oknie, jeśli będą spełnione następujące nierówności: (2.12) Ponieważ każdy obraz wyświetlany na ekranie może być uważany za zbiór punktów, więc obcięcie obrazu do określonego okna może być przeprowadzone na podstawie powyższych nierówności (bez względu na strukturę obrazu). Dla niektórych obiektów, takich jak odcinki i wielokąty, istnieją jednak o wiele bardziej efektywne algorytmy obcinania obrazu do prostokątnego okna.
2.2. Obcinanie obrazu 29 Efektywnym algorytmem obcinania odcinka do okna w kształcie prostokąta jest algorytm Cohena-Sutherlanda. W algorytmie tym każdemu końcowi P odcinka przypisuje się kod czterobitowy, który określa jego położenie względem okna (zob. rys. 23): gdzie Rys. 23. Podział płaszczyzny i wartości kodów końców odcinków w algorytmie Cohena-Sutherlanda Odcinek P 1 P 2 leży wewnątrz okna (jest widoczny w całości), gdy Jeśli wynik operacji koniunkcji (and) na kodach końców odcinka jest różny od 0000, tj.
30 II. Reprezentacja przedmiotu dwuwymiarowego w polu widoczności to cały odcinek leży na zewnątrz okna. Wreszcie, gdy to część odcinka P 1 P 2 może (ale nie musi) być zawarta w oknie. W tym przypadku należy koniec odcinka o kodzie różnym od 0000 zastąpić punktem przecięcia rozważanego odcinka z prostą zawierającą jeden z boków okna. Prowadzi to do odrzucenia jednej z dwu części odcinka (tej, dla której wynik operacji koniunkcji na kodach końców pododcinków jest różny od 0000). Następnie pozostała część odcinka jest obcinana w taki sam sposób prostymi zawierającymi inne boki. Postępowanie to kontynuuje się do czasu, gdy zostanie wyznaczony fragment odcinka, leżący wewnątrz okna lub gdy cały odcinek może być pominięty. Wybór kolejności boków okna jest przy tym całkowicie obojętny. Wszystkie możliwe położenia odcinków względem prostokątnego okna są przedstawione na rys. 24. Rys. 24. Położenia odcinka względem okna Obcinanie odcinka każdym z boków okna wymaga na ogół wykonania wielu dzieleń i mnożeń zmiennopozycyjnych, a więc działań, które, w porównaniu z innymi operacjami, są kosztowne. Po drobnej modyfikacji algorytmu Cohena-Sutherlanda działania te można zastąpić działaniami na liczbach całkowitych (dodawaniem i dzieleniem przez liczbę 2). Modyfikacja polega na zastąpieniu obcinania odcinka P 1 P 2 kolejnymi bokami, przez wyznaczenie jego punktu środkowego P s =(x s, y s ), zgodnie z wzorami gdzie (x 1, y 1 ) i (x 2, y 2 ) oznaczają współrzędne końców odcinka P 1 P 2. Następnie obliczamy kody punktów P 1, P 2 i P s, po czym sprawdzamy, czy całe odcinki P 1 P s i P s P 2 leżą wewnątrz lub na zewnątrz okna. Odcinek (lub odcinki), które nie spełniają żadnego z tych warunków, dzielimy
2.2. Obcinanie obrazu 31 dalej na połowy i postępowanie kontynuujemy. Liczba podziałów każdego z odcinków P 1 P s i P 2 P s jest oczywiście ograniczona rozdzielczością ekranu (odcinki nie mogą być krótsze niż rozmiar piksela). Schemat blokowy algorytmu Cohena-Sutherlanda z podaną wyżej modyfikacją jest przedstawiony na rys. 25. Rys. 25. Schemat blokowy algorytmu Cohena-Sutherlanda z połowieniem odcinków
32 II. Reprezentacja przedmiotu dwuwymiarowego w polu widoczności Rys. 26. Schemat blokowy algorytmu Lianga-Barsky'ego Innym efektywnym algorytmem obcinania odcinka do okna na ekranie jest algorytm Lianga- Barsky'ego, w którym korzysta się z parametrycznego przedstawienia odcinka
2.2. Obcinanie obrazu 33 gdzie t 0 [0, 1]. Algorytm polega na wyznaczeniu wartości t, odpowiadających punktom przecięcia odcinka z bokami okna (o ile takie punkty istnieją). Schemat blokowy algorytmu Lianga- Barsky'ego jest przedstawiony na rys. 26. 2.2.2. Okno obcięcia w kształcie wielokąta wypukłego Okno obcięcia na ekranie może mieć nie tylko kształt prostokąta o bokach równoległych do osi współrzędnych, ale w zasadzie kształt zupełnie dowolny. Oczywiście dla dowolnego kształtu tego okna nie sposób podać ogólnego algorytmu obcinania chociażby odcinków. Okno o dowolnym kształcie może być jednak przybliżone z zadowalającą dokładnością wielokątem. W niniejszym podpunkcie ograniczymy nasze rozważania do okna obcięcia w kształcie wielokąta wypukłego, tj. do takiego wielokąta, w którym odcinek łączący dowolne dwa jego punkty wewnętrzne jest całkowicie zawarty we wnętrzu rozważanego wielokąta. Szczególnymi przypadkami wielokątów wypukłych są: trójkąt, kwadrat, prostokąt, sześciokąt foremny itp. Ograniczenie naszych rozważań tylko do wielokątów wypukłych nie jest ograniczeniem zbyt rygorystycznym. Dowolny wielokąt może być bowiem przedstawiony w postaci sumy pewnej liczby wielokątów wypukłych, a do każdego z nich oddzielnie można zastosować podany dalej algorytm obcinania (ewentualnie z modyfikacją usuwającą zbędne odcinki na wspólnych krawędziach wielokątów przyległych). Jeśli wielokątów wypukłych nie można utworzyć inaczej, to zawsze można wykonać triangulację, tj. podzielić dany wielokąt na trójkąty, choć zadanie to nie zawsze bywa łatwe. Sformułujmy teraz dokładniej nasz problem. Dane jest okno obcięcia w kształcie wielokąta wypukłego o wierzchołkach Q j (j = 1, 2,..., m, przy czym m $ 3), które są uporządkowane odwrotnie do ruchu wskazówek zegara oraz wielokąt (niekoniecznie wypukły) o wierzchołkach P i (i = 1, 2,..., n, przy czym n $ 3) uporządkowanych w taki sam sposób. Należy wyznaczyć wielokąt powstały przez obcięcie wielokąta P 1 P 2...P n wielokątem Q 1 Q 2...Q m. Zauważmy, że przypadkami szczególnymi tak sformułowanego problemu są m. in. obcięcia wielokąta do okna w kształcie prostokąta, o bokach równoległych i nierównoległych do osi układu współrzędnych ekranu (w obu przypadkach n $ 3 i m = 4). Do rozwiązania podanego problemu zastosujemy algorytm Sutherlanda-Hodgmana. W algorytmie tym wierzchołki P i porównuje się kolejno z pierwszą z krawędzi okna. Wierzchołki, które leżą po wewnętrznej krawędzi okna, przyjmuje się za elementy nowego ciągu wierzchołków, a znajdujące się na zewnątrz odrzuca się lub zastępuje punktami przecięcia krawędzi wielokąta z krawędzią okna. Otrzymany w ten sposób nowy ciąg wierzchołków jest następnie porównywany z drugą krawędzią okna itd. W układzie współrzędnych ekranu, tj. w układzie prawoskrętnym (o osi y skierowanej w dół), punkt P i = (x i, y i ) (i = 1, 2,..., n) leży po wewnętrznej stronie krawędzi Q j Q j+1 (j = 1, 2,..., m, przy czym Q j = ( x6 j, y6 j ) oraz Q m+1 = Q 1 ), jeśli (2.13)
34 II. Reprezentacja przedmiotu dwuwymiarowego w polu widoczności Dla krawędzi Q j Q j+1 wypukłego wielokąta obcięcia i krawędzi P i!1 P i (i = 1, 2,..., n, przy czym P 0 = P n ) obcinanego wielokąta w algorytmie Sutherlanda-Hodgmana rozważa się cztery przypadki (zob. rys. 27):! jeżeli oba punkty P i!1 i P i leżą po wewnętrznej stronie krawędzi Q j Q j+1, to wierzchołek P i umieszcza się w liście wierzchołków wyjściowych obcinanego wielokąta,! jeśli oba punkty P i!1 i P i leżą po zewnętrznej stronie krawędzi Q j Q j+1, do listy wierzchołków wyjściowych nie dodaje się żadnego punktu,! jeżeli punkt P i!1 leży po wewnętrznej, a punkt P i po zewnętrznej stronie krawędzi Q j Q j+1, do listy wierzchołków wyjściowych dodaje się punkt przecięcia odcinka P i!1 P i z prostą zawierającą krawędź Q j Q j+1,! gdy punkt P i!1 leży po zewnętrznej, a punkt P i po wewnętrznej stronie krawędzi Q j Q j+1, to w liście wierzchołków wyjściowych obcinanego wielokąta umieszcza się punkt przecięcia odcinka P i!1 P i z prostą zawierającą krawędź Q j Q j+1 oraz punkt P i. Podane przypadki rozważa się dla każdej krawędzi obcinanego wielokąta, tj. dla i = 1, 2,..., n i dla każdej krawędzi wielokąta obcięcia, tj. j = 1, 2,..., m, za każdym razem z aktualną listą wierzchołków wyjściowych. Rys. 27. Możliwe położenia krawędzi obcinanego wielokąta względem krawędzi wielokąta obcięcia Uwaga: W wyniku obcięcia wielokąta niewypukłego podaną wersją algorytmu Sutherlanda- Hodgmana można otrzymać wielokąty rozłączne połączone krawędziami okna. 2.3. Zasłanianie obrazu Zasłanianie obrazu jest procesem odwrotnym do obcinania obraz znajdujący się w określonym oknie zasłonięcia ma przestać być widoczny na ekranie. Do zasłonięcia fragmentów odcinków można także posłużyć się odpowiednio zmodyfikowanymi algorytmami Cohena-Sutherlanda i Lianga-Barsky'ego, a przy zasłanianiu wielokątów zmodyfikowanym algorytmem Sutherlanda-Hodgmana.
2.4. Pokrywanie obrazu 35 W wielu językach programowania, w których można realizować grafikę komputerową, istnieją standardowe procedury lub funkcje rysujące różne figury geometryczne i wypełniające ich wnętrza określonym kolorem. Takie procedury lub funkcje mogą być również wykorzystane do zasłaniania fragmentów obrazów (wystarczy w nich określić kolor brzegu figury i wypełnienia jej wnętrza taki, jak kolor tła okna ekranu). 2.4. Pokrywanie obrazu Kolejne instrukcje programu graficznego mogą spowodować nałożenie rysunku na rysunek już istniejący na ekranie, tj. pokrycie starego rysunku nowym. W wielu przypadkach jest to wykorzystywane celowo. Niekiedy jednak wyróżnienie tych elementów nowego rysunku lub obrazu, które są nakładane na elementy już znajdujące się na ekranie, może okazać się istotne. W wielu językach programowania pomiędzy odpowiadającymi sobie bitami obrazu znajdującego się na ekranie i bitami rysunku lub obrazu aktualnie wprowadzanego na ekran (także za pomocą niektórych procedur lub funkcji standardowych) mogą być wykonane działania logiczne np. XOR (nierównoważność, różnica symetryczna), OR (alternatywa) i AND (koniunkcja). Dla obrazu wprowadzanego na ekran można także określić operację MOV (całkowite pokrycie obrazu istniejącego nowym obrazem) oraz operację NOT (negację), powodującą pokrycie obrazu istniejącego obrazem, na którego bitach wykonano operację logiczną NOT. Szczegóły zależą od narzędzi dostępnych w danych językach programowania.
III. PRZEKSZTAŁCENIA W PRZESTRZENI TRÓJWYMIAROWEJ 3.1. Wprowadzenie Na ekranie monitora obraz jest zawsze przedstawiony w dwóch wymiarach. Obiekty spostrzegane w rzeczywistości są natomiast trójwymiarowe oprócz wysokości i szerokości mają swoją głębię. Głębię obiektu na ekranie uzyskuje się zwykle przez usunięcie niewidocznych powierzchni i linii, uwzględnienie perspektywy, cieniowanie i rozjaśnianie (zob. p. 4.2 oraz rozdziały 8 i 9). Różne metody symulacji trójwymiarowości na płaskim ekranie monitora wymagają uwzględnienia w obrazie każdego rzeczywistego punktu przestrzeni jego trzeciej współrzędnej, odpowiadającej głębokości. Reprezentację obiektów trójwymiarowych na ekranie (w polu widoczności) opisujemy w rozdziale 5. W tym rozdziale zajmiemy się natomiast ogólnymi przekształceniami w przestrzeni trójwymiarowej: zamianami układów współrzędnych i transformacjami geometrycznymi. W świecie rzeczywistym obiekty trójwymiarowe przedstawiamy najczęściej w prawoskrętnym, kartezjańskim układzie współrzędnych prostokątnych (zob. rys. 28 a), w którym płaszczyzną równoległą do obserwatora jest płaszczyzna yz (x ' 0). Płaszczyzna ta odpowiada powszechnie przyjmowanemu w dwu wymiarach układowi xy, który w rozdziale 1 celowo o czym dalej nazwaliśmy układem lewoskrętnym na płaszczyźnie. O tym, czy kartezjański układ współrzędnych w przestrzeni jest układem prawo- czy lewoskrętnym, decyduje reguła prawej dłoni: Kartezjański układ współrzędnych nazywamy układem prawoskrętnym, jeżeli po skierowaniu palców prawej dłoni w dodatnim kierunku osi x, po ich zgięciu (zamknięciu dłoni) wskażą one dodatni kierunek osi y, a kciuk wskaże dodatni kierunek osi z. W przypadku przeciwnym układ współrzędnych nazywamy układem lewoskrętnym. Rys. 28. Układy prawoskrętne (a, b) i układ lewoskrętny (c) współrzędnych prostokątnych
3.2. Zmiana układu współrzędnych prostokątnych 37 Jeśli dla układu współrzędnych ekranu przyjmiemy, że oś z jest skierowana w głąb ekranu, w taki sposób, że powstały układ xyz jest układem prostokątnym, to układ ten będzie też układem prawoskrętnym (zob. rys. 28 b), choć z punktu widzenia obserwatora jego osie są skierowane inaczej niż osie układu powszechnie przyjmowanego w świecie rzeczywistym. Jednak dzięki temu, że oba układy są układami prawoskrętnymi nie będziemy musieli niektórych wzorów podawać oddzielnie dla układu lewo- i prawoskrętnego. W tym miejscu Czytelnikowi należy się wyjaśnienie, dlaczego dla układów współrzędnych na płaszczyźnie wprowadziliśmy w rozdziale 1 także określenia układ prawo- i lewoskrętny i dlaczego odpowiednie układy zostały nazwane tak, a nie inaczej, skoro pojęcia te są związane z układami współrzędnych w przestrzeni. Otóż po pierwsze, rozróżnienie układów na płaszczyźnie było konieczne z uwagi na obroty i kierunek mierzenia kątów (biorąc to pod uwagę nazwy odpowiednich układów mogły być jeszcze dobrane dowolnie). Po drugie, gdyby do powszechnie przyjmowanego kartezjańskiego układu współrzędnych na płaszczyźnie (o osi x skierowanej w prawo i osi y skierowanej w górę) dodać oś z, tak, jak założyliśmy w tym punkcie, tj. w głąb ekranu, to otrzymalibyśmy przestrzenny układ lewoskrętny (zob. rys. 28 c). I właśnie to było głównym powodem przyjęcia takich, a nie innych nazw płaskich układów współrzędnych. 3.2. Zmiana układu współrzędnych prostokątnych Rozważmy prawoskrętny układ współrzędnych prostokątnych o początku w punkcie O oraz osiach x, y i z, który będziemy oznaczać Oxyz. Ponieważ dowolny obiekt może być w tym układzie rozpatrywany jako zbiór punktów o współrzędnych (x, y, z), więc ograniczymy nasze rozważania do pojedynczego punktu P. Wskutek przekształcenia układu Oxy do układu współrzędne (x, y, z) punktu P zmienią się na. Związki pomiędzy współrzędnymi i (x, y, z) przy różnych przekształceniach układu Oxy są podane w kolejnych podpunktach. 3.2.1. Przesunięcie równoległe osi współrzędnych Niech v ' t x i % t y j % t z k oznacza dowolny wektor w przestrzeni ú 3, gdzie i, j i k oznaczają wektory jednostkowe w kierunkach osi odpowiednio x, y i z. W wyniku przesunięcia układu Oxyz o wektor v współrzędne (x, y, z) punktu P zmienią się na (zob. rys. 29), przy czym (3.1), równania (3.1) można zapisać w po- Oznaczając operację przesunięcia układu Oxyz przez staci We współrzędnych jednorodnych, w których punkty przestrzeni ú 3 uważamy za elementy przestrzeni ú 4 o czwartej współrzędnej równej 1, przekształcenie można zapisać jako macierz
38 III. Przekształcenia w przestrzeni trójwymiarowej Rys. 29. Przesunięcie układu współrzędnych w przestrzeni (3.2) a wzory (3.1) w postaci wektorowej (3.3) 3.2.2. Obroty układu współrzędnych Wzory określające obrót układu współrzędnych w przestrzeni są trochę bardziej skomplikowane niż zależności dla obrotu układu płaskiego. Obrót układu w przestrzeni wymaga określenia kąta obrotu i osi obrotu. Jeśli za oś obrotu wybierzemy jedną z osi układu współrzędnych, to obrót układu przestrzennego sprowadza się do obrotu pozostałych osi wokół początku układu. Ponieważ dowolny obrót układu współrzędnych w przestrzeni składa się z tego typu obrotów elementarnych, rozpatrzymy najpierw te ostatnie. Niech osią obrotu będzie oś z. Obrót układu Oxyz sprowadza się wówczas do obrotu układu płaskiego Oxy wokół jego początku, tj. punktu (0, 0) (oś nowego układu pokrywa się z osią z układu Oxyz). Z określeniem kąta obrotu, a ściślej z kierunkiem jego mierzenia, poja-
3.2. Zmiana układu współrzędnych prostokątnych 39 wia się pewien problem. Otóż, w klasycznej geometrii analitycznej dla układu prawoskrętnego, a więc układu przez nas rozpatrywanego, kąt ten zwykle mierzy się od dodatniego kierunku osi x w stronę dodatniego kierunku osi y (zob. rys. 30 a). W przypadku układu prawostronnego związanego z ekranem (o osi z skierowanej w głąb ekranu) odpowiada to mierzeniu kątów w kierunku przeciwnym niż ma to miejsce w standardowych procedurach lub funkcjach graficznych w większości języków programowania (zob. rys. 30 b). W celu zachowania zgodności z tymi procedurami przyjmiemy następującą zasadę (zob. rys. 30 c): W prawoskrętnym układzie współrzędnych prostokątnych w każdej z płaszczyzn x ' 0, y ' 0 i z ' 0 przy skierowaniu osi odpowiednio x, y i z w stronę od obserwatora kąty mierzymy w stronę przeciwną do ruchu wskazówek zegara. Radzimy Czytelnikowi zapamiętać tę zasadę, gdyż wszystkie dalej podane zależności dotyczące kątów będą się na niej opierały. Rys. 30. Kierunki mierzenia k tów: klasyczny (a, b) i przyj ty dalej (c) Powróćmy teraz do rozpatrywanego obrotu układu współrzędnych. Jeśli w układzie Oxyz punkt P ma współrzędne (x, y, z), to w układzie, który powstał przez obrót układu Oxyz wokół osi z o kąt n i przy uwzględnieniu podanej zasady mierzenia kątów, współrzędne tego punktu wyrażą się wzorami (zob. rys. 31) co krótko można zapisać w postaci (3.4) Zauważmy zgodność wzorów (3.4) z zależnościami (1.10). We współrzędnych jednorodnych macierzą przekształcenia jest macierz postaci
40 III. Przekształcenia w przestrzeni trójwymiarowej Rys. 31. Obrót układu Oxyz wokół osi z (3.5) Należy zaznaczyć, że w celu zapisu wzorów na obroty w postaci wektorowej stosowanie współrzędnych jednorodnych nie jest konieczne macierze obrotów można zapisać jako macierze o wymiarze 3 3. Będziemy jednak stosować te współrzędne z uwagi na zgodność zapisów z innymi przekształceniami układu. Przy obrocie układu współrzędnych prostokątnych Oxyz o kąt R wokół osi y współrzędne każdego punktu zmienią się na a przy obrocie o kąt > wokół osi x na (3.6) Macierzami przekształceń (3.6) i (3.7) we współrzędnych jednorodnych są odpowiednio: (3.7) (3.8)
3.2. Zmiana układu współrzędnych prostokątnych 41 i (3.9) Rys. 32. Kąty Eulera Jak wspomnieliśmy, dowolny obrót układu współrzędnych prostokątnych w przestrzeni może być przedstawiony jako złożenie obrotów elementarnych. Określają go trzy kąty zwane kątami Eulera (zob. rys. 51). Są to:! kąt " obrotu układu Oxyz dookoła osi z po obrocie powstaje układ,! kąt $ obrotu układu dookoła osi po obrocie otrzymujemy układ,! kąt ( obrotu układu dookoła osi po obrocie powstaje układ, przy czym, zgodnie z wzorami (3.4) i (3.7), mamy (3.10) (3.11) (3.12) We współrzędnych jednorodnych przejście od układu Oxyz do (wzory (3.10) (3.12)) można zapisać w postaci
42 III. Przekształcenia w przestrzeni trójwymiarowej gdzie macierze, i są określone wzorami (3.5) i (3.9). Po ich wymnożeniu otrzymujemy Jeżeli osie układu mamy oznaczymy przez xn, yn i zn, to na podstawie powyższych wzorów Jeżeli znamy wszystkie kąty, jakie tworzą osie układów Oxyz i oznaczone następująco: x y z, przy czym kąty te są " 1 " 2 " 3 $ 1 $ 2 $ 3 ( 1 ( 2 ( 3 to między współrzędnymi tego samego punktu w obu układach zachodzą związki: (3.13) Wyznacznik tego przekształcenia przy czym jeśli ) ' & 1, to układ prawoskrętny przechodzi w układ lewoskrętny (wzory (3.13) określają wówczas złożenie obrotu i odbicia lustrzanego).
3.2. Zmiana układu współrzędnych prostokątnych 43 3.2.3. Skalowanie i odbicia względem początku układu Wzory, określające współrzędne punktu po przeskalowaniu prostokątnego układu współrzędnych w przestrzeni i po odbiciu jego osi względem początku układu, są prostymi uogólnieniami odpowiednich wzorów dla układu płaskiego (zob. p. 1.2.3 i 1.2.4). Jeśli jednostkom długości na osiach x, y i z układu Oxyz przypiszemy odpowiednio s x jednostek na osi, s y jednostek na osi i s z jednostek na osi układu, to otrzymamy (3.14) przy czym należy założyć, że s x 0, s y 0 i s z 0. We współrzędnych jednorodnych macierzą tego przekształcenia jest (3.15) Przy odbiciach osi układu względem jego początku współrzędne (x, y, z) punktu P zmieniają się następująco:! odbicie osi x:! odbicie osi y:! odbicie osi z: We współrzędnych jednorodnych macierzami przekształceń (3.16) (3.18) są: (3.16) (3.17) (3.18) (3.19)
44 III. Przekształcenia w przestrzeni trójwymiarowej 3.3. Zamiana współrzędnych prostokątnych na cylindryczne i na odwrót Współrzędnymi cylindrycznymi (walcowymi) punktu nazywamy trójkę liczb: D, T6 i z, gdzie D i T6 oznaczają współrzędne biegunowe (zob. p. 1.3) rzutu P 1 danego punktu P na płaszczyznę xy, a z oznacza długość odcinka P 1 P wziętą z odpowiednim znakiem. Układ współrzędnych cylindrycznych jest przedstawiony na rys. 33. Z uwagi na niezgodność klasycznego kierunku mierzenia kąta T6 z układem współrzędnych ekranu, wygodniej jest posługiwać się kątem T = 360 & T6 (zob. rys. 33 b). Rys. 33. Uk»ad wspó»rz dnych cylindrycznych przedstawiony klasycznie (a) i zorientowany zgodnie z uk»adem wspó»rz dnych ekranu (b) Ponieważ współrzędna z dowolnego punktu jest taka sama w układzie współrzędnych cylindrycznych i w układzie kartezjańskim, a do obliczenia pozostałych dwu współrzędnych D i T (nie mylić z T6 ) ze współrzędnych x i y lub na odwrót można posłużyć się wzorami podanymi w p. 1.3, pominiemy tutaj przytoczenie odpowiednich wzorów. 3.4. Zamiana współrzędnych prostokątnych na sferyczne i na odwrót Punkt w przestrzeni może być też określony za pomocą współrzędnych sferycznych (kulistych), które stanowi trójka liczb: r, 2 i n6 (zob. rys. 34 a). Wielkość r jest długością promienia wodzącego danego punktu P, kąt 2, zwany odległością biegunową, jest mierzony między dodatnią częścią osi z i promieniem wodzącym (0 # 2 # B), a kąt n6, zwany długością azymutalną, mierzy się między dodatnią częścią osi x i rzutem promienia wodzącego na płaszczyznę xy (&B < n6 # B). Przyjmowane zwykle kierunki mierzenia kątów są pokazane na rys. 34 a. W celu zachowania zgodności kierunku mierzenia kątów z układem współrzędnych ekranu, w układzie współrzędnych sferycznych zamiast kąta n6 przyjmiemy kąt n, określony następująco (zob. rys. 34 b):
3.4. Zamiana współrzędnych prostokątnych na sferyczne i na odwrót 45 Rys. 34. Klasyczny uk»ad wspó»rz dnych sferycznych (a) i przyj ty w tej ksi óce (b) (3.20) Związki pomiędzy współrzędnymi kartezjańskimi (x, y, z) i współrzędnymi sferycznymi (r, 2, n), gdzie kąt n jest zdefiniowany wzorem (3.20), są określone następującymi zależnościami: oraz (3.21) (3.22)
46 III. Przekształcenia w przestrzeni trójwymiarowej Z ostatniego wzoru i zależności (3.20) można obliczyć n6. Otrzymujemy (3.23)