BOIDSv0.00 ~避ケル~ HOME > BOIDSとは > BOIDSv0.00 ~避ケル~

09.05 BOIDSv0.00 ~避ケル~

いやぁ!昔カラーテレビが出始めたころ堅物だったおやじがTVゲームを買ってきたのには驚かされましたが、BOIDSv0.00はなんだか、その動きにそっくりです。

【BOIDS MODEL V0 00 ~現レル~】


【カラーテレビゲーム15 プレイ映像】



【動作範囲の限定】
以前「座標」で勉強したようにアプリの中には、いろいろな「座標空間」が存在しています。この場合、ピクチャーボックスという空間座標上でのみポッドは移動可能なので、それ以外の空間にはいかない制限を設けています。この時横幅 0~最大、縦幅 0~最大を目安に、ポッドが到達した場合移動量の符号を変更することにより、「移動可能な座標空間」上で移動を可能にしています。これが「第一の避ケル」なのであります。

ここで注意しないといけないのは「目標が移動している」ということと、「サークルの原点が左上」にあるということです。
つまりX座標だけに限定して説明すると、ピクチャー座標0の位置を検出際にポッドが向かって行っている場合のみ避け、遠ざかろうとしている場合無視するということです。現在はあまり関係ないかもしれませんが、今後非常になります。 もう一つサークル原点が左上にある場合、2つの評価基準があります。

1)最初から円中心を原点とし評価する。
2)下記のようにそのままを受け入れて円の直径(LSize)を加味する方法

この場合、前にも説明したように算術演算用関数の処理負荷が高いので、その出現回数を基準にどのような選択を行うかを決定します。


if (((iwashi[i].x < 0) && (iwashi[i].vx < 0))
    ||
  (((iwashi[i].x+ LSize) > SCREEN_SIZE_YOKO)
    &&
  (iwashi[i].vx > 0)))
{
  iwashi[i].vx *= -1;
}

if (((iwashi[i].y < 0) && (iwashi[i].vy < 0))
    ||
  (((iwashi[i].y+ LSize) > SCREEN_SIZE_TATE)
    &&
  (iwashi[i].vy > 0)))
{
  iwashi[i].vy *= -1;
}


魚だったら、壁にぶつかったら死んじまうじゃねぇかぁ!
お互いに衝突したら死んじゃうだろ!

ごもっとも!

そこで思い出していただきたいのです。
    「ボイド規則1」=「 分離(Separation) 」

近づいてきた「もの」は避ける!
1つは壁です。壁は言ってみれば表示空間座標を限界とする表示限界です。 まあ!避け方はともかくとして今回は避けられています。
次にポッド同士の衝突です。これはどうしましょう?

自分以外との距離を算出し、その距離を引くことで避けます。
最終的に速度は最高速度で丸められますので、これでいきます。


/************************************************************************
* ルール:他との間合いを取る                      *
************************************************************************/
void rule2(int index)
{
  int len;

  len = Iwashi_Count;
  for (int i = 0; i < len; i++)
  {
    if (i != index)
    {
      double   dist;
      dist = sqrt((iwashi[i].x - iwashi[index].x)*(iwashi[i].x - iwashi[index].x)
        + (iwashi[i].y - iwashi[index].y)*(iwashi[i].y - iwashi[index].y));
        /* 距離を算出する */
      if (dist < DIST_LIMIT)
      { /* DIST_LIMIT=間合いに達したら調整する */
        iwashi[index].vx -= (iwashi[i].x - iwashi[index].x);
        iwashi[index].vy -= (iwashi[i].y - iwashi[index].y);
      }
    }
  }
}


これをルールにれると、どうなるか?

【BOIDS MODEL V0 00 ~避ケル~】


こうなるんですよ!

ちょっと気持ち悪い動きするようになったとは思いませんか?


HOME > BOIDSv0.00 ~現レル~ > BOIDSv0.00 ~避ケル~