Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 12418 razy

Wstęp

Bardzo często w programowaniu stosuje się macierze transformacji, które umożliwiają wykonywanie operacji:

Ogólny zapis macierzy transformacji dla 2W obiektów

Dla przykładu rozpatrzmy macierz transformacji stosowanej w programowaniu dla grafiki 2W:

gdzie:

Obliczanie macierzy odwrotnej Mtr-1

Nie każdą macierz można odwrócić, wynika to z poniższego wzoru na macierz odwrotną macierzy Mtr:

wzór na obliczenie macierzy odwrotnej transformacji [2]

Zapis wyrażenia w formacie TeX-a:

M_{tr}^{-1}=\begin{bmatrix} \cfrac{m_{2,2}}{m_{1,1}\cdot m_{2,2}-m_{1,2}\cdot m_{2,1}} & -\cfrac{m_{1,2}}{m_{1,1}\cdot m_{2,2}-m_{1,2}\cdot m_{2,1}} & \cfrac{dy\cdot m_{1,2}-dx\cdot m_{2,2}}{m_{1,1}\cdot m_{2, 2} -m_{1,2}\cdot m_{2,1}} \\ -\cfrac{m_{2,1}}{m_{1,1}\cdot m_{2,2}-m_{1,2}\cdot m_{2,1}} & \cfrac{m_{1,1}}{m_{1,1}\cdot m_{2,2}-m_{1,2}\cdot m_{2,1}} & \cfrac{dx\cdot m_{2,1}-dy\cdot m_{1,1}}{m_{1,1}\cdot m_{2,2}-m_{1,2}\cdot m_{2,1}} \\ 0 & 0 & 1 \end{bmatrix}

W powyższym wzorze, łatwo zauważyć, że w mianowniku powtarza się to samo wyrażenie, którym jest wyznacznik macierzy transformacji Mtr:

licznik z wzoru <b>[2] [3]

Zapis wyrażenia w formacie TeX-a:

\left|M_{tr}\right| = m_{1,1}\cdot m_{2, 2} -m_{1,2}\cdot m_{2,1}

Teraz wzór [2] upraszcza się do nieco ładniejszej postaci:

uproszczona wersja wzoru na macierz odwrotną macierzy transformacji [4]

Zapis wyrażenia w formacie TeX-a:

M_{tr}^{-1}=\begin{bmatrix} \cfrac{m_{2,2}}{\left|M_{tr}\right|} & -\cfrac{m_{1,2}}{\left|M_{tr}\right|} & \cfrac{dy\cdot m_{1,2}-dx\cdot m_{2,2}}{\left|M_{tr}\right|} \\ -\cfrac{m_{2,1}}{\left|M_{tr}\right|} & \cfrac{m_{1,1}}{\left|M_{tr}\right|} & \cfrac{dx\cdot m_{2,1}-dy\cdot m_{1,1}}{\left|M_{tr}\right|} \\ 0 & 0 & 1 \end{bmatrix}

Macierz transformacji Mtr jest odwracalna wtedy i tylko wtedy, gdy wartość wyznacznika macierzy transformacji Mtr ≠ 0.

Operacja transformacji punktu

Jeżeli dana jest macierz transformacji Mtr, to iloczyn tej macierzy razy wektor umożliwia pozyskanie punktu poddanego procesowi transformacji:

iloczyn wektora i macierzy transformacji [5]

Zapis wyrażenia w formacie TeX-a:

\vac{P'} = M_{tr} \cdot \vec{P}=\begin{bmatrix} m_{1,1} & m_{1,2} & dx\\ m_{2,1} & m_{2,2} & dy\\ 0 & 0 & 1 \end{bmatrix}\cdot \begin{bmatrix}x \\ y \\ 1\end{bmatrix}

Odwrotna operacja jest możliwa, gdy spełniony jest warunek, że współczynnik a z wzoru [3] ≠ 0. W takim przypadku prawdziwa jest zależność:

iloczyn wektora i odwrotności macierzy transformacji [6]

Zapis wyrażenia w formacie TeX-a:

\vac{P} = M_{tr}^{-1} \cdot \vec{P'}=\begin{bmatrix} \cfrac{m_{2,2}}{\left|M_{tr}\right|} & -\cfrac{m_{1,2}}{\left|M_{tr}\right|} & \cfrac{dy\cdot m_{1,2}-dx\cdot m_{2,2}}{\left|M_{tr}\right|} \\ -\cfrac{m_{2,1}}{\left|M_{tr}\right|} & \cfrac{m_{1,1}}{\left|M_{tr}\right|} & \cfrac{dx\cdot m_{2,1}-dy\cdot m_{1,1}}{\left|M_{tr}\right|} \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix}x' \\ y' \\ 1\end{bmatrix}

Składanie macierzy obrotu względem zadanego punktu

W celu uzyskania macierzy obrotu konieczne jest przemnożenie trzech następujących macierzy:

Równanie [7] [7]

Zapis wyrażenia w formacie TeX-a:

M_{rot(dx, dy, \alpha)} = \begin{bmatrix} 1 & 0 & -dx \\ 0 & 1 & -dy \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} \cos(\alpha) & -\sin(\alpha) & 0 \\ \sin(\alpha) & cos(\alpha) & 0 \\ 0 & 0 & 1\end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & dx \\ 0 & 1 & dy \\ 0 & 0 & 1 \end{bmatrix}

Powyższy wzór mnoży macierz przesunięcia razy macierz obrotu i razy macierz powrotnego przesunięcia. W ten sposób otrzymana macierz przemnożona przez wektor P obraca go o kąt α względem puntu o współrzędnych dx i dy.

Macierz skalowania

Macierz skalowania wygląda następująco:

macierz skalowania [8]

Zapis wyrażenia w formacie TeX-a:

M_{scale(sx, sy)}=\begin{bmatrix} sx & 0 & 0 \\ 0 & sy & 0 \\ 0 & 0 & 1 \end{bmatrix}

Można również skalować względem obranego punktu składając poprzez wymnożenie następujące macierze:

składanie macierzy przesunięcia i skalowania [9]

Zapis wyrażenia w formacie TeX-a:

M_{scale(dx, dy, sx, sy)}= \begin{bmatrix} 1 & 0 & -dx \\ 0 & 1 & -dy \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} sx & 0 & 0 \\ 0 & sy & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & dx \\ 0 & 1 & dy \\ 0 & 0 & 1 \end{bmatrix}

Macierz pochylania

Na pochylanie pozwala macierz następującej postaci:

macierz pochylania [10]

Zapis wyrażenia w formacie TeX-a:

M_{shear(sh, sv)}=\begin{bmatrix} 1 & sh & 0 \\ sv & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

gdzie:

Odbicie lustrzane

Macierz odbicia lustrzanego względem osi x wygląda dość banalnie:

Macierz odbicia lustrzanego względem osi x [11]

Zapis wyrażenia w formacie TeX-a:

M_{mirror_x}=\begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

Macierz odbicia lustrzanego względem osi y:

Macierz odbicia lustrzanego względem osi y [12]

Zapis wyrażenia w formacie TeX-a:

M_{mirror_y}=\begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

Odbicie lustrzane względem osi przechodzącej przez środek układu współrzędnych i pochylonej o α stopnie względem osi x:

odbicie względem osi przechodzącej przez środek układu współrzędnych pod kątem alfa [13]

Zapis wyrażenia w formacie TeX-a:

M_{mirror(\alpha, x)}= \begin{bmatrix} \cos(-\alpha) & -\sin(-\alpha) & 0 \\ \sin(-\alpha) & \cos(-\alpha) & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} \cos\,\alpha & -\sin\,\alpha & 0 \\ \sin\,\alpha & \cos\,\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix}

Mieszanie wszystkich transformacji

Wszystkie obiekty mogą być przechowywane jako seria punktów oraz macierz transformacji Mtr, na którą mogą się składać w zasadzie nieskończone ilości wykonywanych wcześniej operacji. Co jest jednak ważne to to, że aby dana operacja była odwracalna, wyznacznik macierzy transformacji Mtr nie może być równy 0. Warto też nadmienić, że w takim układzie punkty obiektu opisywanego nie są modyfikowane i przechowywane są w pierwotnej nie zmienionej postaci. Dopiero gdy ów obiekt jest rysowany obliczany jest iloczyn tychże punktów i macierzy transformacji.