ホーム >> 左脳ActionScript3 >> アクションスクリプト3 >> boidデモを作る >> boidデモ作成 その5:「boids理論」並走する(移動方向を合わせる)。
boidデモ作成 その5:「boids理論」並走する(移動方向を合わせる)。
フラッシュで、「boids」デモを作ってみよう。第4回。

何故か「羽虫群れ」の動きを再現できた前回からの続き。コードも変更点しか示さないので、前回分を良くチェック。

いよいよ、boids理論の最後の項目へ。
  1. 距離が近すぎれば遠のく
  2. 距離が離れていれば近づく
  3. ほどほどの距離なら並走(移動方向を回りにあわせようとする)
しかし、この「ほどほどの距離」というのは、曖昧だ。
ひとまず、"近すぎ""遠すぎ"の間を"ほどほど"と決めて、話を進めよう。


並走する(移動方向を合わせる)

boids理論 としての最後のルール。ほどほどの距離に居る仲間と「移動方向を合わせようとする」の実装をしてみよう。

冒頭で述べた"ほどほど"もそうだが、「移動方向を合わせようとする」も、よくよく考えると曖昧でもある。「方向を合わせる」には、どうしたらよいか?

ここでは、ほどほどの距離に居る個体の「移動の平均を出す」という方法で対処する事にした。

もしかしたら、もっと良い方法があるかもしれない。それは、各自が工夫し「オリジナル?の boid デモを作る為の課題」としておこう。
決して、これ以外に何も思いつかなかったからではない。ホントだってば。

コードは「近いものから逃げ、遠いものに近寄る」を、また作り変える事になる。

//  近いものから逃げ、遠いものに近寄る、ほどほどのものと並走する
var b:int   =   i * number_of_points;
var acp:Point   =   new Point();    //  逃げる加速度
var atp:Point   =   new Point();    //  近づく加速度
var vp:Point    =   new Point();    //  並走方向
var ac:int  =   0;  //  後で平均値を取る為のカウンター:逃げる
var at:int      =   0;  //  後で平均値を取る為のカウンター:近づく
var vc:int  =   0;  //  後で平均値を取る為のカウンター:並走
for (var j:int = 0; j < number_of_points; j++)
{
    if (    i != j  )
    {
        var tb:one  =   objs[j];
        var d:Point;
        var dis:Number  =   distance[b + j];
        if (    dis< 10 )
        {   //  近すぎ
            d   =   t.p.subtract(tb.p);
            d.normalize(1.0);
            acp =   acp.add(d);
            ac++;
        }
        else if (   dis > 30    )
        {   //  遠すぎ
            d   =   t.p.subtract(tb.p);
            d.normalize(1.0);
            atp =   atp.add(d);
            at++;
        }
        else
        {   //  近すぎず、遠すぎず、ほどほど
            d   =   tb.v.clone();
            d.normalize(1.0);
            vp  =   vp.add(d);
            vc++;
        }
    }
}
if (    ac  )
{   //  逃げる加速
    t.v.x   +=  acp.x / ac;
    t.v.y   +=  acp.y / ac;
}
if (    at  )
{   //  近寄る加速
    t.v.x   -=  atp.x / at;
    t.v.y   -=  atp.y / at;
}
if (    vc  )
{   //  移動方向を合わせる加速
    t.v.x   +=  vp.x    /   vc;
    t.v.y   +=  vp.y    /   vc;
}

Get Adobe Flash player

群れをなして移動する点が実現できた。まさに小魚の群れである。スイミーを思い出した貴方はきっとイイ人に違いない。

コードは、前回の「近いものから逃げ、遠いものに近寄る」に更に「ほどほどだと並走」という部分を追加している。

これで、ひとまず boids理論 のルールを全て実装できた。確かに、なにか生き物の群れのように見える。


>> その6へ。

トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/190

コメントする

ホーム >> 左脳ActionScript3 >> アクションスクリプト3 >> boidデモを作る >> boidデモ作成 その5:「boids理論」並走する(移動方向を合わせる)。