您當前的位置:首頁 > 攝影

向量運算與應用

作者:由 王江榮 發表于 攝影時間:2021-04-03

什麼是向量

向量指具有大小和方向的量

,一般記做:

a

\vec{a}

\vec{AB}

,同時也可以用數對的形式表示,例如:(x, y) ,(7,8,9)

向量的矩陣

表示:

\vec{a} = \begin{bmatrix} x \\y\end{bmatrix}

\vec{a}=\begin{bmatrix} x\\ y\\ z \end{bmatrix}

向量的大小

,也就是向量的長度(一般稱作為 模),向量a的模記為:

\left | \vec{a} \right |

,若

\vec{a} = \left ( x,y,z \right )

,則

\left | \vec{a} \right | = \sqrt{x^2 + y^2+ z^2}

單位向量:

即模為1的向量,可以記作

\hat{a}

。一個向量的單位向量,可以透過除以它模得到,即

\hat{a} = \frac{\vec{a}}{| \vec{a}|}

零向量:

即模為0的向量,零向量的方向是任意的

相反向量:

長度相等方向相反的向量,

\vec{a}

的相反向量為

-\vec{a}

平行(共線)向量:

方向相同或相反的非零向量,記作

\vec{a} // \vec{b}

向量運算

\vec{a}=(x_1,y_1,z_1)

\vec{b}=(x_2,y_2,z_2)

加法

向量的加法滿足平行四邊形法則和三角形法則,

\vec{OA} + \vec{OB} = \vec{OC}

向量運算與應用

​ 可以將其想象成一個長方形求對角線。

運算過程:

\vec{a} + \vec{b} = (x_1,y_1,z_1)+(x_2,y_2,z_2)=(x_1+x_2,y_1+y_2,z_1+z_2)

\vec{a} + \vec{b} = \begin{bmatrix} x_{1}\\ y_{1} \\z_1\end{bmatrix} + \begin{bmatrix} x_{2}\\ y_{2} \\z_2\end{bmatrix} = \begin{bmatrix} x_{1} + x_{2}\\ y_{1} + y_{2} \\z_1+z_2\end{bmatrix}

一些運算律:

\vec{a} + 0 = 0 + \vec{a} = \vec{a}

交換律:

\vec{a} + \vec{b} = \vec{b} + \vec{a}

結合律:

\left ( \vec{a} + \vec{b} \right) + \vec{c} = \vec{a} + \left ( \vec{b} + \vec{c} \right)

減法

\vec{OA} - \vec{OB} = \vec{BA}

,如圖

向量運算與應用

運算過程:

\vec{a} - \vec{b} = (x_1,y_1,z_1)+(x_2,y_2,z_2)=(x_1-x_2,y_1-y_2,z_1-z_2)

\vec{a} - \vec{b} = \begin{bmatrix} x_{1}\\ y_{1} \\z_1\end{bmatrix} - \begin{bmatrix} x_{2}\\ y_{2}\\z_2 \end{bmatrix} = \begin{bmatrix} x_{1} - x_{2}\\ y_{1} - y_{2} \\z_1-z_2\end{bmatrix}

一些運算律:

\vec{a}+(-\vec{b})=\vec{a}-\vec{b}

實數和向量的積

設有實數 k,和向量

\vec{a}

的乘積還是一個向量,記做

k\vec{a}

,且

 | k \vec{a} | =  | k| * | \vec{a} |

,如果

k\vec{a}=0

,則 k = 0 或

\vec{a}=0

其幾何意義為:向量的有向線段的伸長或者壓縮。

一些運算律

結合律:

( k\vec{a} )\cdot \vec{b} = k(\vec{a} \cdot \vec{b} ) = \vec{a} \cdot ( k\vec{b} )

分配律:

( j+ k) \vec{a} = j\vec{a} + k\vec{a}

k( \vec{a} + \vec{b} ) =k\vec{a} +k\vec{b}

向量的點乘(點積,內積,數量積)(Dot Product)

兩個向量的數量積(點積,內積,點乘)是一個數量,沒有方向,記作

\vec{a}\cdot \vec{b}

代數定義:

\vec{a}\cdot \vec{b} = x_{1}x_{2}+y_{1}y_{2}+z_1z_2

幾何定義:

我們將

\vec{a}

\vec{b}

的夾角記作

\theta

,且

0\leqslant \theta \leqslant \pi

\vec{a}

\vec{b}

不共線,則

\vec{a}\cdot \vec{b} = | \vec{a} | \cdot | \vec{b} |\cdot cos\theta

\vec{a}

\vec{b}

共線,則

\vec{a}\cdot \vec{b} = \pm \left | \vec{a} \right | \cdot \left | \vec{b} \right |

,因為此時

\theta=0

\cos\theta=1

,若兩個向量方向相反,則認為

\theta=\pi

\cos\theta=-1

一些運算律:

交換律:

\vec{a}\cdot \vec{b}=\vec{b}\cdot \vec{a}

結合律:

( k\vec{a} )\cdot \vec{b} = k( \vec{a}\cdot \vec{b} )

分配率:

( \vec{a} + \vec{b} )\cdot \vec{c} =\vec{a}\cdot \vec{c} + \vec{b}\cdot \vec{c}

一些性質:

\vec{a}\cdot \vec{a} = | \vec{a} | ^{2}

若兩個向量互相垂直,則

\cos\theta=0

因此

\vec{a}\perp \vec{b} \leftrightharpoons \vec{a}\cdot \vec{b} = 0

點乘的實際使用場景

1。計算兩個向量的夾角,透過點乘我們可以得到:

cos\theta = \frac{\vec{a}\cdot \vec{b}}{| \vec{a} | \cdot | \vec{b} |} = \frac{x_1x_2+y_1y_2+z_1z_2}{\sqrt{x_1^2+y_1^2+z_1^2}*\sqrt{x_2^2+y_2^2+z_2^2}}

\vec{a}

\vec{b}

為單位向量,即模為1,那麼上面的式子分母即為1,得

cos\theta = x_1x_2+y_1y_2+z_1z_2

2。可以用來求一個向量在另一個向量上的

投影

,例如圖中

\vec{b}

\vec{a}

上的投影,我們記作

\vec{b} _{\perp }

向量運算與應用

因為

\vec{b} _{\perp }

\vec{b}

\vec{a}

上的投影,因此

\vec{b} _{\perp }

的方向和

\vec{a}

相同。因此

\vec{b} _{\perp } = k \hat{a}

,k為一個常量,

\hat{a}

\vec{a}

的單位向量。

\hat{a}

的值我們很好求得:

\hat{a}=\frac{\vec{a}}{|\vec{a}|}

接下來要看看 k 值的含義,因為

\vec{b} _{\perp }

\vec{a}

方向相同, 因此

\hat{a}

不僅是

\vec{a}

的單位向量,同時也是

\vec{b} _{\perp }

的單位向量,因此 k 即為

\vec{b} _{\perp }

的模,即

k=|\vec{b} _{\perp }|

然後由於

\vec{b}

的結尾與

\vec{b} _{\perp }

的結尾的連線,垂直於

\vec{a}

(如圖,也是投影的性質),因此透過三角函式,我們可以得知

|\vec{b} _{\perp }|=|\vec{b} |*\cos\theta

|\vec{b}|

的值很好求得,

\cos\theta

我們可以透過點乘得到,因此即可求得k的值,然後求得

\vec{b} _{\perp }

如圖,透過向量的減法,我們可以得到

\vec{b}-\vec{b} _{\perp }

,這樣就把

\vec{b}

分解成了兩個互相垂直的向量。

若我們要把向量 (x, y, z) 投影到x,y,z的某個平面上,只需要把垂直於該平面的那個軸對應的值設定為0即可,例如:投影到xy平面,即為 (x, y, 0) ,投影到yz平面上,即為 (0, y, z)。若投影到某個軸上,則只保留該軸的值即可,例如:投影到x軸上,即為 (x, 0, 0),投影到y軸上,即為 (0, y, 0)。

3。判斷一個向量的朝向是否和另個向量相似,即兩個向量的

方向性

,如圖

向量運算與應用

圖中我們可以認為,

\vec{b}

\vec{a}

一樣,同時朝向前方,而

\vec{c}

朝向的是

\vec{a}

的後方。我們可以透過點積的值來判斷,

> 0 則為同方向(0 <= 夾角 < 90), < 0 則為反方向(90 < 夾角 <= 180), = 0 即為垂直(夾角 = 90)

因為

\vec{a}\cdot \vec{b} = | \vec{a} | \cdot | \vec{b} |\cdot cos\theta

,若兩個都是非零向量,則

| \vec{a} | \cdot  | \vec{b} |> 0

,透過三角函式可知:當

0 \leqslant \theta < \frac{\pi}{2}

cos\theta > 0

,因此點積的值 > 0,當

\theta=\frac{\pi}{2}

cos\theta = 0

,因此點積的值 = 0,當

\frac{\pi}{2} <\theta  \leqslant \pi

\cos\theta<0

,因此點積的值 < 0。

4。兩個向量是否

接近

,夾角越小,即兩個向量越接近。透過上面3提到的,我們只能透過點積的值來判斷夾角是鈍角還是銳角還是直角,那麼如何只透過點積的值來判斷夾角大小呢?那就是我們把

兩個向量的單位向量進行點積

。這樣就會使

| \vec{a} | \cdot | \vec{b} | = 1

,因此

\hat{a}\cdot \hat{b} = cos\theta

,那麼當值為 1 時,代表兩向量方向正好相同,當值越來越小時,代表兩個向量離得越來越遠,當值為 -1 時,代表兩向量方向正好相反。因此

兩個向量的單位向量的點積越接近1,兩個向量越接近

這個性質可以應用在

高光

的顯示上,當

人眼看向目標的向量

光折射的向量

,它們越接近則高光效果越明顯。

向量的叉乘(叉積,向量積,外積)(Cross Product)

兩個向量的向量積(叉積,叉乘,外積)是一個向量,記作

\vec{a}\times \vec{b}

(或者

\vec{a} \wedge \vec{b}

我們將

\vec{a}

\vec{b}

的夾角記作

\theta

,且

0\leqslant \theta \leqslant \pi

,那麼叉乘得到的向量的模長為:

| \vec{a} \times \vec{b} | = | \vec{a} | \cdot | \vec{b} |\cdot sin\theta

方向:

與這兩個向量所在平面垂直,且遵守

右手螺旋定則

(四指方向代表旋轉的方向,右手四指從

\vec{a}

轉向

\vec{b}

時,大拇指的方向即向量積的方向)

向量運算與應用

用矩陣表示:

\vec{a}\times \vec{b} = \begin{bmatrix} 0& -z_a& y_a\\ z_a& 0& -x_a \\ -y_a & x_a&0 \end{bmatrix}\begin{bmatrix} x_b\\ y_b \\ z_b \end{bmatrix}= \left ( y_{a}z_{b}-z_{a}y_{b} ,z_{a}x_{b}-x_{a}z_{b} ,x_{a}y_{b}-y_{a}x_{b} \right )

若為二維向量,即z的值為0,因此

\vec{a}\times \vec{b} =(0,0, x_{a}y_{b}-y_{a}x_{b})

,又因為二維沒有z軸,所以常寫作

\vec{a}\times \vec{b} = x_{a}y_{b}-y_{a}x_{b}

,該常量其實就是

|\vec{a}\times \vec{b} |

一些運算律:

\vec{a}\times \vec{b} = -\vec{b}\times \vec{a}

( k\vec{a} )\times \vec{b} = k( \vec{a}\times \vec{b} )

( \vec{a} + \vec{b} )\times \vec{c} =\vec{a}\times \vec{c} + \vec{b}\times \vec{c}

一些性質:

\vec{a}\times \vec{a} = \vec{0}

(因為 sin0 = 0)

若兩個向量互相平行,則

\vec{a}// \vec{b} \leftrightharpoons \vec{a}\times \vec{b} = \vec{0}

| \vec{a} \times \vec{b} |

的值是以

\vec{a}

\vec{b}

為邊的平行四邊形的面積,同樣的以

\vec{a}

\vec{b}

為邊的三角形的面積自然就是

\frac{| \vec{a} \times \vec{b} |}{2}

(至於為什麼,下面第四點解釋)

叉乘實際使用場景

1。建立三維座標中的座標系,例如給定一個x軸和y軸,我們可以透過x軸叉積y軸來獲得z軸

\vec{x}\times \vec{y} = \vec{z}

\vec{y}\times \vec{x} = -\vec{z}

\vec{y}\times \vec{z} = \vec{x}

\vec{z}\times \vec{y} = -\vec{x}

\vec{z}\times \vec{x} = \vec{y}

\vec{x}\times \vec{z} = -\vec{y}

注:若三維座標系的

\vec{x}\times \vec{y} = \vec{z}

那麼該座標系即為

右手座標系

2。判斷一個向量在另一個向量的左側還是右側。例如我們給定兩個向量

\vec{a}= (2, 3, 0)

\vec{b}= (3, 1, 0)

,我們想知道

\vec{a}

\vec{b}

的左側還是右側,該如何判定?

根據

\vec{a}

\vec{b}

的值,我們可以看出它倆都在 xy 平面上,根據叉積的性質我們可以知道

\vec{a}\times \vec{b}

得到的向量一定垂直於 xy 平面(和z軸平行或重疊),然後根據右手螺旋法則,若

\vec{a}\times \vec{b}

的向量的z的值 > 0 ,那麼即表示

\vec{a}

\vec{b}

的右側,若z的值 < 0 ,那麼即表示

\vec{a}

\vec{b}

的左側。

上面的例子我們是從z軸的正方向看向負方向,但是若從負方向看向正方向,那麼原本在左邊就會變成在右邊,因此左右關係和我們的觀察方向有關。

因此若我們從z軸正方向看向負方向,若兩個向量組成的平面沒有平行於xy平面,我們可以先將其投影到xy平面上,然後再計算左右。

3。判斷點是否在三角形內部。

向量運算與應用

​其實本質上還是2中的思路,例如上圖,我們可以利用

\vec{AP} \times \vec{AB}

\vec{BP} \times \vec{BC}

\vec{CP} \times \vec{CA}

來判斷P點是否在

\vec{AB}

\vec{BC}

\vec{CA}

的左側,若成立,則P點在三角形ABC的內部。

同理可以應用到四邊形等多邊形中,但是必須夾角小於180度(如下圖,ABC>180,因此P點即使在內部,但是卻在

\vec{AB}

的右側,

\vec{BC}

的左側)。

向量運算與應用

這點是

三角形光柵化

的基礎,要判斷三角形覆蓋了哪些畫素,那就需要知道這些畫素是否在三角形內部,好給這個畫素進行著色。

4。求三角形面積

如下圖三角形,CD長度為 h,AC長度為 b,AB長度為 c,AC和AB的夾角為 α 。

向量運算與應用

我們知道其面積為:

S=\frac{ch}{2}

因為

h=b*\sin \alpha

因此

S=\frac{cb\sin\alpha}{2}

cb\sin\alpha

正是我們向量AC和向量AB叉乘結果的模

|\vec{AC} \times \vec{AB}|

因此

S = \frac{|\vec{AC} \times \vec{AB}|}{2}

標簽: 向量  方向  點積  夾角  單位向量