« poprzedni punkt | następny punkt » |
W grafice komputerowej omówione wyżej przekształcenia geometryczne są opisywane z wykorzystaniem tak zwanych współrzędnych jednorodnych. Obiekt opisany w określonym układzie współrzędnych prostokątnych, na przykład x,y, może być przedstawiony również w układzie współrzędnych o jeden wymiar większym, na przykład w układzie x, y, z. Wtedy, na przykład w przypadku punktu o współrzędnych (x,y) dochodzi jedna współrzędna z, która w ogólnym przypadku może mieć dowolną wartość. Jeżeli przyjmie się, że ta nowa współrzędna będzie miała wartość 1 to mówimy, że punkt jest reprezentowany we współrzędnych jednorodnych. I tak, punkt o współrzędnych (x, y) ma teraz współrzędne (x,y,1). Dodajmy od razu, że gdyby zdarzyło się, że w wyniku obliczeń we współrzędnych jednorodnych otrzymalibyśmy współrzędne (x',y',w), to od razu trzeba wykonać krok normalizacyjny tak, żeby uzyskać postać standardową dla której w = 1. Ten krok normalizacyjny jest wykonywany zgodnie z następującymi zależnościami:
![]() | , | ![]() |
Przejście do współrzędnych jednorodnych umożliwia jednolity zapis podstawowych przekształceń geometrycznych: przesunięcia, obrotu, skalowania i innych za pomocą macierzy przekształceń 3x3. Pozwala to realizować takie operacje za pomocą specjalizowanego sprzętu i w efekcie przyspieszanie obliczeń.
Korzystając ze współrzędnych jednorodnych można, w przypadku złożonych przekształceń, mnożyć macierze składowych przekształceń przez inne macierze przekształceń i uzyskiwać pojedynczą macierz dla złożonego przekształcenia (również o wymiarze 3x3). Pozwala to niejednokrotnie w istotny sposób redukować ilość potrzebnych obliczeń.
W literaturze są stosowane dwie konwencje zapisu punktu w postaci wektorowej: kolumnowa i wierszowa. Obie konwencje są równoważne. W przypadku reprezentacji punktu w postaci wektora kolumnowego mnoży się macierz przekształcenia przez wektor kolumnowy tak jak w poniższym przykładowym zapisie:
![]() |
Przy reprezentacji punktu w postaci wektora wierszowego mnoży się ten wektor przez transponowaną macierz przekształcenia tak jak w poniższym przykładzie:
![]() |
Postać macierzy 3x3 w jednej konwencji jest postacią transponowaną macierzy w drugiej konwencji. W dalszym ciągu będzie używana konwencja z wektorem kolumnowym.
Podstawowe przekształcenia: przesunięcie, mnożenie, skalowanie, pochylanie i dowolne ich kombinacje są określane jako przekształcenia afiniczne i ich ogólny zapis jest następujący:
![]() |
Niżej podano macierze dla poszczególnych przekształceń geometrycznych na płaszczyźnie.
Przesunięcie o wektor (tx, ty):
![]() |
Skalowanie ze współczynnikami skalowania Sx, Sy :
![]() |
Obrót o kąt q względem początku układu współrzędnych:
![]() |
Pochylanie wzdłuż osi x ze współczynnikiem a i wzdłuż osi y ze współczynnikiem b:
![]() | ![]() |
Jak już wspomniano wyżej, jedną z zalet reprezentowania przekształceń w postaci macierzowej jest to, że można je mnożyć przez siebie w celu uzyskania macierzy dla przekształcenia złożonego. Jeżeli więc konieczne będzie wykonanie szeregu przekształceń w odniesieniu do określonego punktu P, to można wstępnie wykonać mnożenie macierzy Mi kolejnych przekształceń (w ustalonej kolejności) i uzyskać jedną macierz wypadkową M' dla tego ciągu przekształceń. Jest to szczególnie korzystne obliczeniowo wtedy, gdy ten sam ciąg przekształceń ma być wykonany w odniesieniu do wielu punktów. Wyjaśniają to poniższe równania:
P' = M3 M2 M1 P |
M = M3 M2 M1 |
P' = M P. |
Jeżeli na przykład chcielibyśmy obracać obiekt nie względem początku układu współrzędnych a względem pewnego punktu P(x1,x2), to powinniśmy wykonać kolejno następujące operacje: takie przesunięcie obiektu, żeby punkt P(x1,x2) znalazł się w początku układu współrzędnych, wykonanie obrotu o kąt q, takie przesunięcie obróconego obiektu żeby punkt znajdujący się w początku układu współrzędnych wrócił do początkowego położenia P(x1,x2). Oznacza to, że kolejno powinniśmy wykonać operacje przesunięcia o wektor (-x1,-x2), obrotu o kąt q i przesunięcia o wektor (x1,x2). Można to zrealizować wykonując kolejno trzy operacje mnożenia wektora przez odpowiednie macierze. Równoważny sposób polega na tym, że na początku znajdziemy macierz wypadkową dla całej operacji, a dopiero potem korzystamy z niej w odniesieniu do poszczególnych wierzchołków obracanego obiektu. Niżej pokazany jest proces wyznaczania wypadkowej macierzy. Zwróćmy uwagę na kolejność macierzy.
![]() ![]() | ![]() | = | ![]() |
W podobny sposób można wyznaczać macierze wypadkowe dla innych złożonych przekształceń. Proponuję samodzielne znalezienie macierzy wypadkowej dla operacji skalowania względem punktu nie leżącego w początku układu współrzędnych.
« poprzedni punkt | następny punkt » |