線性代數基礎知識
此處只補充部份線代內容,包括點乘、叉乘和正交。
向量點乘 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:
In 3d Cartesian Coordinates:
用點乘獲得向量投影:
- \(\vec{b}_{\bot}\)表示向量\(\vec{b}\)在向量向量\(\vec{a}\)上的投影
- \(\vec{b}_{\bot}\)方向一定和\(\vec{a}\)的單位向量\(\hat{a}\)同向或反向:\(\vec{b}_{\bot} = k\hat{a}\)
- \(k\)具體值如下:
點乘在圖形學裡的一些應用:
-
測量兩個向量的方向差
用點乘公式獲得餘弦角。
-
分解向量:
利用投影將向量\(\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\)。
-
判斷兩個向量是否是前向/反向:
點乘的結果是正數,根據公式可知餘弦角小於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{b}\)在向量\(\vec{a}\)的左側還是右側:
利用叉乘向量方向遵循右手定則來實現
-
判斷一個點\(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空間中任意三個單位正交向量,滿足:
都可以作為一組正交座標系。
任意向量\(\vec{p}\)都可以被一組正交座標系唯一表示:
其中\(\vec{p} \cdot \vec{u}\)表示向量\(\vec{p}\)在單位向量\(\vec{u}\)上的投影。