Boids 2.1 – コード説明

概要

Boids 2.1では、いよいよBoidsのルールの一つ「分離(Separation)」を導入する。分離行動の考え方は、ここでは以下の通りとした。

  1. 視野内に個体が存在するとき、最も距離が近い個体を選択する
  2. その直近個体と反対方向に、自身の進行方向を変化させる

分離のアルゴリズム

視野

個体は自身の進行方向の左右90度以内、180度の視野角を持ち、その視野角内で一定距離以内の個体に反応するものとする。

視野内外の判定の概念は下図の通りで、個体Pは視野内と判定され、個体Qは視野外として無視される。

boids2x_perspective

視野内外判定の手順は以下の通り。

  1. 前後判定の方法により、視野角内の個体があればそれを選定
  2. その個体について\overline{\rm SP}} \leqq lならば次へ進む
  3. その個体が最も近いなら入れ替え

回避動作

回避対象が自身の進路の右にいるなら左に、進路の左にいるなら右に、方向ベクトルの角度を変更する。進路変更の角度は予め設定しておく。

boids2x_separation_avoidance

回避動作の手順は以下の通り。

  1. 左右判定の方法により、回避対象が進行方向の左右どちらにあるかを判定
  2. 回避対象が進行方向の左にあるなら右へ、右にあるなら左へ方向を少し変化させる。

ここで方向ベクトルの変化量θは予め設定しておき、これに対応するcos、sinによる回転行列を適用して方向を変える。cos、sinの値は、できるだけ計算量が少なくなるようにする。

コード内容

初期パラメータ定義

HTMLで定義する初期パラメータに、分離に関する以下の変数を追加する。

  • 分離に関する視野の深さ(BD21_VIEW_FIELD_LENGTH)
  • 回避行動の進行方向の変化(BD21_SEPARATION_ANGLE)

クラス変数

初期パラメータの保存のため、Creatureクラスのクラス変数を追加する。

パラメータのセッター

Controlerクラスに、Creatureクラス変数へのセッターを定義する。

パラメータのセット

HTMLで定義されたパラメータをControlerオブジェクトのセッターによってセットする。

Ceatureクラスの変更 – separation()メソッドの追加

Creatureクラスのmove()メソッドがseparation()メソッドを呼び出すようにする。

separation()メソッドを新たに定義する。

  • 速度の方向を変化させる回転行列のcos、sinに対応したローカル変数cssnを定義している
  • 最も近い個体への参照がnearestCreatureプロパティに保存されるが、視野内に個体が存在しないときはnullとなる
  • 速度の回転方向は、右がマイナス方向、左がプラス方向となることに注意

 


↑ Boids 2.0のコード説明へ

↓ Boids 2.2のコード説明へ

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です