2D Transforms

Scale Matrix

$\left[\begin{array}{l} x^{\prime}\\ y^{\prime} \end{array}\right]

= \left[ \begin{array}{ll} s & 0 \\ 0 & s \end{array} \right]

\left[ \begin{array}{l} x \\ y \end{array} \right]$

Shear Matrix

$\left[\begin{array}{l}x^{\prime} \\y^{\prime}\end{array}\right]=\left[\begin{array}{ll}1 & a \\0 & 1\end{array}\right]\left[\begin{array}{l}x \\y\end{array}\right]$

Rotate Matrix

$R_{\theta} = \left[ \begin{array}{ll} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{array} \right]$

image.png

线性变换的几何意义:旋转的时候看坐标轴如何变换:

显然,$R_{\theta} = \left[ \begin{array}{ll} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{array} \right]$

齐次坐标 (Homogenous Coordinates)

<aside>

众所周知,线性变换没办法表示平移,因为原点不动。

</aside>

<aside>

仿射变换(Affine Transformations)

(在我们没有引入齐次坐标时,是像下面这样做的。需要额外 + 一下)

$\begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \cdot \begin{pmatrix} x \\ y \end{pmatrix} + \begin{pmatrix} t_x \\ t_y \end{pmatrix}$

</aside>

<aside>

而我们不希望把平移变换当做是一种特殊的变换再去额外处理,所以引入齐次坐标。目的是把所有的变换写成一个矩阵乘一个向量的形式。也就变成了下面这样。(也许事实并没有这么简单,可以去射影几何了解更多齐次坐标的奥秘。Projective Geometry

</aside>

Matrix representation of translations

… as long as we divide the result by ‘w’ to “bring it back to reality”

$\begin{bmatrix} x' \\ y' \\ w' \end{bmatrix}

\begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

\begin{bmatrix} x+t_x \\ y+t_y \\ 1 \end{bmatrix}$

GDC讲座 游戏程序员的数学:理解齐次坐标_哔哩哔哩_bilibili_13'36.923''.jpg

image.png

可以看出对对向量做平移操作无意义。

可以看出对对向量做平移操作无意义。

Four Dimensional Space