《unity shader 入門精要》讀書筆記3 - 數學基礎

一 笛卡爾座標系

三維笛卡兒座標系中,我們需要定義3個座標軸和一個原點,
在這裏插入圖片描述
這3個座標軸也被稱爲是該座標系的基矢量( basis vector)
通常情況下,這3個座標軸之間是互相垂直的,且長度爲1,這樣的基矢量被稱爲標準正交基( orthonormal basis)

笛卡爾座標系分爲:左手座標系和右手座標系

如圖:
在這裏插入圖片描述
左右手座標系之間是可以進行互相轉換的。最簡單的方法就是把其中一個軸反轉,並保持其他兩個軸不變。
Unity使用的是左手座標系

二 矢量:

矢量不能和標量做加減運行,可以做乘除運算。

公式非常簡單,我們只需要把每個分量做對應的運算即可:
乘法:
在這裏插入圖片描述
除法:
在這裏插入圖片描述

矢量的加法和減法:

我們可以對兩個失量進行相加或相減,其結果是一個相同維度的新矢量
我們只需要把兩個矢量的對應分量進行相加或相減即可。公式如下:
在這裏插入圖片描述

矢量的模:

v=vx2+vy2+vz2|v| = \sqrt{v^2_x}+\sqrt{v^2_y}+\sqrt{v^2_z}

單位矢量:

單位矢量指的是那些模爲1的矢量。單位矢量也被稱爲被歸一化的矢量( normalized vector)
對任何給定的非零矢量,把它轉換成單位矢量的過程就被稱爲歸一化( normalization)

爲了對矢量進行歸一化,我們可以用矢量的模除以該矢量來得到。
公式如下:
在這裏插入圖片描述
零矢量(即矢量的每個分量值都爲0,如v=(0,0,0) 是不可以被歸一化的。這是因爲做除法運算時分母不能爲0。

矢量的點積

矢量的乘法有兩種最常用的種類:點積( dot product.,也被稱爲內積, inner product)又積( cross product,也被稱爲外積, outer product)

點積公式一:

ab=(ax,ay,az)(bx,by,bz)=axbx+ayby+azbza\,·\,b = (a_x,a_y,a_z)\,·\,(b_x,b_y,b_z)\,=a_xb_x+a_yb_y+a_zb_z

矢量的點積滿足交換律,即:

ab=baa\,·\,b =b\,·\,a

點積性質:

一:點積可結合標量乘法:
在這裏插入圖片描述
二:點積可結合矢量加減法:
在這裏插入圖片描述
三:一個矢量和本身點積的結果是該矢量的模的平方:

可以利用該性質求矢量的模在這裏插入圖片描述

點積公式二:

ab=abcosθa·b=|a||b|cos{\theta}

矢量的叉積

另一個重要的矢量運算就是又積( cross product),也被稱爲外積( outer product)
與點積不同的是,矢量叉積的結果仍是一個矢量,而非標量和點積類似,又積的名稱來源於它的符號:a×b。同樣,這個又號也是不可省略的。

那麼,又積到底有什麼用呢?
最常見的一個應用就是計算垂直於一個平面、三角形的矢量。
另外,還可以用於判斷三角面片的朝向

公式如下:

公式一:

在這裏插入圖片描述
叉積不滿足交換律和結合律,即:
在這裏插入圖片描述
在這裏插入圖片描述

公式二:

在這裏插入圖片描述

三 矩陣:

不幸的是,沒有人能告訴你母體( matrix)究竟是什麼。你需要自己去發現它。

一一電影《黑客帝國》(英文名: The Matrix

定義:

它是由m×n個標量組成的長方形數組。

如下就是一個 2X2 的矩陣:
[1234]\begin{bmatrix}1 & 2\\\\3 &4\end{bmatrix}

我們可以用矩陣來表示矢量。
矢量可以看成是n x 1列矩陣( columnmatrix)
1Xn行矩陣( row matrix),其中n對應了矢量的維度。

行矩陣:
[123]\begin{bmatrix}1 & 2 & 3\end{bmatrix}
列矩陣:
[123]\begin{bmatrix}1 \\\\ 2 \\\\ 3\end{bmatrix}

矩陣運算:

1.矩陣和標量的乘法

矩陣也可以和標量相乘,它的結果仍然是一個相同維度的矩陣。
以3×3的矩陣爲例,其公式如下:
在這裏插入圖片描述

2.矩陣和矩陣的乘法

一個r×n的矩陣A和一個n×c的矩陣B相乘,它們的結果AB將會是一個rXc大小的矩陣。
第一個矩陣的列數必須和第二個矩陣的行數相同,它們相乘得到的矩陣的行數是第一個矩陣的行數,而列數是第二個矩陣的列數。

例如,如果矩陣A的維度是4×3 矩陣B的維度是3×6,那麼AB的維度就是4×6。

性質:
一:矩陣乘法不滿足交換律。
ABBAAB\not=BA
二:矩陣乘法滿足結合律。
(AB)C=A(BC)(AB)C=A(BC)

特殊矩陣

1.方塊矩陣

方塊矩陣( square matrix),簡稱方陣,是指那些行和列數目相等的矩陣。在三維渲染裏,最常使用的就是3×3和4×4的方陣。
對角元素( diagonal elements)。方陣的對角元素指的是行號和列號相等的元素。
如果一個矩陣除了對角元素外的所有元素都爲0,那麼這個矩陣就叫做對角矩陣( diagonalmatrix)

例如,下面就是一個4×4的對角矩陣
在這裏插入圖片描述

2.單位矩陣

一個特殊的對角矩陣是單位矩陣( identity matrix),用 InI_n 來表示。
一個3x3的單位矩陣如下:
在這裏插入圖片描述
任何矩陣和它相乘都等於它自身,
MI=IM=MMI=IM=M

3.轉置矩陣

**轉置矩陣( transposed matrix)**實際是對原矩陣的一種運算,即轉置運算。只需要把原矩陣翻轉一下即可。MTM^T表示。

MijT=MjiM_{ij}^T=M_{ji}

如:
在這裏插入圖片描述
性質:

  1. 矩陣轉置的轉置等於原矩陣:
    (MT)T=M{(M^T)}^T=M
  2. 矩陣串接的轉置,等於反向串接各個矩陣的轉置。
    (AB)T=ATBT{(AB)}^T=A^TB^T

4.逆矩陣

不是所有的矩陣都有逆矩陣,第一個前提就是,該矩陣必須是一個方陣。
給定一個方陣MM,它的逆矩陣用M1M^{-1}來表示。
逆矩陣最重要的性質就是,如果我們把MMM1M^{-1}相乘,那麼它們的結果將會是一個單位矩陣,即:
MM1=M1M=I{MM}^{-1}={M}^{-1}M=I
如果一個矩陣的行列式不爲0,那麼它就是可逆的

性質:

  1. 逆矩陣的逆矩陣是原矩陣本身
    (M1)1=M{(M^{-1})}^{-1}=M
  2. 單位矩陣的逆矩陣是它本身。
    I1=II^{-1}=I
  3. 轉置矩陣的逆矩陣是逆矩陣的轉置。
    (MT)1=(M1)T{(M^{T})}^{-1}={(M^{-1})}^{T}
  4. 矩陣串接相乘後的逆矩陣等於反向串接各個矩陣的逆矩陣。
    (AB)1=A1B1{(AB)}^{-1}=A^{-1}B^{-1}

5.正交矩陣

另一個特殊的方陣是正交矩陣( orthogonal matrix)。正交是矩陣的一種屬性。
如果一個方陣M和它的轉置矩陣的乘積是單位矩陣的話,我們就說這個矩陣是正交的( orthogonal)。反過來也是成立的。

MMT=MTM=IMM^T=M^TM=I

一個重要的性質,即如果一個矩陣是正交的,那麼它的轉置矩陣和逆矩陣是一樣的。

MT=M1M^T=M^{-1}

在三維變換中我們經常會需要使用逆矩陣來求解反向的變換。

四 矩陣的幾何意義(變換):

變換( transform) 指的是我們把一些數據,如點、方向矢量甚至是顏色等,通過某種方式進行轉換的過程。

1.線性變換( linear transform )

線性變換 指的是那些可以保留矢量加和標量乘的變換,公式:
      f(x)+f(x)=f(x+y)\,\,\,\,\,\,f(x)+f(x)=f(x+y)
      kf(x)=f(kx)\,\,\,\,\,\,kf(x)=f(kx)

線性變換包括:旋轉,縮放 ,錯切,鏡像,正交投影

注意:平移不是線性變換

2.仿射変換( affine transform)

仿射変換 就是合併線性變換和平移變換的變換類型。

仿射變換可以使用一個4x4的矩陣來表示,爲此,我們需要把矢量擴展到四維空間下,這就是齊次座標空間( homogeneous space.)

3.齊次座標(homogeneous coordinate)

由於3x3矩陣不能表示平移,所以爲了計算方便,就把其擴展到4x4矩陣,並且還有把原來的三維矢量轉換成四維矢量,也就是齊次座標

分解基礎變換矩陣
我們把表示純平移,旋轉,縮放的變換矩陣叫做基礎變換矩陣 ,可以分解爲:
在這裏插入圖片描述
其中,左上角的矩陣M3×3M_{3×3}用於表示旋轉和縮放,t3×1t_{3×1}用於表示平移,01×30_{1×3}是零矩陣。

4.平移矩陣

把點x,y,z(x,y,z)在空間平移了tx,ty,tz(t_x,t_y,t_z)個單位
在這裏插入圖片描述

5.縮放矩陣

把點x,y,z(x,y,z) 在空間縮放 kk 倍。
如果縮放係數 kx=ky=kzk_x=k_y=k_z 我們稱這樣的縮放爲 統一縮放,否則爲非統一縮放

在這裏插入圖片描述

6.旋轉矩陣

繞 X 軸旋轉 θ\theta 度:
在這裏插入圖片描述

繞 Y 軸旋轉 θ\theta 度:
在這裏插入圖片描述

繞 Z 軸旋轉 θ\theta 度:
在這裏插入圖片描述

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