日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【几何系列】向量:向量乘法(标量积、向量积)和向量插值

發布時間:2023/12/13 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 【几何系列】向量:向量乘法(标量积、向量积)和向量插值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本系列上一篇《【幾何系列】復數基礎與二維空間旋轉》講述了復數和二維旋轉之間的聯系。

在本文,向量是線性代數中的基本知識,本文只會側重它們在計算機圖形學和旋轉幾何學中的要點。

向量的記號

向量(vector)常用粗體來表示,與標量相區分(不過我為了方便,僅在此處加粗體)。例如:

$$mathbf{u}=egin{bmatrix}
2\
3
end{bmatrix}$$

其中 2 和 3 都稱為向量 $mathbf{u}$ 的分量(component)。向量還可以分為列向量行向量,列向量常常是推薦的表示方法。

向量的圖示

向量作為一種代數元素,在計算機圖形學中常用于表示空間中的有向線段和點。

如下圖所示:

利用向量的表示,有向線段 $u$ 可以通過 $A$ 和 $B$ 兩點相減計算得到:

$$mathbf{u}=egin{bmatrix}
3\
4
end{bmatrix}-egin{bmatrix}
1\
1
end{bmatrix}=egin{bmatrix}
2\
3
end{bmatrix}$$

可以看到,對于有向線段 $u$ 來說,它的向量表示保存了兩條信息方向長度。而對于坐標點 $A$ 和 $B$ 來說,實際上也隱含了兩條類似的信息:原點到坐標點方向原點到坐標點距離長度。方向通過向量各分量的比例而確定,而長度則是通過向量大小(magnitude)確定。

向量大小

向量大小寫作 $left | u ight |$,對分量應用畢達哥拉斯定理(國內稱勾股定理)計算得到:

$$left | u ight |=sqrt{x^2+y^2}$$

其中 $x$ 和 $y$ 表示 $u$ 的兩個分量。

推廣到三維

前面考慮的是二維平面,如果推廣到三維,則可以用向量表示出三維空間的點或有向線段:

$$u=egin{bmatrix}
x\
y\
z
end{bmatrix}$$

其大小為:

$$left | u ight |=sqrt{x^2+y^2+z^2}$$

單位向量

前面說到,向量包含方向大小的信息。那如果我們只關注方向信息呢?自然會想到把大小固定下來,進而引入了單位向量

單位向量就是大小為 1 的向量,把普通向量轉換為單位向量的過程稱為規范化或標準化(normalization)

向量的規范化很容易,將向量除以它的大小即可。

$$hat{u}=frac{u}{left | u ight |}$$

其中 $hat{u}$ 是 $u$ 所對應的單位向量。

笛卡爾向量

笛卡爾向量是特殊的單位向量,對應于笛卡爾坐標系中的 x/y/z 軸。即:

$$i=[1,0,0]^T,j=[0,1,0]^T,k=[0,0,1]^T$$

向量乘法

有兩種向量乘法的定義,一種是兩個向量相乘得到一個標量,稱為標量積,又稱點乘、點積、數量積;另一種是兩個向量相乘得到一個向量,稱為向量積,又稱叉乘、叉積、矢量積

標量積

標量積通過兩個向量相乘得到一個標量。標量積的幾何定義為:

$$rcdot s=left | r ight |left | s ight |coseta$$

簡單來說,就是向量 $r$ 對 $s$ 作投影,得到 $rcoseta$,再將投影的大小 $left | r ight |coseta$ 和 $s$ 向量的大小 $left | s ight |$ 相乘(可以交換,不管哪個向量對另一個向量作投影結果都是相同的)。

標量積的設計是有道理的。

一方面,標量積在一定程度衡量了兩個向量方向的“相似性”。固定大小的兩個向量,夾角越小,方向越接近,相似度越高。

另一方面,標量積既然得到的是一個標量,向量又是標量的一種推廣,我們自然希望它和普通標量的乘法統一起來

與標量不同的是,向量具有方向性。那么在設計標量積的時候,一些顯然需要考慮的場景是:

當兩個向量方向一致時,我們希望這個標量積就等于兩個向量大小的乘積
當兩個向量方向相反時我們希望這個標量積等于向量方向一致情況的相反數
當兩個向量相互垂直(正交)時,這兩個向量其實是線性無關的,我們認為它們倆其實沒啥交流語言(或者說相似性為 0),乘積為 0 最好

利用以上特殊場景,當面對更普遍的情況時,對向量進行正交分解,不難得到$rcdot s=left | r ight |left | s ight |coseta$ 的定義。

當然,這只是定義而已,前面這些考慮都只是為了幫助理解這個定義的幾何含義。

標量積還有它的代數定義

$$rcdot s=r_xs_x+r_ys_y+r_zs_z$$

即兩個向量的各個分量分別相乘,再相加。

標量積的幾何定義和代數定義在笛卡爾坐標系上是等價的。即:從幾何定義出發可以推導出代數定義,而從代數定義也可以推導出幾何定義。

這兩種定義給了我們兩條解決問題的路徑,顯然,利用數量積作為橋梁,求兩個向量的夾角也變得容易起來:

$$eta =arccos(frac{r_xs_x+r_ys_y+r_zs_z}{left | r ight |left | s ight |})$$

馬里奧賽車里面的標量積應用:

要獲得最大程度的加速效果,開車的方向要與加速板的方向盡可能一致,對加速板方向的投影大小要盡可能大。

向量積

向量積通過兩個向量相乘得到另一個向量。

向量積定義為:

$$left |a ight | imes left | b ight |=left | t ight |$$

其中 $t$ 的向量大小為:

$$left | t ight |=left |a ight | left | b ight |sin heta$$

由于向量積得到的一個向量,那么向量就會有方向大小兩條信息。

對于向量 $t$ 的大小,如上圖所示,向量積大小等于兩個向量張成的平行四邊形的面積。該面積衡量了兩個向量的差異性(difference)。如果 $a$ 和 $b$ 是垂直(正交)的,兩者的差異性最大,在兩個向量大小不變的情況此時面積最大($sin heta=1$);如果$a$ 和 $b$ 是共線的,兩者的差異性最小,此時面積等于 0。

對于向量 $t$ 的方向,考慮的是這樣的問題:兩個向量雖然張成的面積一樣,但是方向卻可能不同,只考慮張成的平行四邊形面積大小會丟失掉這樣的差異。例如笛卡爾向量,如果只考慮面積大小,$i imes j$ 和 $i imes k$ 得到的結果是完全一樣的,但是 $j$ 和 $k$ 卻是不同的方向。因此為了添加這個方向信息,如下圖所示,通常采用右手法則(一種約定,區別于左手法則),規定了向量積 $t$ 的方向,即垂直于 $a$ 和 $b$ 張成的平面。于是$i imes j$ 和 $i imes k$ 雖然向量大小相同,向量方向卻不同。

向量積不滿足交換律,但滿足反對稱關系

根據這種關系,可以很容易知道笛卡爾向量的計算規律:

$$i imes j=k$$

$$j imes i=-k$$

$$j imes k=i$$

$$k imes j=-i$$

$$k imes i=j$$

$$i imes k=-j$$

我們還知道同一向量的向量積為 0(因為夾角 $ heta$ 為 0):

$$i imes i=0$$

$$j imes j=0$$

$$k imes k=0$$

基于以上關系,我們可以推導出向量積的代數計算公式

已知兩個向量 $a=a_xi+a_yj+a_zk$ 和 $b=b_xi+b_yj+b_zk$,計算:

egin{align*}
a imes b &= (a_xi+a_yj+a_zk) imes(b_xi+b_yj+b_zk)\
&=a_xb_xi imes i + a_yb_yj imes j+a_zb_zk imes k+a_xb_yi imes j+a_xb_zi imes k+a_yb_xj imes i+a_yb_zj imes k+a_zb_xk imes i+a_zb_yk imes j\
&=0+0+0+a_xb_yk-a_xb_zj-a_yb_xk+a_yb_zi+a_zb_xj-a_zb_yi\
&=(a_yb_z-a_zb_y)i+(a_zb_x-a_xb_z)j+(a_xb_y-a_yb_x)k\
&=egin{vmatrix}
a_y & a_z\
b_y & b_z
end{vmatrix}i-egin{vmatrix}
a_x & a_z\
b_x & b_z
end{vmatrix}j+egin{vmatrix}
a_x & a_y\
b_x & b_y
end{vmatrix}k \
&=egin{vmatrix}
i & j & k\
a_x & a_y & a_z\
b_x & b_y & b_z
end{vmatrix}
end{align*}

最后兩步使用了行列式進行整理。最后,我們把向量積的定義和代數計算公式結合起來就是:

egin{align*}
mathbf{a} imes mathbf{b} &= left | mathbf{a} ight |left | mathbf{b} ight |sin heta hat{mathbf{t}} \
&=egin{vmatrix}
i & j & k\
a_x & a_y & a_z\
b_x & b_y & b_z
end{vmatrix}\
&=egin{vmatrix}
a_y & a_z\
b_y & b_z
end{vmatrix}i-egin{vmatrix}
a_x & a_z\
b_x & b_z
end{vmatrix}j+egin{vmatrix}
a_x & a_y\
b_x & b_y
end{vmatrix}k
end{align*}

$hat{mathbf{t}}$ 表示滿足右手定則的單位法向量。

向量插值

這里僅討論兩種向量插值技術:線性插值球形插值。線性插值的路徑是直線,球形插值的路徑是圓形或者曲線

線性插值

線性插值非常直觀,已知兩個向量,給這兩個向量各分配一個權重相加,權重和為 1。令插值得到的向量為 $v(t)$,則

$$v(t)=(1-t)v_1+tv_2=v_1+t(v_2-v_1)$$

其中 $tin [0,1]$,當 $t=0$ 時,$v(t)=v_1$,當 $t=1$ 時,$v(t)=v_2$。

根據上式中的第二個等號,可以利用幾何的方法推斷出插值的路徑:

$(v_2-v_1)$ 就是 $v_1$ 箭頭端點指向 $v_2$ 箭頭端點的向量,而$t(v_2-v_1)$ 的箭頭端點就在這個向量表示的線段上移動。通過與 $v_1$ 相加后發現,插值出來的 $v(t)$ 的箭頭端點也在這條線段上,這就是線性插值的路徑

通過圖示我們可以看到,這種線性插值在當兩個向量大小相等時,無法保證插值向量的大小不變,在很多應用中我們其實希望這個向量大小是穩定的。比如 $v_1$ 和 $v_2$ 假設表示一條手臂在 $t_1$ 時刻和 $t_2$ 時刻的位置狀態的話,我們希望插值得到 $t_1$ 和 $t_2$ 時刻之間的手臂的位置狀態,如果用線性插值,我們會發現這個本來長度固定不變的手臂,插值后長度竟然發生變化了。

這就引入了球形插值

球形插值

球形插值的推導過程暫且不表,但是其核心思想是加入了這樣的限制條件:兩個單位向量插值出來必然也是單位向量,進而保證了我們希望長度穩定的需求

如果兩個向量大小相同,它的插值路徑是圓形;如果向量大小不同,則插值路徑是曲線。一些例子:

插值公式如下:

$$v(t)=frac{sin(1-t) heta}{sin heta}v_1+frac{sint heta}{sin heta}v_2$$

其中,$tin [0,1]$,當 $t=0$ 時,$v(t)=v_1$,當 $t=1$ 時,$v(t)=v_2$。而 $ heta$ 是 $v_1$ 和 $v_2$ 的夾角,可以通過點乘的公式計算余弦

參考

維基百科:數量積
維基百科:叉積
Vector Calculus: Understanding the Dot Product
Vector Calculus: Understanding the Cross Product
探討:向量(方向)之間的插值-四元數法VS.旋轉矩陣法的性能比較
《Rotation Transforms for Computer Graphics》byJohn Vince

總結

以上是生活随笔為你收集整理的【几何系列】向量:向量乘法(标量积、向量积)和向量插值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。