Shader編程學習筆記(十四)—— 3D數學基礎2 - 向量


1、引言

  這一篇主要複習中學知識向量的相關知識,涉及知識點如下:

  • 向量
  • 向量的運算
  • 向量的幾何意義

2、向量

2.1、向量

  向量:既有大小又有方向的量稱爲向量。向量是和標量作對比的,標量只有大小沒有方向。向量的大小指的是向量的長度。向量是沒有位置的概念,只有大小各方向。在unity中有以下幾種向量:

  • 2D 向量:(x,y) -> (1,0) (0,1) (-0.5,0)
  • 3D 向量:(x,y,z) -> (1,0,0) (0,1,0) (-0.5,0,0)
  • 4D 向量:(x,y,z,z) -> (1,0,0,1) (0,1,0,1) (-0.5,0,0,1)

這裏的4D向量主要是用來運算矩陣的,這裏在遊戲引擎中我們可以把4D向量叫做齊次向量。

2.2、向量的運算

2.2.1、向量的加法

在這裏插入圖片描述
上圖演示了v1v2\vec{v1} 與\vec{v2} 的加法運算:
v3=v2+v1\vec{v3} = \vec{v2} + \vec{v1}
v3.x=v2.x+v1.x\vec{v3.x} = \vec{v2.x }+ \vec{v1.x}
v3.y=v2.y+v1.y\vec{v3.y} = \vec{v2.y }+ \vec{v1.y}
向量滿足加法的交換律:
a+b=b+a\vec{a} + \vec{b} = \vec{b} + \vec{a}

2.2.2、向量的減法

在這裏插入圖片描述
上圖演示了v1v2\vec{v1} 與\vec{v2} 的減法運算:
v3=v2v1\vec{v3} = \vec{v2} - \vec{v1}
v3.x=v2.xv1.x\vec{v3.x} = \vec{v2.x }- \vec{v1.x}
v3.y=v2.yv1.y\vec{v3.y} = \vec{v2.y }-\vec{v1.y}

2.2.3、向量與標量的乘法

在這裏插入圖片描述

eg: V = (1,2,2)
D = 2
R = v * D = 2 * (1,2,2) = (2,4,4)

2.2.4、向量的單位化

  向量的單位化是指向量的每一個分量除以這個向量的長度得到的向量。單位向量的特點是長度爲1,方向是單位向量的方向。
向量的長度由該向量所有座標的平方和開平方根而計算得出

向量 R = {1,2,2}
R的單位向量就是:12+22+222=9=3\quad \sqrt[2]{1^2 + 2^2 + 2^2} = \quad \sqrt[]{9} = 3

2.2.5、向量的點積

2.2.5.1、向量的點積運算

在這裏插入圖片描述
向量的點積描述的是向量與向量的乘積,eg:

v1 = (1,0)
v2 = (0.5,0.866)
Dot(V1,V2) = v1 * V2
= (1,0) * (0.5,0.866)
= 1 * 0.5 + 0 * 0.866
= 0.5

需要注意的是:

點積的結果是一個標量值

2.2.5.2、向量的點積的幾何意義

點積的幾何意義:

Dot(V1V2)=V1V2cos(θ) Dot(\vec{V1},\vec{V2}) = ||\vec{V1}|| \cdot ||\vec{V2}|| \cdot cos(\theta)
cos(θ)=Dot(V1V2)V1V2 cos(\theta) = \frac{Dot(\vec{V1},\vec{V2})}{||\vec{V1}|| \cdot ||\vec{V2}||}
特別的:
  當 V1V2\vec{V1},\vec{V2}都是單位向量時
cos(θ)=Dot(V1V2)V1V2 cos(\theta) = \frac{Dot(\vec{V1},\vec{V2})}{||\vec{V1}|| \cdot ||\vec{V2}||}
θ=acos(V1V2))=acos(0.5)=60 \theta = acos(\vec{V1},\vec{V2}))=acos(0.5) = 60^\circ

常用三角函數值

$$\sin(\theta)$$$$\cos(\theta)$$
$$0^\circ$$01
$$30^\circ$$$$\frac{1}{2}$$$$\frac{\sqrt[]{3}}{2}$$
$$45^\circ$$$$\frac{\sqrt[]{2}}{2}$$$$\frac{\sqrt[]{2}}{2}$$
$$60^\circ$$$$\frac{\sqrt[]{3}}{2}$$$$\frac{1}{2}$$
$$90^\circ$$10
$$120^\circ$$$$\frac{\sqrt[]{3}}{2}$$$$-\frac{1}{2}$$
$$180^\circ$$0-1
  • 當兩個向量相乘大於0時,兩個向量的夾角小於9090^\circ
  • 當兩個向量相乘小於0時,兩個向量的夾角大於9090^\circ小於180180^\circ
  • 當兩個向量相乘等於0時,兩個向量的夾角等於9090^\circ
  • ab=ba=abcos(θ)\vec{a}\cdot\vec{b} = \vec{b}\cdot\vec{a}=||\vec{a}|| \cdot ||\vec{b}|| \cdot cos(\theta)

2.2.6、向量的叉積

2.2.6.1、向量的叉積計算

有兩個向量:
V1=(1,0,0)\vec{V1} = (1,0,0);
V2=(0,1,0)\vec{V2} = (0,1,0);

叉積公式:
Cross(V1,V2)=x1y1z1×x2y2z2=y1×z2z1×y2z1×x2z2×x1x1×y2y1×x2Cross(\vec{V1},\vec{V2})= \begin {vmatrix}x_1 \\ y_1 \\ z_1 \\\end{vmatrix} \times\begin {vmatrix}x_2 \\ y_2 \\ z_2 \\\end{vmatrix} =\begin {vmatrix}y_1 \times z_2 - z_1 \times y_2 \\ z_1 \times x_2 - z_2 \times x_1 \\x_1 \times y_2 - y_1 \times x_2 \\\end{vmatrix}

2.2.6.2、向量的叉積的幾何意義

eg:
在這裏插入圖片描述
100×010=0×00×10×01×01×00×0=001 \begin {vmatrix}1 \\ 0 \\ 0 \\\end{vmatrix} \times\begin {vmatrix}0 \\ 1 \\ 0 \\\end{vmatrix} =\begin {vmatrix}0 \times 0 - 0 \times1 \\ 0 \times 0 - 1 \times 0 \\1\times 0 - 0 \times 0 \\\end{vmatrix}= \begin {vmatrix}0 \\ 0 \\ 1 \\\end{vmatrix}
由上圖中的U×V=N\vec{U}\times\vec{V}= \vec{N}我們可以看到N\vec{N}U\vec{U}V\vec{V}都垂直。

兩個向量的叉積可以得到一個同時垂直於這兩個向量的新向量,這個新向量垂直於這兩個向量所在的平面,這個向量就是這個平面的法向量!

兩個向量的叉積不滿足交換律:
U×V=V×U\vec{U}\times\vec{V}=-\vec{V}\times\vec{U}

3、結束語


The End
  好了,今天的分享就到這裏,如有不足之處,還望大家及時指正,隨時歡迎探討交流!!!


喜歡的朋友們,請幫頂、點贊、評論!您的肯定是我寫作的不竭動力!

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