文章目錄
- 前言
- 正文
- 向量
- 什么是向量?
- 向量涉及哪些常見計算?
- 1、取模
- 2、歸一化
- 3、向量加法
- 4、向量減法
- 5、向量與標量乘
- 6、向量點乘(內積)
- 7、向量投影
- 向量有哪些基本應用?
- 矩陣
- 什么是矩陣?
- 矩陣涉及哪些常見計算?
- 1、矩陣加法
- 2、矩陣減法
- 3、矩陣乘法
- 4、矩陣和向量乘法
- 矩陣有哪些基本應用?
- 結尾:喜歡的小伙伴可以點點關注+贊哦
前言
前面發布的【圖形學初識】系列文章,坐標基本上都指代屏幕空間的二維坐標,遲遲沒有進入真正的3維世界。為了真正進入三維世界,就需要存在一種工具將三維坐標映射為二維坐標,這個工具就涉及到數學中的線性代數中的一些概念,如:矩陣、向量、行列式等等!本章節就針對這些概念和相關計算做說明!
正文
向量
什么是向量?
概念:向量的相對概念是標量,以下是兩者的對比:
向量: 既有大小,又有方向;
標量: 只有大小,沒有方向;
舉個例子:
向量: 速度、加速度、力等
標量: 顏色、溫度、質量等
基本表示: a ? = A B ? = B ? A \vec{a} = \vec{AB} = B - A a=AB=B?A 。一個不太準確,但又十分形象的圖形表示如下圖:
a ? \vec{a} a 的大小:AB之間的距離
a ? \vec{a} a 的方向:A指向B的這個方向
三維空間下,假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) A = (x_0, y_0, z_0),B = (x_1, y_1, z_1) A=(x0?,y0?,z0?),B=(x1?,y1?,z1?),則 A B ? = B ? A = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) \vec{AB} = B - A = (x_1 - x_0, y_1 - y_0, z_1 - z_0) AB=B?A=(x1??x0?,y1??y0?,z1??z0?)?
本質上,上述的坐標表示法,其實是針對三維空間正交向量基的i、j、k的加權組合,但是因為目前還沒有講向量乘法、向量加法,所以沒法解釋,可以直觀的認為就是這樣做!
向量涉及哪些常見計算?
1、取模
假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0?,y0?,z0?),B=(x1?,y1?,z1?),AB=(x1??x0?,y1??y0?,z1??z0?),記 ∥ A B ? ∥ \|\vec{AB}\| ∥AB∥ 是 A B ? \vec{AB} AB 模,本質就是向量的長度
計算公式如下:
∥ A B ? ∥ = ( x 1 ? x 0 ) 2 + ( y 1 ? y 0 ) 2 + ( z 1 ? z 0 ) 2 \|\vec{AB}\| = \sqrt{(x_1-x_0)^2 + (y_1-y_0)^2 + (z_1-z_0)^2} ∥AB∥=(x1??x0?)2+(y1??y0?)2+(z1??z0?)2?
2、歸一化
假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0?,y0?,z0?),B=(x1?,y1?,z1?),AB=(x1??x0?,y1??y0?,z1??z0?),記 A B ^ \hat{AB} AB^ 是 A B ? \vec{AB} AB 的歸一化向量
歸一化本質:計算一個方向不變,長度變為1的對應向量
計算公式如下:
A B ^ = A B ? ∥ A B ? ∥ \hat{AB} = \frac{\vec{AB}}{\|\vec{AB}\|} AB^=∥AB∥AB?
3、向量加法
假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a=(x0?,y0?,z0?),b=(x1?,y1?,z1?) 那么 c ? = a + b ? = ( x 1 + x 0 , y 1 + y 0 , z 1 + z 0 ) \vec{c} = \vec{a + b} = (x_1+x_0,y_1+y_0,z_1+z_0) c=a+b?=(x1?+x0?,y1?+y0?,z1?+z0?)
代數解釋:對應坐標相加
幾何解釋:
(1)兩向量移動到統一起點,構成平行四邊形,副對角線即為加和結果
(2)把b向量移動到a向量的末尾,從a起點連接b終點,得到的向量即為加和結果
4、向量減法
假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a=(x0?,y0?,z0?),b=(x1?,y1?,z1?) 那么 c ? = b ? a ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) \vec{c} = \vec{b - a} = (x_1-x_0,y_1-y_0,z_1-z_0) c=b?a?=(x1??x0?,y1??y0?,z1??z0?)
代數解釋:對應坐標相減
幾何解釋:向量a的末端連接向量b末端的一個新向量
5、向量與標量乘
假設 a ? = ( x 0 , y 0 , z 0 ) \vec{a} = (x_0,y_0,z_0) a=(x0?,y0?,z0?) 那么 c ? = k a ? = ( k x 0 , k y 0 , k z 0 ) \vec{c} = k\vec{a} = (kx_0,ky_0,kz_0) c=ka=(kx0?,ky0?,kz0?)
代數解釋:對應坐標乘標量k
幾何解釋:當 k ! = 0 k\ !=0 k?!=0,向量等比例調整長度,k為縮放比例
6、向量點乘(內積)
假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a=(x0?,y0?,z0?),b=(x1?,y1?,z1?) 那么記點乘 c ? = a ? ? b ? = x 1 x 0 + y 1 y 0 + z 1 z 0 \vec{c} = \vec{a} \cdot \vec{b} = x_1x_0 + y_1y_0+z_1z_0 c=a?b=x1?x0?+y1?y0?+z1?z0???
注意:點乘的結果是一個標量
代數解釋:對應坐標相乘然后相加
幾何解釋: a ^ ? b ^ = ∥ a ? ∥ ∥ b ? ∥ cos ? θ \hat a \cdot \hat b = \|\vec{a}\|\|\vec{b}\|\cos \theta a^?b^=∥a∥∥b∥cosθ, 如下圖所示
7、向量投影
假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a=(x0?,y0?,z0?),b=(x1?,y1?,z1?) 那么記 a ? \vec a a在 b ? \vec b b上的投影為 a p r j b ? \vec{a_{prjb}} aprjb??? ,計算公式如下:
a p r j b ? = b ^ ? ∥ a ⊥ ? ∥ = b ? ∥ b ? ∥ ? cos ? θ ? ∥ a ? ∥ = b ? ∥ b ? ∥ ? a ? ? b ? ∥ a ? ∥ ∥ b ? ∥ ? ∥ a ? ∥ = a ? ? b ? ∥ b ? ∥ 2 b ? \begin{align} \vec{a_{prjb}} &= \hat b * \|\vec{a_{\perp}}\|\\ &=\frac{\vec b}{\|\vec b\|} * \cos \theta * \|\vec a\|\\ &=\frac{\vec b}{\|\vec b\|} * \frac{\vec a \cdot \vec b}{\|\vec a\| \|\vec b\|} * \|\vec a\|\\ &=\frac{\vec a \cdot \vec b}{\|\vec b\|^2}\vec b \end{align} aprjb???=b^?∥a⊥??∥=∥b∥b??cosθ?∥a∥=∥b∥b??∥a∥∥b∥a?b??∥a∥=∥b∥2a?b?b??
假設被投影的向量為單位向量,則結果可以簡化: a p r j b ? = ( a ? ? b ? ) b ? \vec{a_{prjb}} = (\vec a \cdot \vec b)\ \vec b aprjb??=(a?b)?b
向量有哪些基本應用?
(1)判斷兩向量是否同向(重要)
利用向量點乘的結果判斷,如果結果為負數,則不是同向,如果結果為正數,則同向。
(2)計算投影
? 略(上述已給出計算公式)
(3)計算夾角
? 略(也是利用點乘,計算 cos ? θ \cos \theta cosθ,從而計算出夾角)
矩陣
什么是矩陣?
矩陣本質就是一個二維數組,有行、有列,其中存儲許多數字,每個數字叫做矩陣的元素。第i行、j列的記作 a i j a_{ij} aij?,當行和列相等時,我們叫做方陣!
如下圖就是3x3的方陣,,我們常記作矩陣為 M M M :
[ 10 12 30 ? 1 3 0 2 96 123 ] \begin{bmatrix} 10 & 12 & 30 \\ -1 & 3 & 0 \\ 2 & 96 & 123\\ \end{bmatrix} ?10?12?12396?300123? ?
當方陣的只有主對角線元素為1,其余所有元素為0,我們記矩陣為單位矩陣,記 I n I_n In?,如下圖:
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} ?100?010?001? ?
矩陣涉及哪些常見計算?
1、矩陣加法
前提:兩矩陣行列數相同
計算規則:對應元素相加
2、矩陣減法
前提:兩矩陣行列數相同
計算規則:對應元素相減
3、矩陣乘法
前提:矩陣 A A A 左乘矩陣 B B B ,要求A的列數與B的行數相同
計算規則:假設矩陣 C C C 的每個元素為 c i j c_{ij} cij? ,矩陣 A A A的每個元素為 a i j a_{ij} aij? ,矩陣 B B B的每個元素為 b i j b_{ij} bij? ,如果 C = A B C = AB C=AB
則 C C C的每個元素:
c i j = ( a i 0 a i 1 a i 2 . . . a i n ) ? ( b 0 j b 1 j b 2 j . . . b n j ) c_{ij} = \begin{pmatrix} a_{i0}\\ a_{i1}\\ a_{i2}\\ ...\\ a_{in}\\ \end{pmatrix} \cdot \begin{pmatrix} b_{0j}\\ b_{1j}\\ b_{2j}\\ ...\\ b_{nj}\\ \end{pmatrix} cij?= ?ai0?ai1?ai2?...ain?? ?? ?b0j?b1j?b2j?...bnj?? ?
給個示例圖:
幾個常見的乘法性質:
( A B ) C = A ( B C ) A ( B + C ) = A B + A C ( A + B ) C = A C + B C (AB)C = A(BC)\\ A(B+C) = AB + AC\\ (A+B)C = AC + BC (AB)C=A(BC)A(B+C)=AB+AC(A+B)C=AC+BC
注意: 矩陣乘法沒有交換律,一般來說: A B ! = B A AB\ != BA AB?!=BA
4、矩陣和向量乘法
我們可以將向量理解為列或者行為1的矩陣,這樣問題就轉化為矩陣的乘法類似,不多贅述!
如下圖:
矩陣有哪些基本應用?
無所不能,在圖形學領域最重要的概念就是MVP變換,本質上就是對應三個矩陣!這方面內容會在后面章節詳細講解哦!大家拭目以待!
結尾:喜歡的小伙伴可以點點關注+贊哦
希望對各位小伙伴能夠有所幫助哦,永遠在學習的道路上伴你而行, 我是航火火,火一般的男人!