over 4 years ago

ゲーム開発者のためのAI入門』を読んでいて書いてあるアルゴリズムを実装してみた。
追跡のアルゴリズムは誰でも思いつくと思うけど迎撃のアルゴリズムも案外簡単に書けるんだなぁと関心。

追跡

追跡はプレデターがターゲットを単純に追いかけるというもの
プレデターの位置を\(u_p \in \mathbb{R}^2\),
ターゲットの位置を\(u_t \in \mathbb{R}^2\),
プレデターの速さを\(s \in \mathbb{R}{>0}\),
とおくとプレデターの速度\(v_p\in\mathbb{R}^2\)は
$$
v_p = s \frac{u_t-u_p}{|| u
t-u_p ||}
$$
と書ける。
あとはこれをフレーム毎に更新すればよい。

迎撃


迎撃はプレデターがターゲットの行動を予測して先回りを仕掛けるというもの
ターゲットの速度を\(v_t\in\mathbb{R}^2\)とおくと
プレデターとターゲットの相対位置\(u_r \in \mathbb{R}^2\)及び相対速度\(v_r \in \mathbb{R}^2\)は

$$
u_r = u_t - u_p
$$

$$
v_r = v_t - v_p
$$

と書ける。よってプレデターがターゲットに追いつくまでの時間\(t\in\mathbb{R}\)は
$$
t = \frac{||u_t - u_p||}{||v_t - v_p||}
$$
と予測できる。この時ターゲットが移動し続けていたとするとターゲットの予測位置\(u'_t\in\mathbb{R}^2\)は

$$
u't = u_t + tvt
$$

と計算できる。
あとはこの位置にターゲットがいると思って追跡アルゴリズムで追いかければ良い。

実例

実際にこのアルゴリズムに基づいて実装してみたサンプルを jsdo.it で公開しているので参考にしてくださいm(_ _)m
Chase & Intercept Algorithms

← enchant-stage につまづいた Python で Infinite lazy polynomials →
 
comments powered by Disqus