allenchou.net
遊戲數學:內積、量尺、與彈力球 | Ming-Lun "Allen" Chou | 周明倫
[latexpage] Here is the original English post本文之英文原文在此 前備教學 三角函數基礎 – 正弦與餘弦三角函數基礎 – 正切、三角形、與砲彈反三角函數、斜坡角度、與物件面向 大綱 內積是個簡單卻又十分有用的數學工具,它能將兩個向量的長度與方向之間的關係濃縮成一個單一數值。向量能夠應用在計算投影、反射、打光、與許多其他遊戲相關運算。 你將可透過本教學學會: 內積的幾何意義如何將一個向量投影到另外一個向量上如何沿任意軸向測量物件的尺寸 如何針對一個平面反射一個向量如何模擬彈力球於斜坡上的行進路線 內積 假設有兩個向量,$\vec{a}$與$\vec{b}$。由於一個向量代表一組方向與長度的資料,其起始點位於何處都沒關係,所以就讓我們將$\vec{a}$與$\vec{b}$的起始點重合: 內積(dot product)是個數學運算元,它能結合兩個向量而得出一個單一數值。此值即為第一個向量投影於第二個向量上的有號長度(signed magnitude)乘以第二個向量的長度。可以把投影想成是用個平行光源將第一個向量的影子映照在第二個向量上,且光源方向與第二個向量方向垂直。 我們將$\vec{a}$與$\vec{b}$的內積寫成$\vec{a} \cdot \vec{b}$(念做a dot b)。 若兩向量之間的夾角小於90度,則第一個向量的有號長度為正(即相當於其長度)。若夾角大於90度,則第一個向量的有號長度則為負(其長度加上負號)。 兩向量何者為第一何者為第二,其實並不重要。將兩者的順序調換,內積結果仍然不變。 若$\vec{b}$是個單位向量(長度為1),則$\vec{a}$投影至$\vec{b}$上的有號長度便直接等於$\vec{a} \cdot \vec{b}$. 內積公式 - 餘弦版 注意圖中有個直角三角形,令$\vec{a}$與$\vec{b}$之間的夾角為$\theta$: 記得本教學提到直角三角形的鄰邊長即為斜邊乘上角度$\theta$之餘弦值,於是$\vec{a}$投影至$\vec{b}$上的有號長度即為$\lvert \vec{a} \rvert \cos{\theta}$: 兩項量的內積可以表達成兩項量各自的長度與夾角之餘弦值三者相乘,本算式同時也驗證了內積之兩項量前後順序並不影響結果的特性: 若兩項量$\vec{a}$與$\vec{b}$皆為單位向量,則$\vec{a} \cdot \vec{b}$即等於$\cos{\theta}$. 若兩向量互相垂直(夾角90度),則內積值為零。若夾角小於90度,則內積值為正。若夾角大於90度,則內積值為負。由此可見,利用兩項量之內積的正負號,便已可粗略知道兩者方向的同異性。 由於$\cos{0^\circ} = 1$單向性地減少直至$\cos{180^\circ} = -1$,兩向項量的方向越相近,兩者之內積值便越大;而兩項量的方向越相反,則兩者之內積值越小。當兩項量的方向完全一樣或恰恰相反,則兩者之內積值分別為$\lvert \vec{a} \rvert \lvert \vec{b}