Boids 2.3 – コード説明

概要

Boids 2.3では、分離(Separation)、結合(Cohesion)に加えて「整列(Alignment)」のルールを導入する。整列行動の考え方は、ここでは以下の通りとした。

  1. 前方視野内に個体が存在する場合、それらの個体の平均速度を求める
  2. 進行方向を、群の平均速度の方へ向けて少し変更する

なおこのバージョンで、個体生成時にランダムに与える速度の計算方法を変更した。

速度計算の変更

これまで、個体を生成したときに与える速さは、上限値V_MAXを定数としておいて、V_MAX~VMAX/2の範囲で一様乱数を発生させていた。

Boids 2.3では、速さの上限値vMAXに加えて下限値vMINCreatureクラスのクラス変数に持たせて、この間の一様乱数で速さを設定する。

これに伴って、以下を追加

  • HTMLの<script>要素に定数V_MINを追加
  • ControlerクラスにvMinのセッターを追加
  • セッターを通してV_MINの値をCreature._vMinにセット

整列のアルゴリズム

平均速度の算出

次図において、先方視野内に個体が存在する場合、それらの平均速度vmeanを計算する。

    $$ {\bf v}_{\rm mean} = \frac{1}{n} \sum^n_{i=1} {\bf v}_i $$

なお視野内の判定は、ベクトルの前後判定と個体との距離計算によっている。

boid2x_alignment_vmean

進路変更

先の図のように、自身の進行方向に対する平均速度の方向によって、以下の手順で進路を変更する。

  1. 平均速度ベクトルの向きが自身の進行方向より左右どちらに向いているかを判定
  2. 平均速度ベクトルが進行方向より右に向いているなら右へ、左に向いているなら左へ方向を少し変化させる。

これらの考え方はBoids 2.1の分離行動における回避動作と同じ。

コード内容

初期パラメータ定義

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

  • 整列判定の視野の深さ(BD23_ALIGNMENT_FIELD_DEPTH)
  • 整列行動における速度の変更角(BD23_ALIGNMENT_ANGLE)

なお、このバージョンで分離行動の視野の深さの変数名を変更している。

クラス変数

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

パラメータのセッター

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

パラメータのセット

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

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

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

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

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

全コード

以下に、分離、結合、整列の3ルールすべてを適用したBoids 2.3の全コードを示す。


↑ Boids 2.2のコード説明へ

↑ Boids 3.0のコード説明へ

コメントを残す

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