せっかくですので,もう何回か,boidについて突っ込んだ記事を書いてみたいと思います.(前回の前半で,私のしようもないディズニー話がなければ,一つの記事で済んでいたかもしれませんね.)
前回の記事の続きという形で書きますので,前回の記述内容等を当記事で詳しく引用することは行いません.
1, 条件②の定数について
boidアルゴリズムにおける条件②について,多くのサンプルにはなかった定数での割り算を行っていたのを覚えていますか?これは,そうしないアルゴリズムでは,各個体の動きが不自然になるからでした.
②の部分を以下のように変えます.
vx2-=(x[n]-x[k])/2; vy2-=(y[n]-y[k])/2;
どうでしょう?群れてはいますけどなんか変な感じは否めません.(個人の見解です)
ここで,各条件の計算式はそのままに,個体数(len)を1500,半径(r)を2,近さの閾値(dist)を10に設定すると,このようになります.
いいですね.昔スーパーファミコンに「スーパードンキーコング 謎のクレミス島」というゲームがあって,虫の大群が追いかけてくるというステージがあったのですが,それを思い出す質感です.
2, 速度算出時の重み係数について
各条件の計算結果を結合して速度を算出する時に,重み係数をかけていたのを覚えていますか?この係数の値を変えることで,動きの印象が大きく変わります.今回はProcessingのマウス位置検出機能を使って,重み係数を毎フレームで以下のように計算します.
float r1 = (float)mouseX/Width; float r2 = abs((float)mouseX-(float)mouseY)/Width; float r3 = (float)mouseY/Height;
マウス位置で群れの動きに変化が生まれます.
0 件のコメント:
コメントを投稿