线性代数复习

最近 GIS 很火啊,各种应用和引擎呈百花齐放的形式,之前的重心方向:地理信息框架、底层数据组织、业务应用模式都接触很多了,自己也做了简单的开源 Web GIS 应用以做代学,详情可见Github 仓库,后续的目标应该会集中在:显卡编程、GLSL、图形学上面,更偏底层一些,涉及到业务的更少,但能开拓的东西更多。

这块目标上随时都会涉及到线性代数的知识点,大学时候学习的线性代数这么多年没怎么用,已经基本还给老师了,所以很有必要进行一系列的回顾。故开此篇。

向量

向量的基础内容博客以前写过了,就不重新写了,详见:基础内容延伸内容

矩阵

矩阵向量表示

我们可以用一个矩阵来表示向量,如一个二维向量可以这样表示:

$ A = \begin{pmatrix} x \\ y \end{pmatrix} $

$ A^T = \begin{pmatrix} x & y \end{pmatrix} $ 转置矩阵

注:一般习惯用列向量来表示,用行向量表示也可以,本质上没有区别

叉乘的性质

$\vec{x} \times \vec{y} = +\vec{z}$
$\vec{y} \times \vec{x} = -\vec{z}$
$\vec{y} \times \vec{z} = +\vec{x}$
$\vec{z} \times \vec{y} = -\vec{x}$
$\vec{z} \times \vec{x} = +\vec{y}$
$\vec{x} \times \vec{z} = -\vec{y}$

以上常用于定坐标系。

$\vec{a} \times \vec{b} = -\vec{b} \times \vec{a}$

$\vec{a} \times \vec{a} = 0$

$\vec{a} \times (\vec{b} + \vec{c})= \vec{a} \times \vec{b} + \vec{a} \times \vec{c}$

$\vec{a} \times (k \vec{b})= k(\vec{a} \times \vec{b})$

矩阵表示

一个 m $\times$ n 的数组 $(m :rows, n :columns)$,例:

$ \begin{pmatrix} 1 & 3 \\ 5 & 2 \\ 0 & 4 \end{pmatrix} $

矩阵相乘

必须满足:$(M \times {\color{red}{N}}) ({\color{red}{N}} \times P) = (M \times P)$

如何计算

结果矩阵的元素 (i, j) 是,A 矩阵的第 i 行和 B 矩阵的第 j 列 点乘的结果。

$$
\begin{pmatrix} 1&3 \\ 5&2 \\ 0&4 \end{pmatrix} \begin{pmatrix} 3&6&9&4 \\ 2&7&8&3 \end{pmatrix} = \begin{pmatrix} 9&27&33&13 \\ 19&44&61&26 \\ 8&28&32&12 \end{pmatrix}
$$

矩阵乘法属性

  • 不满足交换律
    $AB \neq BA$

  • 结合律和分配率可用
    $(AB)C = A(BC)$
    $A(B+C) = AB + AC$
    $(A+B)C = AC + BC$

变换

缩放 Scale

$$
\begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} S_x&0 \\ 0&S_y \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix}
$$

剪切变换 Shear Matrix

$$
\begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} 1&a \\ b&1 \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix}
$$

旋转 Rotate

一切旋转不作特别说明的,都是以原点$(0,0)$为轴,逆时针(CCW)进行旋转。

$$
\begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix}
$$

以上形式,我们称为线性变换

$ x’ = ax + by $
$ y’ = cx + dy $


$ \begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} a&b \\ c&d \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix} $


$ x’ = M x $

平移 Translation

平移 $(t_x, t_y)$的距离,则:

$ x’ = x + t_x $
$ y’ = y + t_y $


$ \begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} a&b \\ c&d \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix} $

$ {\color{red}{这是一个非线性变换}} $

为了解决平移非线性变换的问题,使所有变换能统一计算。引入 齐次坐标 Homogenous Coordinates

齐次坐标 Homogenous Coordinates

添加一个坐标,称为:w-coordinate

对于二维来说:

  • 2D point = $ (x, y, {\color{red}{1}})^T $
  • 2D vector = $ (x, y, {\color{red}{0}})^T $

通过 w-coordinate 的结果是 1 或 0,来验证

  • vector + vector = vector
  • point - point = vector
  • point + vector = point
  • point + point = center point

在齐次坐标中,如果 $ \begin{pmatrix} x \\ y \\ w \end{pmatrix} $ 是一个 2D 点,我们可以把 w-coordinate 归一,$ \begin{pmatrix} x/w \\ y/w \\ 1 \end{pmatrix} $, $ w \neq 0 $

平移

有了齐次坐标,平移就可以表示为:

$ \begin{pmatrix} x’ \\ y’ \\ w’ \end{pmatrix} = \begin{pmatrix} 1&0&t_x \\ 0&1&t_y \\ 0&0&1 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} x+t_x \\ y+t_y \\ 1 \end{pmatrix} $

仿射变换 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} x’ \\ y’ \end{pmatrix} $

使用齐次坐标

$ \begin{pmatrix} x’ \\ y’ \\ 1 \end{pmatrix} = \begin{pmatrix} a&b&t_x \\ c&d&t_y \\ 0&0&1 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} $

可以看出变换矩阵的最后一行,始终是 0 0 1

组合变换 Composite Transform

可以想象,使用旋转矩阵 R 和平移矩阵 T。先进行平移 T,再做旋转 R;和先进行旋转 R,再做平移 T,结果肯定是不一样的,既:$ RT \neq TR $。 这也证明了,矩阵不满足交换律。(记住:旋转默认情况下以原点,逆时针进行)

一个复杂的组合变换:

$ \begin{pmatrix} x’ \\ y’ \\ 1 \end{pmatrix} = A_n \cdot \cdot \cdot A_2 \cdot A_1 \cdot \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} $

其中,$ A_n \cdot \cdot \cdot A_2 \cdot A_1 $,是多个变换矩阵。

由于矩阵乘法满足分配律,且这些矩阵相乘,最终还是一个矩阵,所以,组合变换用一个矩阵就可以进行表示。

3D 变换

还是使用齐次坐标:

  • 3D point = $ (x, y, z, {\color{red}{1}})^T $
  • 3D vector = $ (x, y, z, {\color{red}{0}})^T $

一般地,$ (x, y, z, w) (w \neq 0) $ ,代表 3 维坐标点:$ (x/w, y/w, z/w) $

3D 的仿射变换,使用 $ 4 \times 4 $矩阵表示:

$ \begin{pmatrix} x’ \\ y’ \\ z’ \\ 1 \end{pmatrix} = \begin{pmatrix} a&b&c&t_x \\ d&e&f&t_y \\ g&h&i&t_z \\ 0&0&0&1 \end{pmatrix} \cdot \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} $

顺序

从上面文章中平移的公式:

$ \begin{bmatrix} x’ \\ y’ \end{bmatrix} = \begin{bmatrix} a&b \\ c&d \end{bmatrix} \begin{bmatrix} x \\ y\end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix} $

可以看出,先做线性变换,再做平移。


版权声明:
除非注明,本博文章均为原创,转载请以链接形式标明本文地址。



   转载规则


《线性代数复习》 Jackie Tang(唐浩桀) 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Git修改Commit信息 Git修改Commit信息
天天写错 Git Commit, 天天 rebase,得记录标准流程了 git log #查看 git rebase -i HEAD~3 #编辑倒数第3次,最近的为 倒数第1次,直接 git commit –amend 就行
2024-07-03 Jackie Tang(唐浩桀)
下一篇 
docker 安装部署 onlyoffice docker 安装部署 onlyoffice
安装 docker volume create onlyoffice_logs docker volume create onlyoffice_data docker run -itd -p 60081:80 -p 60441:44
2021-12-16 Jackie Tang(唐浩桀)
  目录