Lecture02_向量與線性代數_GAMES101 課堂筆記——2020.2.14


一、向量(Vectors)

     向量表示示意圖:

  • 有序實數組,用以表示在不同坐標軸上的投影長度
  • 有行和列兩種表達方式,在圖形學中常以列表達
  • 代表了一個有方向的長度
  • 基本運算:
    • 加法(滿足結合律和交換律)
    • 標量乘以向量(滿足結合律和分配率)
    • 點乘(內積,結果為標量,幾何意義是 [公式] ,滿足分配率和交換律,可用於判斷兩向量夾角,求向量長度,計算投影等)
    • 叉乘(外積,結果為向量,垂直於原向量構建的平面,長度為 [公式] ,交換叉乘中兩向量的位置,會得到長度相同但方向相反的向量)
    • 向量歸一化:p的歸一化向量q與p方向相同,長度為1,可通過點乘算出

(一)向量歸一化

     向量長度表示:\(||\vec a||\)
     單位向量:

  • 長度 = 1
  • 計算公式:

\[\hat a = \frac{\vec a}{||\vec a||} \]

  • 可用於代表方向

(二)向量相加

     向量相加示意圖:

  • 幾何:遵守平行法則、三角法則
  • 代數上:坐標相加

(三)笛卡爾積

     向量相加示意圖:

    X和Y可以是任何(通常是正交的單位)向量,

\(A = {x \choose y }\)      \(A^T = \left(x,y \right )\)      \(||A|| = \sqrt{x_2+y_2}\)

(四)向量相乘

1. 點乘

     向量點乘示意圖:

\(\vec a \cdot \vec b = \left\| \vec a \right\| \left\| \vec b \right\| \cos \theta\)     \(\cos \theta = \frac{\vec a \cdot \vec b}{\left\| \vec a \right\| \left\| \vec b \right\|}\)     
對於單位向量:\(\cos \theta = \hat a \cdot \hat b\)

(1)點乘性質

\(\vec a \cdot \vec b = \vec b \cdot \vec a\)
\(\vec a \cdot \left( \vec b + \vec c \right) = \vec a \cdot \vec b + \vec a \cdot \vec c\)
\(\left( k \vec a \right) \cdot \vec b = \vec a \cdot \left( k \vec b \right) = k \left( \vec a \cdot \vec b \right)\)

(2)在笛卡爾坐標系中做點積
     組合相乘,然后相加。

  • 二維坐標系

\[\vec a \cdot \vec b = {x_a \choose y_a} \cdot {x_b \choose y_b} = x_aX_b+y_ay_b \]

  • 三維坐標系

\[\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_ax_b+y_ay_b+z_az_b \]

(3)投影點積
    示意圖:

  • \(\vec b_\bot\):\(\vec b\)\(\vec a\)上的投影
    • \(\vec b_\bot\)必須屬於\(\vec a\)(或者屬於\(\hat a\))
      • \(\vec b_\bot = k \vec a\)
    • 求k的值
      • \(k = \left\| \vec b_\bot \right\| \cos \theta\)

(4)圖形學中的點乘

  • 求兩個向量的夾角,(例如:光源與表面夾角的余弦值)
  • 求一個向量在另一個向量上的投影

應用
測量兩個向量的方向
1)在一個圓中

    例如,圖中\(\vec a \cdot \vec b >0\)屬於前向(forward),\(\vec a \cdot \vec c <0\)屬於后向(backward)

2)兩個向量之間

(四)向量叉乘(Cross product)

    向量叉乘示意圖:

  • 叉乘正交於兩個原始向量
  • 方向遵循右手法則,(一般默認是右手法則,即:\(\vec x \times \vec y = + \vec z\),但是OpenGL默認是左手法則,即:\(\vec x \times \vec y = - \vec z\)
  • 可用於構建坐標系

1. 叉乘性質

2. 叉乘:笛卡爾法則

3. 圖形學中的叉乘

  • 決定方向:左 or 右

        兩個向量進行叉乘,比如:\(\vec a \times \vec b >0\),所以,\(\vec a\)\(\vec b\)的順時針方向(也為:右邊);\(\vec b \times \vec a <0\),所以,\(\vec b\)\(\vec a\)的逆時針方向(也為:左邊),如果\(\vec b \times \vec a = 0\),那么\(\vec a\)則與\(\vec b\)共線。后期如果更為細致,還可以用在游戲中判斷兩個物體的具體方位,比如以自身正對的方向,判斷敵人是在自己的左上、左下、右上、右下等位置

  • 判斷內部 or 外部

        如上圖,若\(P\)點在三角形內部,則從同一個端點出發的邊(eg:\(\vec{AB}\))與到\(P\)點的向量(eg:\(\vec{AP}\)),按此順序判斷(即邊向量順序連接),則P點只會在三條邊的同一個方向;若在外部P點相對於三個邊的位置將不一致

:即使A、B、C調換順序,按照首尾連接,效果一致。此方法可應用在光線追蹤中。

  • 建立坐標系

        叉乘后的另一個向量必定與原來兩個向量垂直。

(五)標准正交基和坐標系(Orthonormal bases and coordinate frames)

1. 用途
  • 對於表示點、位置、位置非常重要
  • 通常有很多坐標系
    • 全球、本地、世界、模型、模型部分(頭,手,…)
  • 關鍵問題是在這正交基和坐標系之間進行轉換(見Lecture03筆記)
2. 直角坐標系

    定義一個三維直角坐標系\((u,v,w)\)
\(\left\| \vec u \right\| = \left\| \vec v \right\| = \left\| \vec w \right\| = 1\)
\(\vec u \cdot \vec v = \vec v \cdot \vec w = \vec u \cdot \vec w = 0\)
\(\vec w = \vec u \times \vec v\) (右手法則)
\(\vec p = \left( \vec p \cdot \vec u \right) + \left( \vec p \cdot v \right) \vec v + \left( \vec p \cdot \vec w \right) \vec w\)(projection)

二、矩陣(Matrix)

    在圖形學中,廣泛用於變換、旋轉、剪切、縮放等(詳見Lecture03筆記)

  • 矩陣&標量值相乘/相加:每個元素相乘/相加。
  • 矩陣&矩陣相乘:\(\left(M \times N \right) \left( N \times P \right)\),要求前一個的列數 = 后一個矩陣的行數。

矩陣&向量 相乘

  • 把向量當做一個列矩陣\(\left( m \times \right)\)
  • 關於y軸的2D反射

\[\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} -x \\ y \end{pmatrix} \]

1. 矩陣轉置

\[\begin{pmatrix} 1 & 2 \\ 6 & 4 \\ 5 & 6 \end{pmatrix}^T = \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix} \]

-矩陣轉置的性質

\[\left( AB \right)^T = B^TA^T \]

2.單位矩陣和逆變換

\(I_{3 \times 3} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\)

\(AA^{-1} = A^{-1}A = I\)

\(\left( AB \right)^{-1} = B^{-1}A^{-1}\)

3. 矩陣形式中的向量相乘

  • 點乘:

\[\vec a \cdot \vec b = {\vec a}^T \vec b = \begin{pmatrix} x_a & y_a & z_a \end{pmatrix} \begin{pmatrix} x_b \\ y_b \\ z_b \end{pmatrix} = \left(x_ax_b + y_ay_b + z_az_b \right) \]

  • 叉乘:

\[\vec a \times \vec b = A * 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} \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM