Ma trận của biến đổi tuyến tính

Trong đại số tuyến tính, một phép biến đổi tuyến tính có thể được biểu diễn bằng ma trận.  Nếu *T* là một biến đổi tuyến tính ánh xạ từ **R***n* vào **R***m* và *x* là một vector cột với *n* thành phần, thì

:T(\vec x) = \mathbf{A} \vec x

với **A** là ma trận *m*&times;*n*, gọi là **ma trận của biến đổi** *T*.

## Tìm ma trận của một phép biến đổi

Nếu có một phép biến đổi tuyến tính T(x) đã biết dạng của hàm, ta có thể dễ dàng xác định ma trận biến đổi **A** bằng cách biến đổi từng vector của cơ sở chuẩn của không gian Rn theo *T* và sau đó chèn kết quả vào trong các cột của ma trận **A**. Nói cách khác,

:\mathbf{A} = \begin{bmatrix} T(\vec e_1) & T(\vec e_2) & \cdots & T(\vec e_n) \end{bmatrix}

Ví dụ, hàm T(x) = 5x là một biến đổi tuyến tính. Áp dụng cách trên (giả sử *n* = 2 trong trường hợp này) cho ta

:T(\vec x) = 5 \vec x = \begin{bmatrix} 5 && 0 \\ 0 && 5 \end{bmatrix} \vec x

## Các ví dụ trong đồ họa 2D

Hầu hết các phép biển đổi hình học mà giữ cho điểm gốc cố định là tuyến tính, bao gồm phép xoay (*rotation*), phép tỉ lệ (*scaling*), phép trượt (*shearing*), phép phản chiếu (*reflection*), và phép chiếu trực giao (*orthogonal projection*); nếu một biến đổi aphin không phải là một phép biến đổi thuần túy thì nó sẽ giữ một điểm nào đó cố định, và điểm đó sẽ được chọn làm gốc để phép biến đổi là tuyến tính. Trong 2 chiều, phép biến đổi tuyến tính có thể được biểu diễn dùng một ma trận biến đổi 2&times;2.

### Phép xoay

Khi xoay tọa độ một góc \theta  thuận chiều kim đồng hồ quanh điểm gốc, dạng hàm của nó là.

x' = x \sin (|\theta|) + y \cos (|\theta|).       And y' = x \cos (|\theta|) - y \sin (|\theta|)

Viết dưới dạng ma trận:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \sin(| \theta|) &  \cos(|\theta|) \\ \cos(|\theta|) & -\sin(|\theta|) \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

### Phép tỉ lệ

Với tỉ lệ (nghĩa là giãn ra hay co lại), ta có x' = s_x \cdot x và y' = s_y \cdot y.  Dạng ma trận là:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}


### Phép trượt

Phép trượt (visually similar to slanting), có hai khả năng. 
* Trượt dọc theo trục tọa độ *x* có x' = x + ky và y' = y; dạng ma trận là:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & k \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

* Trượt song song theo trục *y* có x' = x and y' = y + kx, có dạng ma trận là:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ k & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}


### Phép phản chiếu

Để phản chiếu một vectơ qua một đường thẳng đi qua gốc tọa độ, giả sử (*u<sub>x</sub>*, *u<sub>y</sub>*) là vectơ đơn vị theo hướng của đường thảng đó.  Sau đó sử dụng ma trận biến đổi sau đây:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 2 u_x^2 - 1 & 2 u_x u_y \\ 2 u_x u_y & 2 u_y^2 - 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}


Một phép phản chiếu qua một đường thẳng không đi qua gốc tọa độ không phải là một biến đổi tuyến tính; đó là một biến đổi affine.

### Phép chiếu vuông góc

Để chiếu vuông góc một vectơ vào một đường thẳng đi qua gốc tọa độ, giả sử (*u<sub>x</sub>*, *u<sub>y</sub>*) là một vectơ đơn vị theo hướng đường thẳng đó.  Sau đó sử dụng ma trận biến đổi sau đây:

:
\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} u_x^2 & u_x u_y \\ u_x u_y & u_y^2 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}


Cũng như là phép phản chiếu, một phép chiếu vuông góc vào một đường thẳng không đi qua gốc tọa độ chỉ là
một biến đổi affine, không phải là biến đổi tuyến tính.

Phép chiếu song song cũng là biến đổi tuyến tính và có thể được biểu diễn đơn giản bằng một ma trận. Tuy vậy, phép chiếu theo tia nhìn (*perspective projection*) muốn biểu diễn bằng ma trận phải sử dụng trục tọa độ thuần nhất (*homogeneous coordinates*).

## Đảo ngược và kết hợp các phép biến đổi

Một trong các động cơ chính trong việc sử dụng ma trận để biểu diễn biến đổi tuyến tính là
sau đó các biến đổi có thể được kết hợp hay đảo ngược một cách dễ dàng.

Kết hợp đạt được bởi phép nhân ma trận.  Nếu **A** và **B** là hai ma trận của hai
phép biến đổi tuyến tính, thì kết quả của việc áp dụng **A** và sau đó áp dụng **B** lên một vectơ *x* được
đưa ra bởi:

:\mathbf{B}(\mathbf{A} \vec x) = (\mathbf{BA}) \vec x

Nói một cách khác, ma trận của phép biến đổi bao gồm biến đổi ***A''' theo sau bởi '''B*** chỉ đơn giản là tích của hai ma trận riêng biệt. Để ý rằng phép nhân được thực hiện theo thứ tự ngược với thứ tự viết trong một câu: ma trận  "**A** theo sau bởi **B**" là **BA**, chứ không phải **AB**.

Một hệ quả của khả năng có thể kết hợp các phép biến đổi bằng cách nhân ma trận biểu diễn chúng với nhau là các biến đổi có thể được đảo ngược bằng cách  nghịch đảo ma trận của chúng.  Do đó, **A**−1 biểu diễn phép biến đổi làm "đảo ngược" **A**.

Các ma trận biến đổi không phải luôn luôn khả nghịch, nhưng thường là có một lời giải thích bằng trực giác. Trong mục trước, hầu hết các phép biến đổi đều khả nghịch. Phép biến đổi tỉ lệ là khả nghịch miễn là  s_x hoặc s_y khác không (điều này có thể hiểu được dễ dàng khi chúng ta phá hủy thông tin bằng cách bỏ đi một chiều nếu như một trong hai hệ số bằng 0). Cũng vậy, phép chiếu vuông góc không bao giờ khả nghịch.

## Các loại biến đổi khác

### Phép biến đổi affine

Để biểu diễn một biến đổi affine bởi ma trận, chúng ta phải sử dụng tọa độ đồng nhất. Điều này có nghĩa là biểu diễn một vectơ 2 chiều (*x*, *y*) như là một vectơ 3-chiều (*x*, *y*, 1), và tương tự như vậy cho các chiều cao hơn. Sử dụng hệ thống này, phép xê dịch (*translation*) có thể được diễn tả bởi phép nhân ma trận. Dạng hàm số  x' = x + t_x; y' = y + t_y trở thành:

:
\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ t_x & t_y & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}


Tất cả các phép biến đổi tuyến tính thông thường có thể được chuyển đổi thành phép biến đổi affine bằng cách mở rộng ma trận biểu diễn thêm 1 hàng và 1 cột, làm đầy khoảng thêm vào bằng 0 ngoại trừ góc dưới bên phải, phải được đặt bằng 1. Ví dụ, ma trận của phép xoay bên trên sẽ trở thành:

:\begin{bmatrix} \cos \theta & - \sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix}

Sử dụng hệ thống này, phép xê dịch có thể trộn lẫn với các loại biến đổi khác, sử dụng phép nhân ma trận như là trước đây. (Điều này xảy ra là do mặt phẳng thực đã được ánh xạ vào mặt phẳng *w* = một trong không gian chiếu (*projective space*), và do vậy xê dịch trong không gian thực có thể được biểu diễn bởi một phép trượt trong không gia chiếu *projective space*.)

Khi sử dụng các biến đổi affine, phần đồng nhất của vectơ tọa độ (thường gọi là *w*) sẽ không bao giờ thay đổi. Người ta thường giả sử một cách an toàn là nó bằng 1. Tuy vậy, điều này là không đúng khi sử dụng phép chiếu theo tia nhìn (*perspective projection*).

### Phép chiếu theo tia nhìn
(*Chiếu Phối Cảnh*)

Một loại biến đổi khác, khá quan trọng trong đồ họa máy tính trong 3 chiều, là phép chiếu theo tia nhìn. Trong khi những phép chiếu song song được sử dụng để chiếu các điểm vào một mặt phẳng chứa ảnh dọc theo các đường song song, phép chiếu theo tia nhìn chiếu các điểm vào mặt phẳng chứa ánh theo các đường thẳng phát ra từ một điểm, gọi là trung tâm của phép chiếu. 
Điều này nghĩa là một vật sẽ có hình chiếu nhỏ hơn khi nó nằm xa trung tâm của phép chiếu và có ảnh lớn hơn khi nó gần trung tâm của phép chiếu hơn.

Phép chiếu theo tia nhìn sử dụng gốc tọa độ như là trung tâm của phép chiếu, và *z* = 1 như là mặt phẳng chứa ảnh.  Dạng hàm số của phép biến đổi này là x' = x / z; y' = y / z.  Chúng ta có thể biểu diễn trong tọa độ đồng nhất bởi:

:
\begin{bmatrix} x_c \\ y_c \\ z_c \\ w_c \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}


(Kết quả sau khi tiến hành phép nhân này là (x_c, y_c, z_c, w_c) = (x, y, z, z).)

Sau khi tiến hành phép nhân ma trận, phần tử đồng nhất *w<sub>c</sub>* sẽ, nhìn chung, là không bằng 1. Do vậy, để đưa về lại mặt phẳng thực chúng ta phải làm một phép chia đồng nhất, nghĩa là chia mỗi thành phần bởi *w<sub>c</sub>*:

:
\begin{bmatrix} x' \\ y' \\ z' \end{bmatrix} = \begin{bmatrix} x_c / w_c \\ y_c / w_c \\ z_c / w_c \end{bmatrix}


Các phép chiếu theo tia nhìn phức tạp hơn có thể được tạo thành bằng cách bao gồm phép này với phép xoay, tỉ lệ, xê dịch, và trượt để di chuyển mặt phẳng chứa ảnh và trung tâm của phép chiếu đến bất cứ nơi nào mà chúng cần thiết.

## Tham khảo