Figury geometryczne, których obrazy są tworzone w grafice komputerowej, mogą leżeć w różnych przestrzeniach (np. nieeuklidesowych), ale ostateczna reprezentacja powstaje w afinicznej przestrzeni euklidesowej, a w każdym razie z tą przestrzenią są związane sposoby reprezentowania obrazów przez różne urządzenia. Warto więc przypomnieć, co to jest.
Aksjomatyczne określenie przestrzeni afinicznej jest następujące: jeśli
mamy pewien zbiór
dla każdego
dla dowolnych punktów
to zbiór
— różnica punktów jest wektorem, | |||
— suma punktu i wektora jest punktem. |
Przestrzeń afiniczna jest rzeczywista, jeśli jej przestrzeń
wektorów swobodnych jest przestrzenią liniową nad ciałem liczb
rzeczywistych
W przestrzeni wektorów swobodnych
liniowa ze względu na pierwszy (a ze względu na symetrię także drugi) argument,
i dodatnio określona,
Przestrzeń afiniczna, której przestrzeń wektorów swobodnych jest wyposażona w iloczyn skalarny, nazywa się przestrzenią euklidesową. W takiej przestrzeni możemy mierzyć odległości punktów, wzorem
a także kąty między prostymi, np. jeśli prosta
Mając pojęcia odległości i kąta, możemy określić miary, takie jak pole powierzchni i objętość. Po to, by to wszystko obliczać, potrzebny jest jakiś układ współrzędnych.
Istotne jest, że w dowolnej przestrzeni liniowej (oprócz zerowymiarowej)
istnieje wiele różnych iloczynów skalarnych. Każdy z nich określa kąty
i odległości inaczej. Możemy wybrać jeden z nich, wyróżniając pewien
układ współrzędnych kartezjańskich i postulując, że wersory osi właśnie
tego układu mają długość
Ustalmy dowolne punkty
(4.1) |
Liczby
Punkt
Ciąg liczb będących współrzędnymi (nie tylko kartezjańskimi) punktu wygodnie jest przedstawiać w postaci macierzy. Może to być macierz kolumnowa (tu będzie stosowana ta konwencja) lub wierszowa (spotykana często w literaturze i w różnych pakietach oprogramowania). Użycie macierzy umożliwia przedstawienie przekształceń za pomocą mnożenia macierzy; powyższe dwie konwencje różnią się wtedy kolejnością zapisu czynników.
Pewien układ współrzędnych w przestrzeni trójwymiarowej wyróżnimy i nazwiemy układem globalnym, albo układem świata. W tym układzie będziemy ustawiać rozmaite przedmioty, z których składa się scena do przedstawienia na obrazie, oraz ,,kamerę”, czyli obiekt określający odwzorowanie przestrzeni trójwymiarowej na płaszczyznę obrazu. Przyjmiemy, że iloczyn skalarny w tym układzie jest dany wzorem
przy czym utożsamiliśmy tu wektory (swobodne) z ich macierzami (kolumnowymi)
współrzędnych w układzie globalnym. W konsekwencji, układ odniesienia
globalnego układu współrzędnych składa się z wektorów o długości
Dowolny układ współrzędnych jest prawoskrętny albo lewoskrętny; przynależność do jednej z tych klas nazywa się orientacją. Nazwa jest kwestią umowy; przyjmiemy, że układ globalny jest prawoskrętny i prawoskrętny jest też układ wektorów wyznaczonych przez kciuk, palec wskazujący i palec środkowy prawej ręki (rys. 4.2). Orientacja jest związana z kolejnością współrzędnych; przestawienie dowolnych dwóch współrzędnych (czyli przestawienie dowolnych dwóch wektorów układu odniesienia) powoduje zmianę orientacji na tę drugą.
Równość (4.1) można zapisać w bardziej symetrycznej postaci,
w której
Fizyczna interpretacja współrzędnych barycentrycznych jest
następująca: niech
Przykład zastosowania: przypuśćmy, że dana jest funkcja ciągła
W grafice komputerowej powyższe zadanie rozwiązuje się podczas cieniowania trójkątów. Najprostsza (i powszechnie stosowana, a w szczególności implementowana w sprzęcie, tj. w procesorach graficznych) metoda polega na nadaniu każdemu pikselowi należącemu do trójkąta na obrazie wartości (koloru) otrzymanej przez interpolację wartości podanych w wierzchołkach (jest to tzw. cieniowanie Gourauda).
Załóżmy, że mamy obliczyć wartość funkcji
znaleźć wierzchołki
obliczyć współrzędne barycentryczne
którego współczynnikami są współrzędne kartezjańskie odpowiednich punktów,
obliczyć
Sposób obliczania współrzędnych barycentrycznych punktów
w przestrzeni trójwymiarowej jest taki sam; układ odniesienia składa się
z wierzchołków dowolnego czworościanu (tj. z dowolnych czterech punktów nie
leżących w jednej płaszczyźnie). Ze współrzędnych kartezjańskich tych punktów
i punktu
i rozwiązujemy.
Dowolnemu punktowi w
Jest oczywiste, że pomnożenie wszystkich współrzędnych
jednorodnych przez dowolną liczbę inną niż
Rozważmy przestrzeń współrzędnych jednorodnych
Jeśli
Jeśli chcemy wykonywać rachunki na punktach i wektorach reprezentowanych
przez wektory współrzędnych jednorodnych, dopuszczając różne wagi
(czyli różne wartości ostatniej współrzędnej jednorodnej), to musimy
,,uzgodnić” reprezentacje. Rozważmy przykład — wyznaczanie środka
odcinka, którego końce są reprezentowane przez macierze
Podobnie jak współrzędne kartezjańskie, możemy ,,ujednorodnić” także
współrzędne barycentryczne; wystarczy opuścić założenie, że ich suma
jest równa
Przekształcenie
To oznacza w szczególności, że obrazem dowolnej prostej jest prosta
(prosta to zbiór
Własności figur, zachowywane przez przekształcenia afiniczne, nazywają się niezmiennikami afinicznymi. Dalsze ich przykłady to
współliniowość i współpłaszczyznowość punktów,
równoległość prostych i płaszczyzn,
wypukłość figury,
proporcje odległości punktów współliniowych (ten i następne przykłady dotyczą przekształceń różnowartościowych),
bycie trójkątem,
bycie równoległobokiem,
bycie elipsą.
Jeśli mamy ustalony układ współrzędnych (kartezjański), to obliczenia punktów sprowadzamy do rachunków na wektorach współrzędnych. Ogólnie, przekształcenie afiniczne można zapisać w postaci
w której macierz
Przekształcenie jest różnowartościowe wtedy gdy macierz
Złożenie przekształceń afinicznych jest przekształceniem afinicznym. Odwrotność (jeśli istnieje) też.
Często trzeba wyznaczyć złożenie przekształceń afinicznych; możemy je opisać wzorem
który jest niewygodny (i jeszcze mniej wygodne wzory dostaniemy chcąc
opisać złożenie większej liczby przekształceń).
Jeśli do współrzędnych kartezjańskich
W ten sposób pojawiają się współrzędne jednorodne, dzięki którym przekształcenie afiniczne możemy przedstawić w wygodny sposób, za pomocą jednego mnożenia macierzy.
Macierze
Możemy też jednolicie traktować punkty i wektory swobodne. Istotnie,
wystarczy do współrzędnych wektora swobodnego dopisać
Rozważmy płaszczyznę w przestrzeni trójwymiarowej,
daną za pomocą punktu
Niech
skąd wynika, że tym wektorem jest
Przypuśćmy, że punkt
Zatem, wzór opisujący przekształcenie afiniczne (mnożenie wektora współrzędnych przez macierz) można też interpretować jako przejście do nowego układu współrzędnych. Często w grafice komputerowej modelujemy sceny złożone z wielu obiektów, z których każdy jest opisywany osobno w wygodnym dla opisania tego obiektu układzie. Składanie sceny z takich obiektów jest równoważne określeniu sposobu przejscia od ich układów współrzędnych do układu całej sceny, co polega na podaniu odpowiednich macierzy.
Często należy znaleźć macierz przekształcenia, które jest określone
przy użyciu innego układu odniesienia niż układ dany. Aby to zrobić,
należy dokonać odpowiedniego przejścia. Na przykład, niech macierz
obliczyć współrzędne punktu
dokonać obrotu,
obliczyć współrzędne obrazu w wyjściowym układzie;
odpowiednią macierzą jest macierz
Zatem poszukiwana macierz jest równa iloczynowi
Część liniowa przesunięcia jest opisana przez macierz jednostkową, a zatem przekształcenia te nie zmieniają kierunku żadnej prostej, ani długości żadnego odcinka.
Skalowanie to przekształcenie, którego część liniowa jest
w pewnym układzie reprezentowana przez macierz diagonalną. Podobnie jak
przesunięcie o wektor
Skalowanie oczywiście nie jest różnowartościowe, jeśli któryś
ze współczynników,
Niezmiennikami skalowań różnowartościowych są kierunki prostych równoległych do osi układu. Klasa skalowań wymieniona wyżej jest bardzo obszerna i dlatego w praktyce często przez skalowanie rozumie się przekształcenie, którego część liniowa jest diagonalna a przesunięcie zerowe w układzie współrzędnych określonym przez układ odniesienia o wzajemnie prostopadłych wersorach osi. Jeśli osie układu równań, w którym część liniowa skalowania jest diagonalna, są wzajemnie prostopadłe, to macierz skalowania w każdym układzie współrzędnych o wzajemnie prostopadłych osiach jest symetryczna (współczynniki skalowania osi są wartościami własnymi, a wektory własne wyznaczają wzajemnie prostopadłe kierunki skalowania).
Jeśli wszystkie współczynniki są równe
Powyższe rzuty i odbicia są określone za pomocą pojęcia
prostopadłości. Nie jest ono potrzebne do określania rzutów
równoległych. Takie przekształcenie jest określone za pomocą
wektora
wybrać dowolny punkt
przejść do układu współrzędnych o początku
dokonać rzutowania; macierz rzutu w tym układzie ma na diagonali
współczynniki
wrócić do układu wyjściowego — wcześniej były opisane wszystkie potrzebne szczegóły.
Obroty w płaszczyźnie
gdzie
Macierz części liniowej obrotu jest ortogonalna, o wyznaczniku równym
Obroty wokół osi
Obrót wokół osi o kierunku dowolnego wektora
Niech
Macierz obrotu jest sumą trzech macierzy opisujących przekształcenia liniowe, dzięki którym otrzymaliśmy powyższe składniki. Zatem,
Kolumny macierzy
Złożenie dwóch obrotów w przestrzeni trójwymiarowej jest obrotem;
mając dane wektory jednostkowe
w których występuje wektor |
||||
Wyprowadzenie powyższych wzorów jest łatwe przy użyciu kwaternionów, o których będzie mowa dalej.
Podczas modelowania sceny trójwymiarowej możemy napotkać następujący
problem: mamy dane trzy punkty niewspółliniowe,
Uściślijmy zadanie: płaszczyzna, w której mają znaleźć się dane
punkty jest określona przez podanie punktów
obraz wektora
obraz wektora
Macierz
Niech
Możemy zauważyć, że kolumna
Macierz
Podobnie możemy postąpić z macierzą
Przypuśćmy, że chcemy otrzymać macierz obrotu na płaszczyźnie, o
kąt
Zmieniamy układ współrzędnych tak, aby środek obrotu był początkiem układu. Odpowiednia macierz ma postać
Wykonujemy obrót o
Wracamy do wyjściowego układu, co opisuje macierz
Macierz całego przekształcenia jest iloczynem powyższych trzech:
Zbadamy teraz sposoby składania przekształceń w trzech typowych sytuacjach, z jakimi mamy do czynienia w grafice. Interesuje nas kolejność, w jakiej trzeba mnożyć macierze reprezentujące składane przekształcenia.
Przypuśćmy, że pewien obiekt,
Mamy też trzeci, ,,globalny” układ współrzędnych. Układ odniesienia
układu ,,pośredniego” jest obrazem układu odniesienia ,,globalnego”
układu współrzędnych w przekształceniu
Przypuśćmy, że obiekt O
). Dokładniej, procedura ta ,,wytwarza” pewne
punkty (np. wierzchołki trójkątów), obliczając ich współrzędne
w układzie ,,lokalnym”. Procedura O
,,nie wie” niczego
o innych układach współrzędnych. Inna procedura, P
,
wywołuje O
, poprzedzając to określeniem przekształcenia
układu, w którym O
podaje współrzędne punktów, do swojego
(,,pośredniego”) układu współrzędnych. Procedura P
jest
z kolei wywoływana przez pewną procedurę G
, która przed
wywołaniem P
określa przejście od jej układu współrzędnych
do układu ,,globalnego”. ,,Określenie” przejścia polega na
nadaniu odpowiedniej wartości pewnej macierzy (która może być
przechowywana w ustalonej tablicy w programie, lub w rejestrach urządzenia
graficznego). Jeśli początkowa macierz przejścia (od układu ,,globalnego”
do ,,globalnego”) jest jednostkowa, to procedura G
przed
wywołaniem P
pomnoży ją przez P
przed
wywołaniem O
pomnoży tę macierz przez
Typowe dla tej sytuacji jest użycie stosu macierzy przekształceń.
Jeśli procedura P
ustawia więcej niż jeden obiekt, przy czym
każdy z tych obiektów jest określony w układzie, z którego przejście
do układu ,,pośredniego” jest inne, to procedura P
powinna
zapamiętać (na stosie) bieżącą macierz przekształcenia
(od swojego ,,pośredniego” układu do ,,globalnego”). Następnie
powinna dla każdego obiektu pomnożyć kopię tej macierzy przez macierz
przejścia od ,,lokalnego” układu tego obiektu do układu pośredniego.
Po zakończeniu działania procedury wprowadzającej obiekt procedura
P
powinna odtworzyć macierz przejścia taką, jaka była
w chwili jej wywołania.
Zarówno w języku PostScript, jak i w bibliotece OpenGL jest to podstawowy sposób określania przekształceń złożonych. W obu tych przypadkach są dostępne odpowiednie stosy.
Druga sytuacja jest typowa dla animacji: pewien obiekt
Jeśli macierz przekształcenia od położenia
Mamy sytuację podobną do poprzedniej: chcemy poddać pewien obiekt
serii przekształceń (po to, aby otrzymać jego kolejne położenia),
ale tym razem określimy każde kolejne przekształcenie w układzie
,,lokalnym”, związanym z aktualnym położeniem obiektu. Rozważmy dwa
takie przekształcenia. Niech
Macierz drugiego przekształcenia w układzie globalnym jest równa
Opisana sytuacja jest najczęściej związana z tzw. grafiką żółwia. Wytresowany żółw porusza się po płaszczyźnie lub w przestrzeni i wykonuje kolejne polecenia takie jak ,,idź jeden krok do przodu” lub ,,obróć się w lewo”. Przemieszczając się żółw zostawia ślad (np. rysuje odcinki). Ta technika wykonywania obrazów jest niezastąpiona np. podczas rysowania roślin.
Każde przekształcenie afiniczne jest złożeniem obrotów, skalowań i przesunięć. Interesującym problemem, którego rozwiązanie bywa potrzebne w praktyce, jest znalezienie tych przekształceń na podstawie danej macierzy reprezentującej pewne przekształcenie afiniczne.
Dowolne przekształcenie afiniczne jest złożeniem przekształcenia liniowego i przesunięcia. Współrzędne wektora przesunięcia są dane w czwartej kolumnie
macierzy (reprezentacji jednorodnej). Pozostaje niebanalny problem rozłożenia
macierzy
takich że
w którym
Otrzymany ciąg macierzy bardzo szybko zbiega do macierzy
Mając macierz
Macierz ortogonalna
W drugim przypadku wartościami własnymi (macierzy ortogonalnej
Podsumowując: dowolne przekształcenie afiniczne jest złożeniem obrotu,
skalowania osi układu
W pewnych zastosowaniach (np. w animacji i rejestrowaniu ruchu) mamy do czynienia z macierzami ortogonalnymi, które są znane niedokładnie, z powodu błędów zaokrągleń. Algorytm Highama jest najprostszym sposobem wyeliminowania tych błędów, tj. znalezienia macierzy ortogonalnej najbliższej macierzy danej.
Liczba zespolona jest parą liczb rzeczywistych:
Liczbie zespolonej
Pierwsza jej kolumna to liczba
Dość podobną reprezentację obrotów w przestrzeni trójwymiarowej
stanowią kwaterniony.
Są to wektory w
Aby określić mnożenie i dzielenie, zamiast macierzy kolumnowej
Jak widać, wzór opisujący iloczyn kwaternionów bardzo przypomina wzór
na iloczyn liczb zespolonych; najbardziej widoczna różnica to składnik
Aby dokładniej zbadać własności kwaternionów, kwaternionowi
Oczywiście, każdej macierzy utworzonej z czterech
liczb zgodnie z tym schematem odpowiada pewien kwaternion.
Wykonując odpowiednie rachunki, możemy sprawdzić, że sumie
kwaternionów
Dalej przyda się kilka określeń: kwaternion sprzężony do
Zobaczmy, jak to wygląda w notacji macierzowej. Jeśli kwaternion
Kwaternion niemy ma część wektorową równą
Jedynka kwaternionowa to kwaternion
Kwaternion odwrotny do
Mając pojęcie odwrotności, można określić
dzielenie kwaternionów, a właściwie dwa dzielenia:
Ostatnie dwa pojęcia, których będziemy potrzebować, to
kwaternion czysty, którego część
skalarna jest równa
Z punktu widzenia algebry zbiór kwaternionów z opisanymi wyżej działaniami
jest ciałem nieprzemiennym\QH. Tradycyjnie oznacza się je symbolem ,
dla uczczenia Williama R. Hamiltona, który 16 października 1843 r odkrył
je w Dublinie4Hamilton wymyślił wtedy sposób mnożenia czwórek liczb rzeczywistych,
który spełnia wszystkie z wyjątkiem przemienności warunki potrzebne do
otrzymania ciała (ze ,,zwykłym” działaniem dodawania). Kwintesencją tego
mnożenia jest wzór
w którym są użyte symbole
Obroty w przestrzeni
gdzie
Oznaczmy
Część skalarna iloczynu jest zgodnie z zapowiedzią równa
Ponadto
czyli wcześniej wyprowadzony wzór opisujący obraz wektora
Zauważmy, że reprezentacja kwaternionowa obrotu nie jest jednoznaczna:
kwaternion
czyli reprezentację obrotu o kąt
Bezpośrednie obliczanie iloczynu trzech kwaternionów nie jest zbyt tanie;
trzeba wykonać przy tym
Przypuśćmy, że dwa kwaterniony,
Jedno z możliwych podejść polega na użyciu operacji potęgowania
kwaternionów. Możemy zauważyć, że dla dowolnej liczby całkowitej
Możemy rozszerzyć potęgowanie tak, aby dopuścić dowolny wykładnik
rzeczywisty
Obrót odpowiadający chwili
Poprawny sposób polega na dokonaniu interpolacji
łukowej kwaternionów. Kwaterniony jednostkowe
Wyznaczając
Stosowanie tego wzoru wymaga użycia funkcji trygonometrycznych, ale w szczególnym przypadku mamy
dzięki czemu łuk łączący kwaterniony
Chcąc interpolować położenia kątowe obiektu, reprezentowane przez
kwaterniony
Interpretację interpolacji łukowej, a także poprawny zapis tej interpolacji
przy użyciu potęgowania, otrzymamy, rozpatrując przyporządkowane kwaternionom
macierze. Jak wiemy, macierz
Stosując interpolację łukową, np. w animacji, otrzymamy ciąg położeń kątowych przedmiotu,
który obraca się (ze stałą prędkością, jeśli parametr
Interpolacja łukowa może być wykorzystana do skonstruowania gładkiej krzywej
interpolacyjnej położonej na sferze jednostkowej w
Reprezentacja obrotów przy użyciu kwaternionów ma pewną cechę, która może być wadą albo zaletą, zależnie od sytuacji. Otóż ruch, którego opis skonstruujemy w obróconym układzie współrzędnych, jest identyczny jak w układzie wyjściowym. Metoda ta nie bierze pod uwagę czegoś takiego jak kierunek ,,pionowy”, przez co otrzymany ruch może być nienaturalny w danym zastosowaniu.
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.