向量的點積(英語:dot product)(數量積的定義):
幾何意義是:是一條邊向另一條邊的投影乘以另一條邊的長度。
在其物理上面的幾何意義是容易理解的。如下圖所示:
現在求F1在水平方向上的做功:
W = F1 * Cosθ * S
那么套用數量積公式:
力F1在水平方向位移S,可以表示為:
F1 * S = Cosθ * |F1| * |S|
上面的數量積公式的使用如下:
當θ夾角小於90度時,F1 * S > 0
當θ夾角大於90度時,F1 * S < 0
利用上面的特性,在游戲的開發中可以作為一個玩家的視野計算,對玩家身前可能存在的碰撞進行檢測。
如上圖所示,2號藍線為玩家的面朝的方向,我們可以知道1和3紅線對2線的夾角是小於90度的,這也就是玩家的面朝的方向
再看4號線,與2號線的夾角是大於90度的,故向量2與向量4的點積是小於0的,故我們可以判斷4是玩家的視野盲區,也就是玩家的身后。
我們如果需要對玩家身前是否有障礙需要判斷的話,可以通過向量來實現。
-------------------------------------------------------------------------------------------------
我們首先設置的是RPG玩家的位置,假設是(10,10)
下面的向量描述都是以玩家為中心的描述。
我們設置他的視野范圍是5,知道主角的朝向假設是向量(1,1)
現在有一個箱子的向量是(-3,4);
利用點積公式:
1 * (-3) + 1 * 4 = 1
因為1大於0,推導出他們的夾角θ是大於0小於等於90度的
故該箱子一定是位於玩家的前方的。
再次假設,玩家的視野角度是60度。計算Cosθ的值
Cosθ = 2 / (sqrt(2) * 5) = 2 / (1.4 * 5) = 2 / 7 = 0.2857
計算反余弦:ArcCos 0.2857 = 73.399305 °
知道了箱子與玩家朝向的向量(1,1)的夾角是73度,故可以知道,該箱子不在玩家的視野中。
如果還不懂,可以對照下圖的大致圖解: