點積和叉積在計算機圖形學的應用

點積和叉積在計算機圖形學中,是最爲基礎且重要的概念,初學者弄清它的概念的應用,是很重要的。最後一節,是爲了加強理解記錄,如果不看也是可以的,大家選擇觀看,有興趣可以去看原視頻,結合我的筆記。

前置知識

  1. 列向量
    以下均採用列向量的表示方法,和線性代數書本上的行向量不同,採用列向量表示,則表達爲列向量左乘矩陣,只是定義的不同,其他含義沒有什麼不同。列向量寫法如下:
    a=(xyz) \overrightarrow{a} = \left( \begin{gathered} \begin{matrix} x \\ y \\ z \end{matrix} \end{gathered} \right)

  2. 單位化
    將向量的各分量除以向量的模即得單位向量,單位指模爲1的向量。

  3. 向量加減法的幾何意義
    在這裏插入圖片描述

  4. 行列式
    行列式在數學中,是一個函數,其定義域爲det的矩陣A,取值爲一個標量,寫作det(A)或 | A | 。行列式可以看做是有向面積(二維)或體積(三維)的概念在一般的歐幾里得空間中的推廣。

點積

點積在數學中,又稱數量積(dot product; scalar product),是指接受在實數R上的兩個向量並返回一個實數值標量的二元運算。它是歐幾里得空間的標準內積。點積的結果是一個數。

ab=abcosθ \overrightarrow{a} \cdot \overrightarrow{b} = \left| a \right| \left| b \right| cos {\theta}

相當於a向量的轉置矩陣乘以向量b:
ab=aTb \overrightarrow{a} \cdot \overrightarrow{b} = \overrightarrow{a}^T \overrightarrow{b}

以二維向量爲例:
ab=(xaya)T(xayb)=xaxb+yayb \overrightarrow{a} \cdot \overrightarrow{b} = {x_{a}\choose y_{a}}^T {x_{a}\choose y_{b}} = x_{a}x_{b} + y_{a}y_{b}

在這裏插入圖片描述

幾何意義

在這裏插入圖片描述
a向量在b向量上投影的長度 乘以 b向量的長度(模)就是 點積的結果。
點乘是存在交換律的,所以也等同於:
b向量在a向量上投影的長度 乘以 a向量的長度就是 點積的結果。

在圖形學的應用

  1. 求兩個向量的夾角
    a\overrightarrow{a}b\overrightarrow{b}都是單位向量(單位化),兩個向量點積就是cosθ\cos {\theta},在通過arccos\arccos 就可以求出夾角。

  2. 求投影
    a\overrightarrow{a}單位化,ab\overrightarrow{a} \cdot \overrightarrow{b}就是b\overrightarrow{b}a\overrightarrow{a}上的投影長度。
    《計算機圖形學》書上有這麼一個舉例,利用投影將向量w分解成兩個向量和:
    在這裏插入圖片描述

  3. 比較兩個向量的接近程度(方向上)
    也就是向量是否兩個向量間的夾角大小,在聚光燈的效果計算中,可以根據點積來得到光照效果,如果點積越大,說明夾角越小,則物體離光照的軸線越近,光照越強。
    也常會用來判斷兩向量是否爲同方向:
    在這裏插入圖片描述

舉個例子

判斷一個點是都在某圖形內:
在這裏插入圖片描述

叉積

向量積,數學中又稱外積、叉積,物理中稱矢積、叉乘,是一種在向量空間中向量的二元運算。與點積不同,它的運算結果是一個向量而不是一個標量。並且兩個向量的叉積與這兩個向量和垂直。
v×w=vwsinθ \left| \overrightarrow{v} \times \overrightarrow{w} \right| = \left| v \right| \left| w \right| sin {\theta}
這隻確定了叉積的長度,衆所周知向量有長度,還有方向的,方向爲垂直於兩個向量的方向,但是呢,垂直方向有兩個。
這裏我們採用右手螺旋定則確定方向。v到w的方向就是右手四指彎曲的方向,大拇指的方向就是叉積的方向。
在這裏插入圖片描述

二維向量的叉積是個標量,看起來違背了定義,先假設二維向量得出來的叉積是z,如果把二維向量看作成z軸值恆爲0的三維向量,它們的叉積就(0,0,z)T(0,0,z)^T,三維空間被壓縮成了二維,叉積就只是一個標量了。

vw=xvywyvxw \overrightarrow{v} \cdot \overrightarrow{w} = x_vy_w - y_vx_w

三維向量的叉積的結果是個向量:

vw=(yvzwzvywzvxwxvzwxvywyvxw) \overrightarrow{v} \cdot \overrightarrow{w} = \left( \begin{gathered} \begin{matrix} y_v z_w - z_v y_w \\ z_vx_w - x_vz_w \\ x_vy_w - y_vx_w \end{matrix} \end{gathered} \right)
這個看起來很難記憶,我們隨後再講解。444額方法
在這裏插入圖片描述

幾何意義

在二維空間,兩個向量叉積就是兩向量形成的平行四邊形的面積,正負要引入Z軸,由右手螺旋定則確定,如果大拇指指向Z正軸就爲正,反之爲負;
在三維空間,兩個向量叉積就是垂直於兩向量形成的平面的向量(稱爲法向量)採用右手螺旋定則確定方向。v到w的方向就是右手四指彎曲的方向,大拇指的方向就是叉積的方向。

座標系的問題

如果我們已知x座標軸和y座標軸,可以推導出z座標軸。可能大家都聽說過有左手座標系和右手座標系這兩種說法,可以用x、y軸叉積與z軸的關係確定。
右手座標系:
x×y=z \overrightarrow{x} \times \overrightarrow{y} = \overrightarrow{z}
左手座標系:
x×y=z \overrightarrow{x} \times \overrightarrow{y} = -\overrightarrow{z}

在圖形學的應用

  1. 二維空間判斷左右

在這裏插入圖片描述

  1. 三維空間求法向量
    法向量在計算圖形學的應用很廣泛,很多地方都會利用到,比如求已知入射角度OB\overrightarrow{OB}求一個平面的反射角度BP\overrightarrow{BP}。取平面上不共線的三個點ABC,求得法線
    AB×AC=Z \overrightarrow{AB} \times \overrightarrow{AC} = \overrightarrow{Z} (法線)

在這裏插入圖片描述BP=OBZ \overrightarrow{BP} = \overrightarrow{OB} - \overrightarrow{Z}

再舉個例子

判斷一個點是都在某圖形內
在這裏插入圖片描述

以線性變換去看點乘和叉乘

這部分我是基於B站的一部分的視頻總結的,如果覺得作者講解不夠好,可以去看原視頻

點乘

先來看兩向量的點乘另一種求法,a向量的轉置矩陣乘以向量b:
ab=aTb \overrightarrow{a} \cdot \overrightarrow{b} = \overrightarrow{a}^T \overrightarrow{b}
以二維空間爲例,定義兩個基向量組成的矩陣
在這裏插入圖片描述
(21)=2i+j \left( \begin{array}{c} 2 \\ 1 \end{array} \right)= 2\overrightarrow{i} + \overrightarrow{j}
點乘就是從二維空間到數軸的線性變換,將空間投影到給定的數軸來定義。
aT\overrightarrow{a}^T矩陣作用就是,將基變量在a\overrightarrow{a}上投影爲兩個數字,而不是向量,將此作爲基變量去做線性變換,從而進行空間壓縮。

叉乘

截了視頻的兩張圖,
在這裏插入圖片描述
[xyz]\left[ \begin{array}{c} x \\ y \\ z\end{array} \right]表示一個隨機變量,也可理解爲一個爲向量的變量。
上圖是一個變量爲向量的函數。根據v w 可以求常量 p
在這裏插入圖片描述
有沒有覺得p\overrightarrow{p}u×v\overrightarrow{u} \times \overrightarrow{v} 叉積一模一樣,我們從幾何空間聯繫下它們。

先看左邊,p\overrightarrow{p}與隨機變量的點積,其實就隨機變量在p\overrightarrow{p}的投影長度,再乘以p\overrightarrow{p}的模。

再看看右邊,是一個行列式,表示這三個向量組成的立方體的體積大小。

我們再回顧下,體積的求法,高✖️底面積(u v 組成底面)

高爲隨機變量在平面垂直方向的投影長度。

然後回想下,叉積的定義,模長爲兩向量組成的平面面積,且爲這個平面的法線。

p\overrightarrow{p} 和 這個叉積是不是就聯繫上了。

字醜的那些圖都是我畫的,除了一張小手手,請各位見諒,最後感謝我的首席插畫師 yc君 畫的那種小手手的插圖,O(∩_∩)O哈哈~。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章