2011-07-10

Mnożenie macierzy i wektora

Mnożenia możemy dokonać na dwa sposoby:

$\begin{bmatrix}
1 & 0 & 0 & t_x \\
0 & 1 & 0 & t_y \\
0 & 0 & 1 & t_z \\
0 & 0 & 0 & 1 \\
\end{bmatrix}
\;\;\;
\begin{bmatrix} v_x \\ v_y \\ v_z \\ 1 \\\end{bmatrix}
=
\begin{bmatrix} v_x+t_x \\ v_y+t_y \\ v_z+t_z \\ 1 \\\end{bmatrix}$

$\begin{bmatrix} v_x & v_y & v_z & 1 \\\end{bmatrix}
\;\;\;
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
t_x & t_y & t_z & 1 \\
\end{bmatrix}
=
\begin{bmatrix} v_x+t_x & v_y+t_y & v_z+t_z & 1 \\\end{bmatrix}
$

Warto przyjąć jedną konwencję i się jej trzymać. Nie tylko chodzi o pozycję elementów translacji i rotacji w macierzy, ale także o jak mnożymy wektor i macierz. Jeśli przyjmujemy, że wektor jest kolumnowy to dopuszczamy tylko mnożenie macierz razy wektor. Nie tworzymy odwrotnie przeładowanych metod, operatorów. Takie mnożenie matematycznie jest niepoprawne. Oczywiście możemy je potraktować matematycznie jako mnożenie macierz razy wektor. Ale wprowadzamy tym zamieszanie.

Należy przyjąć jedną konwencję i się trzymać. W różnych systemach bywa to różnie. Podobnie jak ze skrętnością układu współrzędnych.

Najlepiej nie używać bezpośrednio elementów macierzy, ale polegać na wyspecjalizowanych metodach.

Macierz translacji z pierwszego przykładu jest transpozycja macierzy z drugiego przykładu. Co możemy ładnie zapisać:

$MV=(V^T M^T)^T$

Wybór sposobu mnożenia macierz razy wektor ma wpływ na to jak składane są macierze. W przypadku traktowania wektora jako wiersz, transformacje są nakładane od lewej do prawej. Jeśli wektor jest traktowany jako kolumna to od prawej do lewej, czyli pierwsza transformacja jest ostatnią w iloczynie.

We wszystkich przykładach przyjmuję, że wektor jest kolumnowy.

Brak komentarzy:

Prześlij komentarz