點積和叉積在計算機圖形學中,是最爲基礎且重要的概念,初學者弄清它的概念的應用,是很重要的。最後一節,是爲了加強理解記錄,如果不看也是可以的,大家選擇觀看,有興趣可以去看原視頻,結合我的筆記。
前置知識
-
列向量
以下均採用列向量的表示方法,和線性代數書本上的行向量不同,採用列向量表示,則表達爲列向量左乘矩陣,只是定義的不同,其他含義沒有什麼不同。列向量寫法如下:
a=⎝⎛xyz⎠⎞
-
單位化
將向量的各分量除以向量的模即得單位向量,單位指模爲1的向量。
-
向量加減法的幾何意義
-
行列式
行列式在數學中,是一個函數,其定義域爲det的矩陣A,取值爲一個標量,寫作det(A)或 | A | 。行列式可以看做是有向面積(二維)或體積(三維)的概念在一般的歐幾里得空間中的推廣。
點積
點積在數學中,又稱數量積(dot product; scalar product),是指接受在實數R上的兩個向量並返回一個實數值標量的二元運算。它是歐幾里得空間的標準內積。點積的結果是一個數。
a⋅b=∣a∣∣b∣cosθ
相當於a向量的轉置矩陣乘以向量b:
a⋅b=aTb
以二維向量爲例:
a⋅b=(yaxa)T(ybxa)=xaxb+yayb
幾何意義
a向量在b向量上投影的長度 乘以 b向量的長度(模)就是 點積的結果。
點乘是存在交換律的,所以也等同於:
b向量在a向量上投影的長度 乘以 a向量的長度就是 點積的結果。
在圖形學的應用
-
求兩個向量的夾角
當a與b都是單位向量(單位化),兩個向量點積就是cosθ,在通過arccos 就可以求出夾角。
-
求投影
將a單位化,a⋅b就是b在a上的投影長度。
《計算機圖形學》書上有這麼一個舉例,利用投影將向量w分解成兩個向量和:
-
比較兩個向量的接近程度(方向上)
也就是向量是否兩個向量間的夾角大小,在聚光燈的效果計算中,可以根據點積來得到光照效果,如果點積越大,說明夾角越小,則物體離光照的軸線越近,光照越強。
也常會用來判斷兩向量是否爲同方向:
舉個例子
判斷一個點是都在某圖形內:
叉積
向量積,數學中又稱外積、叉積,物理中稱矢積、叉乘,是一種在向量空間中向量的二元運算。與點積不同,它的運算結果是一個向量而不是一個標量。並且兩個向量的叉積與這兩個向量和垂直。
∣∣∣v×w∣∣∣=∣v∣∣w∣sinθ
這隻確定了叉積的長度,衆所周知向量有長度,還有方向的,方向爲垂直於兩個向量的方向,但是呢,垂直方向有兩個。
這裏我們採用右手螺旋定則確定方向。v到w的方向就是右手四指彎曲的方向,大拇指的方向就是叉積的方向。
二維向量的叉積是個標量,看起來違背了定義,先假設二維向量得出來的叉積是z,如果把二維向量看作成z軸值恆爲0的三維向量,它們的叉積就(0,0,z)T,三維空間被壓縮成了二維,叉積就只是一個標量了。
v⋅w=xvyw−yvxw
三維向量的叉積的結果是個向量:
v⋅w=⎝⎛yvzw−zvywzvxw−xvzwxvyw−yvxw⎠⎞
這個看起來很難記憶,我們隨後再講解。444額方法
幾何意義
在二維空間,兩個向量叉積就是兩向量形成的平行四邊形的面積,正負要引入Z軸,由右手螺旋定則確定,如果大拇指指向Z正軸就爲正,反之爲負;
在三維空間,兩個向量叉積就是垂直於兩向量形成的平面的向量(稱爲法向量)採用右手螺旋定則確定方向。v到w的方向就是右手四指彎曲的方向,大拇指的方向就是叉積的方向。
座標系的問題
如果我們已知x座標軸和y座標軸,可以推導出z座標軸。可能大家都聽說過有左手座標系和右手座標系這兩種說法,可以用x、y軸叉積與z軸的關係確定。
右手座標系:
x×y=z
左手座標系:
x×y=−z
在圖形學的應用
- 二維空間判斷左右
- 三維空間求法向量
法向量在計算圖形學的應用很廣泛,很多地方都會利用到,比如求已知入射角度OB求一個平面的反射角度BP。取平面上不共線的三個點ABC,求得法線
AB×AC=Z(法線)
BP=OB−Z
再舉個例子
判斷一個點是都在某圖形內
以線性變換去看點乘和叉乘
這部分我是基於B站的一部分的視頻總結的,如果覺得作者講解不夠好,可以去看原視頻。
點乘
先來看兩向量的點乘另一種求法,a向量的轉置矩陣乘以向量b:
a⋅b=aTb
以二維空間爲例,定義兩個基向量組成的矩陣
(21)=2i+j
點乘就是從二維空間到數軸的線性變換,將空間投影到給定的數軸來定義。
aT矩陣作用就是,將基變量在a上投影爲兩個數字,而不是向量,將此作爲基變量去做線性變換,從而進行空間壓縮。
叉乘
截了視頻的兩張圖,
⎣⎡xyz⎦⎤表示一個隨機變量,也可理解爲一個爲向量的變量。
上圖是一個變量爲向量的函數。根據v w 可以求常量 p
有沒有覺得p與u×v 叉積一模一樣,我們從幾何空間聯繫下它們。
先看左邊,p與隨機變量的點積,其實就隨機變量在p的投影長度,再乘以p的模。
再看看右邊,是一個行列式,表示這三個向量組成的立方體的體積大小。
我們再回顧下,體積的求法,高✖️底面積(u v 組成底面)
高爲隨機變量在平面垂直方向的投影長度。
然後回想下,叉積的定義,模長爲兩向量組成的平面面積,且爲這個平面的法線。
p 和 這個叉積是不是就聯繫上了。
字醜的那些圖都是我畫的,除了一張小手手,請各位見諒,最後感謝我的首席插畫師 yc君 畫的那種小手手的插圖,O(∩_∩)O哈哈~。