Transformacja 2D
Transformacja oznacza zmianę niektórych grafik na coś innego poprzez zastosowanie reguł. Możemy mieć różne typy transformacji, takie jak przesunięcie, skalowanie w górę lub w dół, obrót, ścinanie itp. Kiedy transformacja odbywa się na płaszczyźnie 2D, nazywa się to transformacją 2D.
Transformacje odgrywają ważną rolę w grafice komputerowej, polegającą na zmianie położenia grafiki na ekranie i zmianie jej rozmiaru lub orientacji.
Jednorodne współrzędne
Aby wykonać sekwencję transformacji, na przykład translację, po której następuje obrót i skalowanie, musimy wykonać sekwencyjny proces -
- Przetłumacz współrzędne,
- Obróć przetłumaczone współrzędne, a następnie
- Skaluj obrócone współrzędne, aby zakończyć transformację złożoną.
Aby skrócić ten proces, musimy użyć macierzy transformacji 3 × 3 zamiast macierzy transformacji 2 × 2. Aby przekonwertować macierz 2 × 2 na macierz 3 × 3, musimy dodać dodatkową zastępczą współrzędną W.
W ten sposób możemy przedstawić punkt za pomocą 3 liczb zamiast 2 liczb, co się nazywa Homogenous Coordinatesystem. W tym systemie wszystkie równania transformacji możemy przedstawić w mnożeniu macierzy. Każdy punkt kartezjański P (X, Y) można przekształcić w jednorodne współrzędne za pomocą P '(X h , Y h , h).
Tłumaczenie
Tłumaczenie przenosi obiekt w inne miejsce na ekranie. Możesz przetłumaczyć punkt w 2D, dodając współrzędne translacji (t x , t y ) do oryginalnej współrzędnej (X, Y), aby uzyskać nową współrzędną (X ', Y').
Z powyższego rysunku możesz napisać, że -
X’ = X + tx
Y’ = Y + ty
Para (t x , t y ) nazywana jest wektorem przesunięcia lub wektorem przesunięcia. Powyższe równania można również przedstawić za pomocą wektorów kolumnowych.
$ P = \ frac {[X]} {[Y]} $ p '= $ \ frac {[X']} {[Y ']} $ T = $ \ frac {[t_ {x}]} {[ t_ {y}]} $
Możemy to zapisać jako -
P’ = P + T
Obrót
Rotując, obracamy obiekt pod określonym kątem θ (theta) od jego początku. Na poniższym rysunku widzimy, że punkt P (X, Y) znajduje się pod kątem φ od poziomej współrzędnej X w odległości r od początku.
Załóżmy, że chcesz go obrócić o kąt θ. Po obróceniu go w nowe miejsce otrzymasz nowy punkt P '(X', Y ').
Używając standardowego trygonometrii, oryginalną współrzędną punktu P (X, Y) można przedstawić jako -
$ X = r \, cos \, \ phi ...... (1) $
$ Y = r \, sin \, \ phi ...... (2) $
W ten sam sposób możemy przedstawić punkt P '(X', Y ') jako -
$ {x} '= r \: cos \: \ left (\ phi \: + \: \ theta \ right) = r \: cos \: \ phi \: cos \: \ theta \: - \: r \ : sin \: \ phi \: sin \: \ theta ....... (3) $
$ {y} '= r \: sin \: \ left (\ phi \: + \: \ theta \ right) = r \: cos \: \ phi \: sin \: \ theta \: + \: r \ : sin \: \ phi \: cos \: \ theta ....... (4) $
Zastępując równanie (1) i (2) odpowiednio w (3) i (4), otrzymamy
$ {x} '= x \: cos \: \ theta - \: y \: sin \: \ theta $
$ {y} '= x \: sin \: \ theta + \: y \: cos \: \ theta $
Przedstawiając powyższe równanie w postaci macierzowej,
$$ [X 'Y'] = [XY] \ begin {bmatrix} cos \ theta & sin \ theta \\ −sin \ theta & cos \ theta \ end {bmatrix} LUB $$
P '= P. R
Gdzie R jest macierzą rotacji
$$ R = \ begin {bmatrix} cos \ theta & sin \ theta \\ −sin \ theta & cos \ theta \ end {bmatrix} $$
Kąt obrotu może być dodatni i ujemny.
Dla dodatniego kąta obrotu możemy użyć powyższej macierzy obrotu. Jednak w przypadku obrotu pod kątem ujemnym macierz zmieni się, jak pokazano poniżej -
$$ R = \ begin {bmatrix} cos (- \ theta) & sin (- \ theta) \\ -sin (- \ theta) & cos (- \ theta) \ end {bmatrix} $$
$$ = \ begin {bmatrix} cos \ theta & −sin \ theta \\ sin \ theta & cos \ theta \ end {bmatrix} \ left (\ ponieważ cos (- \ theta) = cos \ theta \; and \; sin (- \ theta) = −sin \ theta \ right) $$
skalowanie
Aby zmienić rozmiar obiektu, używana jest transformacja skalowania. W procesie skalowania powiększasz lub kompresujesz wymiary obiektu. Skalowanie można osiągnąć, mnożąc oryginalne współrzędne obiektu przez współczynnik skalowania, aby uzyskać pożądany wynik.
Załóżmy, że pierwotne współrzędne to (X, Y), współczynniki skalowania to (S X , S Y ), a otrzymane współrzędne to (X ', Y'). Można to przedstawić matematycznie, jak pokazano poniżej -
X' = X . SX and Y' = Y . SY
Współczynnik skalowania S X , S Y skaluje obiekt odpowiednio w kierunku X i Y. Powyższe równania można również przedstawić w postaci macierzy, jak poniżej -
$$ \ binom {X '} {Y'} = \ binom {X} {Y} \ begin {bmatrix} S_ {x} & 0 \\ 0 & S_ {y} \ end {bmatrix} $$
LUB
P’ = P . S
Gdzie S to macierz skalowania. Na poniższym rysunku przedstawiono proces skalowania.
Jeśli podamy wartości mniejsze niż 1 do współczynnika skalowania S, wówczas możemy zmniejszyć rozmiar obiektu. Jeśli podamy wartości większe niż 1, możemy zwiększyć rozmiar obiektu.
Odbicie
Odbicie jest lustrzanym odbiciem oryginalnego obiektu. Innymi słowy, możemy powiedzieć, że jest to operacja obrotu o 180 °. W transformacji odbicia wielkość obiektu nie zmienia się.
Poniższe rysunki przedstawiają odbicia względem osi X i Y oraz odpowiednio początku.
Ścinanie
Transformacja, która pochyla kształt obiektu, nazywana jest transformacją ścinania. Istnieją dwie transformacje ścinaniaX-Shear i Y-Shear. Jeden przesuwa wartości współrzędnych X, a drugi przesuwa wartości współrzędnych Y. Jednak; w obu przypadkach tylko jedna współrzędna zmienia swoje współrzędne, a inna zachowuje swoje wartości. Ścinanie jest również określane jakoSkewing.
X-Shear
X-Shear zachowuje współrzędną Y i zmiany są dokonywane we współrzędnych X, co powoduje, że pionowe linie przechylają się w prawo lub w lewo, jak pokazano na poniższym rysunku.
Macierz transformacji dla X-Shear można przedstawić jako -
$$ X_ {sh} = \ begin {bmatrix} 1 & shx & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \ end {bmatrix} $$
Y '= Y + Sh y . X
X '= X
Y-Shear
Ścinanie Y zachowuje współrzędne X i zmienia współrzędne Y, co powoduje przekształcenie linii poziomych w linie nachylone w górę lub w dół, jak pokazano na poniższym rysunku.
Ścinanie Y można przedstawić w macierzy jako -
$$ Y_ {sh} \ begin {bmatrix} 1 & 0 & 0 \\ shy & 1 & 0 \\ 0 & 0 & 1 \ end {bmatrix} $$
X '= X + Sh x . Y
Y '= Y
Transformacja złożona
Jeśli po transformacji płaszczyzny T1 następuje transformacja drugiej płaszczyzny T2, to sam wynik może być reprezentowany przez pojedynczą transformację T, która jest złożeniem T1 i T2 wykonanych w tej kolejności. Jest to zapisane jako T = T1 ∙ T2.
Transformację złożoną można osiągnąć przez konkatenację macierzy transformacji w celu uzyskania połączonej macierzy transformacji.
Połączona macierz -
[T][X] = [X] [T1] [T2] [T3] [T4] …. [Tn]
Gdzie [Ti] to dowolna kombinacja
- Translation
- Scaling
- Shearing
- Rotation
- Reflection
Zmiana kolejności transformacji prowadziłaby do różnych wyników, ponieważ generalnie mnożenie macierzy nie jest kumulatywne, to znaczy [A]. [B] ≠ [B]. [A] i kolejność mnożenia. Podstawowym celem tworzenia transformacji jest uzyskanie wydajności poprzez zastosowanie jednej złożonej transformacji do punktu, zamiast stosowania serii przekształceń jedna po drugiej.
Na przykład, aby obrócić obiekt wokół dowolnego punktu (X p , Y p ), musimy wykonać trzy kroki -
- Przenieś punkt (X p , Y p ) na początek.
- Obróć go wokół pochodzenia.
- Na koniec przenieś środek obrotu z powrotem tam, gdzie należał.