群れの分裂と融合
Split, navigate, reunite.ひとつの群れが、障害物を避けて分かれ、またひとつになる。
経路の割り当てなし。近傍との相互作用と障害物回避。
近くの仲間と、そろう。
離れすぎず、近づきすぎず。
分離・整列・結合で群れが進む。
障害物の前で、分かれる。
それぞれが近い側へ回避。
決められたルートは持たない。
通過したあと、合流する。
共通の進路への誘導と仲間との結合で、
分かれた流れが再び近づく。
ひとつの群れが、障害物を避けて分かれ、またひとつになる。
経路の割り当てなし。近傍との相互作用と障害物回避。
離れすぎず、近づきすぎず。
分離・整列・結合で群れが進む。
それぞれが近い側へ回避。
決められたルートは持たない。
共通の進路への誘導と仲間との結合で、
分かれた流れが再び近づく。
個体は近くの仲間だけを参照します。近づきすぎた相手から離れる「分離」、平均的な向きにそろえる「整列」、仲間の中心に近づく「結合」を重ねています。障害物付近では、円の周囲を流れる方向と表面から離れる力を加え、回避を優先します。
左右の通過経路や隊形は、個体ごとに事前設定していません。ただし、全個体に右向きの移動目標と、画面中央の進路へ戻る弱い誘導を与えています。合流の全てが局所ルールだけで生じるモデルではありません。
「進路へ戻る力」を0にすると、上下に分かれた群れが合流しにくくなります。「結合」を弱めるとまとまりにくくなり、「個体間の間隔」を大きくすると群れが広がります。障害物をずらすと、上下の流れの人数も変わります。
障害物はドラッグで移動。空白をダブルクリック/ダブルタップすると障害物を追加できます(最大5個)。障害物をダブルクリック/ダブルタップすると削除します(最低1個)。選択した障害物は、キャンバスにフォーカスして矢印キーで移動できます。Deleteキーでも削除できます。
Space:停止・再開 R:同じ条件でやり直す F:全画面 Esc:説明/全画面を閉じる。カメラボタンで表示中のシミュレーションをPNG保存します。個体数とプリセットを変更すると最初から再生します。停止中でも障害物と設定を変更できます。
「群れの数」は距離56u以内でつながる8個体以上の集団数です。小さな孤立集団は除外します。「方向の一致」は単位速度ベクトルの平均の大きさです。「広がり」は上下位置の10〜90パーセンタイル幅で、uは仮想空間の距離単位です。「通過率」は最後の障害物の右端より右にいる個体の割合です。これらは毎秒約5回集計します。
Craig ReynoldsのBoidsモデルを参考にした独自の2D実装です。近傍探索は空間グリッド、時間更新は固定時間刻みを使用。魚同士は反発による近似、障害物との接触は位置補正で処理します。生物学的な実証モデルや厳密な流体シミュレーションではありません。
HTML・CSS・JavaScript・描画素材は全てこのファイルに内蔵。実行時の通信、外部ライブラリ、フォントや画像の読み込みはありません。上記の参考リンクはクリックした場合にのみ外部サイトを開きます。