GAMES101-Lecture 2 线性代数

现代计算机图形学入门-闫令琪,课程笔记。

Lecture 2 线性代数基础知识复习 (Review of Linear Algebra)

为什么要学线性代数?因为计算机图形学依赖很多基础知识,包括数学上的线性代数、微积分、统计;物理上的光学、力学等等。这些知识点都会穿插在这门课中进行讲解。

今天的课程,主要是讲线性代数中的向量、矩阵,包括向量的表示、点乘、叉乘,矩阵的变幻等等,属于是应用在计算机图形学中比较多且基础的一些知识点。

向量 Vectors

向量:同时具有大小方向的几何对象。

  • 如何表示:a\vec{a} 或者 a\boldsymbol{a}
  • 另一种表示方法: AB=BA\vec{AB}=B-A
  • 不需要关心向量的起点和位置,只关心大小和方向。比如 a\vec{a} 平移之后得到 a\vec{a'} ,两个向量位置不同,但大小和方向相同,所以是同一个向量。

向量长度/单位向量

  • 向量大小(长度)这样表示: a||\vec{a}||
  • 单位向量 (Unit vector)
    • 长度为 1 的向量
    • 表示方法:a^\hat{a}
    • 如何计算:向量除以自身的长度 a^=a/a\hat{a}=\vec{a}/||\vec{a}||
    • 常用来表示方向

向量求和 Vector Addition

几何学的方法,两个法则:

  • 平行四边形法则:两个向量放在同一起点,平移两个使其首尾相连形成平行四边形,连接四边形的对角即是向量的和。
  • 三角形法则:向量首尾相接,向量的最开始点和结束点相连。

代数的方法:使用笛卡尔坐标系。

如图,使用 X、Y 可以表示任意的向量。而且这种方式计算比较方便计算向量的长度:

A=x2+y2||A||=\sqrt{x^2+y^2}

向量求积 Vector Multiplication

向量由于有方向,所以与数字的求积不太一样。

点乘 Dot product

  • 定义:两个向量的长度相乘,再乘以他们之间夹角的余弦。ab=abcosθ\vec{a}·\vec{b} = ||\vec{a}||||\vec{b}||cos\theta
  • 上面公式可以推导出:cosθ=ababcos\theta=\frac{\vec{a}·\vec{b}}{||\vec{a}||||\vec{b}||}
  • 如果 a、b 是单位向量的话,那么分母是 1,即:cosθ=a^b^cos\theta=\hat{a}·\hat{b}
  • 交换律:ab=ba\vec{a}·\vec{b} = \vec{b}·\vec{a}
  • 分配律:a(b+c)=ab+ac\vec{a}·(\vec{b}+\vec{c}) = \vec{a}·\vec{b}+\vec{a}·\vec{c}
  • 结合律:(ka)b=a(kb)=k(ab)(k\vec{a})·\vec{b} = \vec{a}·(k\vec{b}) = k(\vec{a}·\vec{b})

直角坐标系下向量的点乘计算方式:

  • 2D: ab=(xaya)(xbyb)=xaxb+yayb\vec{a}·\vec{b} = \begin{pmatrix} x_a \\ y_a \end{pmatrix} · \begin{pmatrix} x_b \\ y_b \\ \end{pmatrix} = x_ax_b + y_ay_b

  • 3D: ab=(xayaza)(xbybzb)=xaxb+yayb+zazb\vec{a}·\vec{b} = \begin{pmatrix} x_a \\ y_a \\ z_a \\ \end{pmatrix} · \begin{pmatrix} x_b \\ y_b \\ z_b \\ \end{pmatrix} = x_ax_b + y_ay_b + z_az_b

向量点乘在计算机图形学中的应用:

  • 找到两个向量/方向之间的夹角
  • 找到夹角基于可以计算向量的投影
  • 有投影就可以对向量进行分解(点乘的逆运算)
  • 如下图:比较 ab\vec{a}·\vec{b}ac\vec{a}·\vec{c} 可以判断哪个向量离 b 更近。判断点乘的结果是大于/小于 0,可以判断方向是向上/向下。

叉乘 Cross product

  • 如图所示,叉乘与点乘完全不同
  • 叉乘的结果 c 与 ab 都垂直(即垂直于 ab 所在的平面)
  • 可以使用右手螺旋定则来确定 c 的方向
    • a x b, 四指沿着 a 方向,弯曲到 b 方向,大拇指的指向即是 c 的方向
    • b x a 则相反(不满足交换律)
  • 叉乘常用于建立三维空间的直角坐标系

直角坐标系下向量的叉乘计算方式:

向量叉乘在计算机图形学中的应用:

  • 判断向量 b 在 a 的哪一侧(左/右)
    • 如左图,使用 a x b,叉乘结果是正数说明在左侧
  • 判断一个点与三角形的位置关系(内/外)
    • 如右图,先判断 p 点与三个向量 abc 的关系,如果 p 均在三个向量的左侧,那就是在三角形内部,反之则是外部。

矩阵 Matrices

数学上,一个 (M x N) 的矩阵是一个由 M 行 N 列元素排列成的矩形阵列。矩阵里的元素可以是数字、符号或数学式。

矩阵的乘积

  • 相乘的条件
    • 第一个矩阵的列数等于第二个矩阵的行数,(M x N) (N x P) = (M x P)。
  • 如何计算
    • 比如下图的结果 26,位于矩阵的2行4列,去第一个矩阵找对应的行,第二个矩阵找对应列,然后作为向量进行点乘。5x4+2x3=26.

矩阵的性质

  • 没有交换律:AB ≠ BA
  • 结合律:(AB)C = A(BC)
  • 分配律:A(B+C) = AB + AC,(A+B)C = AC + BC

矩阵的转置

行列互换,行变成列,列变成行。

如果两个矩阵相乘之后做转置,等于把两个矩阵调换位置之后分别做转置。

以矩阵表示向量乘积

  • 点乘
  • 叉乘