[GAMES101]圖形學入門筆記

colopen發表於2024-06-07

線性代數基礎知識

此處只補充部份線代內容,包括點乘、叉乘和正交。

向量點乘 Vector Dot Product

介紹點乘的基本概念,公式,以及應用。

兩個向量點乘是一個標量,又是我們也會稱其為兩個向量的餘弦相似度

公式:\(\vec{a} \cdot \vec{b} = ||\vec{a}|| ||\vec{b}|| \cos \theta\)​​

同時也可以獲得兩個向量的餘弦角:\(\cos\theta = \dfrac{\vec{a}\cdot \vec{b}}{||\vec{a}|| ||\vec{b}||}\)

如果是單位向量的話,模長為1,於是有:\(\cos\theta = \vec{a}\cdot \vec{b}\)

笛卡爾座標系下的點乘為逐點相乘後相加:

In 2d Cartesian Coordinates:

\[\vec{a} \cdot \vec{b} = \begin{pmatrix} x_a \\ y_a \end{pmatrix} \cdot \begin{pmatrix} x_b \\ y_b \end{pmatrix} = x_a x_b + y_a y_b \]

In 3d Cartesian Coordinates:

\[\vec{a} \cdot \vec{b} = \begin{pmatrix} x_a \\ y_a \\ z_a \end{pmatrix} \cdot \begin{pmatrix} x_b \\ y_b \\ z_b \end{pmatrix} = x_a x_b + y_a y_b + z_az_b \]

用點乘獲得向量投影

  • \(\vec{b}_{\bot}\)表示向量\(\vec{b}\)在向量向量\(\vec{a}\)上的投影
  • \(\vec{b}_{\bot}\)方向一定和\(\vec{a}\)的單位向量\(\hat{a}\)同向或反向:\(\vec{b}_{\bot} = k\hat{a}\)
  • \(k\)具體值如下:

\[k = ||\vec{b}_{\bot}|| = ||\vec{b}|| \cos \theta \]

點乘在圖形學裡的一些應用

  1. 測量兩個向量的方向差

    用點乘公式獲得餘弦角。

  2. 分解向量:

    利用投影將向量\(\vec{b}\)分解到向量\(\vec{a}\)的方向上,獲得\(\vec{b}_\bot\),然後讓\(\vec{b}\)減去該投影向量\(\vec{b}_\bot\)獲得剩餘向量\(\vec{b} - \vec{b}_\bot\),獲得了\(\vec{b}\)的兩組正交向量\(\vec{b}_\bot\)\(\vec{b} - \vec{b}_\bot\)

  3. 判斷兩個向量是否是前向/反向:

    點乘的結果是正數,根據公式可知餘弦角小於90度,表示兩個向量都是前向的;相反如果結果是負數,說明餘弦角大於90度,兩個向量是反向的。

向量叉乘 Vector Cross Product

兩個向量叉乘是一個向量,該向量正交於叉乘的兩個向量,方向遵循右手定則,因此叉乘的順序會改變方向。

叉乘向量的模長公式:\(||\vec{a} \times \vec{b}|| = ||\vec{a}|| ||\vec{b}|| \sin\phi\)

因此顯然有:\(\vec{a} \times \vec{b} = -\vec{b} \times \vec{a}\), \(\vec{a} \times \vec{a} = \vec{0}\)

向量叉乘常常用於構建右手座標系。

笛卡爾座標系下的叉乘公式:

\[\vec{a} \times \vec{b} = \begin{pmatrix} y_a z_b - y_b z_a \\ z_a x_b - x_a z_b \\ x_a y_b - y_a x_b \end{pmatrix} = A^{*} \vec{b} = \begin{pmatrix} 0 & -z_a & y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0 \end{pmatrix} \begin{pmatrix} x_b\\y_b\\z_b \end{pmatrix} \]

叉乘在圖形學裡的一些應用

  1. 判斷向量\(\vec{b}\)在向量\(\vec{a}\)的左側還是右側:

    利用叉乘向量方向遵循右手定則來實現

  2. 判斷一個點\(P\)是否在三角形\(\triangle ABC\)​的內部:

    按照順時針或逆時針的順序,分別叉乘:\(\vec{AP}\times \vec{AB}, \vec{BP}\times \vec{BC}, \vec{CP}\times \vec{CA}\)。如果這幾個結果的正負號一致,即點永遠在向量的一側,則該點一定在三角形內部。(可以推廣到凸多邊形。

正交座標系 Orthonormal Coordinate Frames

座標系很重要,有了座標系就可以表示一些空間中的點和向量了。

往往會存在許多座標系:Global / Local / Model / parts of model (head, hands, ...)。

需要掌握在不同座標系下進行相互變換transform。

3D空間中任意三個單位正交向量,滿足:

\[\begin{matrix} ||\vec{u}|| + ||\vec{v}|| + ||\vec{w}|| = 1 \\ \vec{u} \cdot \vec{v} = \vec{v} \cdot \vec{w} = \vec{w} \cdot \vec{u} = 0 \\ \vec{w} = \vec{u} \times \vec{v} \quad \text{right-handed} \end{matrix} \]

都可以作為一組正交座標系。

任意向量\(\vec{p}\)都可以被一組正交座標系唯一表示:

\[\begin{matrix} \vec{p} = \underbrace{(\vec{p} \cdot \vec{u})}\vec{u} + (\vec{p} \cdot \vec{v}) \vec{v} + (\vec{p} \cdot \vec{w}) \vec{w} \end{matrix} \]

其中\(\vec{p} \cdot \vec{u}\)表示向量\(\vec{p}\)在單位向量\(\vec{u}\)上的投影。

相關文章