Competitive Programming Note
108 師大附中校隊培訓
本文已停止更新,新版請至 WiwiHo 的競程筆記
向量(Vector)表示特定的長度和方向,簡單來說,你可以想成向量是一個箭頭。例如物理上的力、位移都算是向量。
向量可以是任何維度的,也就是說,有二維向量、也有三維向量、一維向量……,然後一個 維向量可以用 個數字來表示,第 個數字表示要往第 個維度的正向走多少距離(如果是負數,就是往負向走),而這個向量可以被看成是一個從起點指向終點的箭頭,舉例來說:
這是一個二維向量,它表示向著 軸正向走 ,並向著 軸正向走 ,所以如果從原點開始走,會走到點 。
(詳細的數學定義有興趣可以自己去查。)
向量有幾種表示方式,有把數字放在矩陣裡,寫成 或 這種形式的,也有放在多元組裡,寫成 的,如果沒有特別需要用到矩陣,通常會用多元組來表示。
一個 維向量 的長度可以用類似畢式定理來算:
長度為 的向量稱為「零向量」,零向量可以是任意方向的。為了方便,除非特別註明,接下來提到的向量都不包含零向量。
基本符號:
可以發現到,由原點指向某個點 的向量,就是 ,所以也可以把點想成是向量、也可以把向量想成是點,這會有助於理解接下來的東西。
兩個向量可以相加得到新的向量,就把所有維度的分量分別相加就好:
例如,:
兩個向量相加等同於兩個力的合力,你也可以發現它會滿足平行四邊形法則。
至於減法,就移項一下就可以暸解要怎麼做了,也可以想成是一個向量加上另一個向量的反向,或者是把兩個向量想成點,,也就是一個從點 指向點 的向量,例如, :
沒有方向的量稱為純量,像是 、、 這些數字都是純量。向量可以乘上一個純量,得到一個新的向量,也就是將這個向量的長度乘上某一個數字,得到一個新的向量,這個動作非常簡單,就把每個維度的分量都乘上這個純量就好:
例如,:
這是向量特有的運算,兩個夾角是 的 維向量 和 的內積記作 ,結果是一個純量:
其實就是把每一個維度的分量長相乘後相加,例如二維向量 。意義是作一個 在 上垂直投影的向量,然後將這個向量的長和 的長相乘。
(內積是 再乘上 ,你想要 是裡面那個角還是外面那個角都沒差,畢竟 。如果夾角超過直角,那麼投影會在另一邊,此時 會是負數。)
在力學上的意義是,對一個物體作一個力 ,而物體的位移是 ,則 是 對這個物體所作的功。
既然內積只是多維版本的乘法,那內積也和乘法一樣,滿足交換律、分配律與結合律。
接下來針對兩個向量的夾角 大小來討論內積的結果為何(以下會同時寫上角度和弧度):
兩向量在不同夾角時的內積:
兩個長度為 的向量在不同夾角時的內積( 軸為夾角(弧度)、 軸為內積):
內積常被用來判斷兩個向量是否垂直,也可以用來判斷兩個向量的方向是否在同一邊、是否相同或者相反。
向量特有的運算,在定義上,它只能用在三維,兩個三維向量 和 的外積記作 ,是一個新的二維向量 ():
其中,、、 是三個維度的「基向量」,有興趣可以自己查。外積得到的向量會垂直於 和 構成的平面,且當 和 的夾角是 ,外積得到的向量長度是:
它的長度等同於兩個向量所夾的平行四邊形面積。
至於它的方向,會依據右手定則,右手食指指向 ,中指指向 ,大姆指的方向就會是 的方向。
以上看不懂都沒關係,因為它的三維定義不重要。二維向量的外積在比賽上比較常用,但剛剛不是說只能用在三維?你會發現把第三維全部代 ,就會變成:
的部分是第三維的基向量,在一般的直角座標系,它是 ,長度是 ,然後我們不要管它,把二維外積定義為三維外積的長度(純量),如果三維外積的結果向量向上,那二維外積是正的,否則就是負的,可以得出:
相同地,這個值等同於兩個向量所夾的平行四邊形面積,但它是「有向」的,如果 轉向 是逆時針,那會是正的,反之就會是負的(這邊的轉指往較近那邊轉),至於夾角 是指 往逆時針轉到 的角度。
外積不滿足交換律,也就是說 ,但它滿足「負交換律」,也就是 ,因為:
外積不滿足結合律,但滿足分配律。
接下來我們針對各種夾角 討論它的值:
兩向量在不同夾角時的外積:
兩個長度為 的向量在不同夾角時的外積( 軸為夾角(弧度)、 軸為外積):
有些人會把向量(或點)做成一個類別,不過我自己是習慣直接用 pair
,然後再做運算子重載。