這是一個很古老,但是很有趣的問題
一個追逐者,一個獵物
怎麼樣才能夠讓追逐者追捕到獵物呢?
當S(追逐者)與T(獵物)皆不動的時候
我們只需要給定一個方向,即 Vector(T - S)
不論給予多少速度(當然要大於0),總有一天S會追到T
但是如果S和T都有自己的速度呢?
就是這篇文章的主題了!

如下圖,S與T皆有自己的初始速度
雖然圖中好像刻意讓S會追到T
但其實任意方向結果都是一樣的
Pic01

首先要求得的是相對速度
Velocity(T) - Velocity(S)稱做 V
再來是相對距離,即目前S到T的距離 Length(T - S),稱做 L
如此一來,S追逐到T的時間就是 L / V,稱做 t
由於S需要改變自己的方向來追逐T,所以原本的Velocity(S)不能拿來用
因此計算P點是利用T的行進方向來求得

P = T + Velocity(T) * t

最後,有了起點和終點,S的追逐速度即為

Velocity(S') = Vector(P - S) / t

值得注意的是,以上計算必須是T的速度方向保持不變的情形才成立
那如果T的速度或方向會變化呢?
其實演算法是一樣的,只需要在適當的時間修正Velocity(S')即可
所謂適當時間,要看需求而定
緊追不捨的情形,當然是每個遊戲迴圈都計算一次修正速度
如果不想讓S那麼快追到T,或許每五至六個迴圈才修正一次

結果如下圖,會呈現追逐的曲線:
Pic02

最後需要注意的大前提是
S速度限制的時候,S有可能永遠追不到T!!
這應該很好理解
當T的速度大過於S的速度時

S要追到T的機率微乎其微(除非T朝著S的方向移動)
只能看著他的車尾燈慢慢消失...

P.S 想起之前為了這個想破頭還想不出來,實在汗顏...

arrow
arrow
    全站熱搜

    seeulin 發表在 痞客邦 留言(1) 人氣()