BOIDSv0.00 ~群ガル~ HOME > BOIDSとは > BOIDSv0.00 ~群ガル~

09.09 BOIDSv0.00 ~群ガル~

余談ですが先日乃木坂46生駒里奈の卒業コンサートで久々の生駒センターで行われたそうです。AKBや乃木坂のように大人数の場合必ずセンターポジション=0番が存在し、センターポジションは前方から見ると△の頂点で中央となります。このセンターポジション経験者の談話で共通しているのは「センターは前がいないので・・・」というものです。裏を返すと二段は「前の人を見ている」つまり「シンクロしている」と考えられます。では、今回もこれを使用してみようじゃぁないか!

っということで!

センターポジションの架空のボス」を設定してみます。

下記のようにルール1=結合部を「集合重心」から「ボス」へ変更します。
この「架空ボス」はスクリーン上下左右長の2/3の楕円を周回することにします。

/************************************************************************
* ルール:中心集中                           *
* 改訂ルール:一番先頭のIWASHIを群れのセンターとし集中する       *
************************************************************************/
void rule1(int index)
{
  static int   theta=0;

  centerIwashi.x = (SCREEN_SIZE_YOKO/2)+(SCREEN_SIZE_YOKO/3.0) * sinAngle[theta];
  centerIwashi.y = (SCREEN_SIZE_TATE/2)+(SCREEN_SIZE_TATE/3.0) * cosAngle[theta];
  theta = (theta + 1) % (SpeedRate360);
  gf->DrawEllipse(Pens::Red, centerIwashi.x, centerIwashi.y, LSize, LSize);

  /* センターポジションの1%を移動量とする */
  iwashi[index].vx += (centerIwashi.x - iwashi[index].x) / CENTER_V;
  iwashi[index].vy += (centerIwashi.y - iwashi[index].y) / CENTER_V;
}


さらに問題点にもあったように「相手を避ける際の距離」を短くしポッドのサイズを小さくします(これにより殆ど分離は行わない)。 (今回個体個数を極端に多くしたいので方向を示す矢印は小さくて見えないし処理時間がかかる為廃止します)

初めはプログラム中「theta= (theta+1)%(SpeedRate360)」の前に”//”をつけてコメント化し ボス位置を固定して、きちんとポッドが「群がってくるか」を確認します。


【BOIDS MODEL V0 00 ~群ガル~】




09.10 BOIDSv0.00 ~引連レル~

1000個も同時に表示すると、土手でカナブンが団子状になっているように群がっています。
では次に、コメント化した部分を元に戻し「仮想ボス」を周回させてみましょう。


【BOIDS MODEL V0 00 ~引連レル~】



ボスが高速で移動しているため、多くが遅れまいと必死について行っているようには見えませんでしょか?




09.11 BOIDSv0.00 ~まとめ~

BOIDS v0.00では一般的にネットで出回っている論理で作ってみたものの、ボイドアルゴリズムとしては正解かもしれませんが、いわしのトルネードとしてはほど遠いものであることが分かりました。完全に失敗作です。




では、どう改善するのかが問題点なのであります。
BOIDSV1.00は、できれば少しの手直しで行ける方法がないか考えてみたいと思います。



HOME > BOIDSv0.00 ~集ウ~ > BOIDSv0.00 ~群ガル~