KITASENJU DESIGN BLOG

memo, html, javascript, unity

boids再考

boids

examples | p5.js

1.分離(Separation)

  • 近くの仲間に対して離れる方向のベクトルを計算する
  • それをノーマライズし、距離が離れるほど重みを変える(弱くする)
  • そのベクトルの平均を算出 →これはコリジョンとして機能します

2.整列(Alignment)

  • 近くの仲間に対して速度の平均を計算
  • その平均をベクトルにする
  • その平均ベクトルー自身のベクトル=(平均ベクトルに向かうベクトル)を算出 →周りと合わせる

3.結束(Cohesion)

  • 近くの仲間に対して位置の平均をとる(重心)
  • その重心に向かうようなベクトルを算出 →くっつく

最後に

3つの値を加速度に足す 加速度をベロシティに足す 加速度をゼロにする

特徴

  • ひとつひとつは個性は持たない
  • 動き以外(位置・速度・加速度)にパラメータは無い
  • コリジョン的な要素(①分離)以外の2つが結構ユニークである。(平均の方向に合わせる、重心に向かう)
  • 群衆のモーションのためのアルゴリズムである。
  • 視界に入ったものが自分に影響を与える

haohao

  • 男女・好き嫌いをパラメーターに持つ
  • コリジョンがある
  • 嫌いな奴からは離れる
  • 視界の中に入ったもので一番好きなやつに線が引かれる

特徴

  • 向かう・引き合うが、固有の要素によって決まっている
  • モーションのためのアルゴリズムというわけではない、群衆恋愛ゲームである。

CA

  • 自分の周囲(この場合はセル)の状態によって、自分の状態が左右される
  • 一般的なものだと周囲のON・OFFの状態から、自分のON・OFFがきまる。ただし自分のON状態・OFF状態のときで状況を変える

共通点

  • 個は観測範囲を持つ
    • boids,haohaoならある距離
    • CAなら周囲の状態
  • その観測範囲に入った他者に影響を受ける
  • その影響の受け方に違いがある
    • boidsなら中心に向かう、平均ベクトルにあわせる、離れる
    • haohaoなら好きなものに寄っていく、嫌いなものから離れる
    • CAなら周囲の状況によってオン・オフ
  • 繰り返し処理を行うことで、時間軸と共に、フィードバック的な効果もあり、変化していく

単純なフィルタはどうか

  • [0.33,0.33,0.33]という単純なコンボリューションフィルタを考える
  • x(0,0)の値はx(-1,0)とx(+1,0)の影響を受ける、足して平均をとっているみたいなもの
  • 繰り返していけばどんどんボケていく
  • 比較的単純に変化していくので、創発性を持つといは言い難い
  • ライフゲームもほぼ同じだが、非線形的な処理(いくつ以上の時0/1になる)というのが入る

ラプラシアンを繰り返しかける

波動方程式はどうか

ラングトンのアリはどうか

  • 群衆シミュレーションというわけではない
  • ありが通った位置の場が変わっていく
  • 個によって場が変化していく、というのがユニークである。
  • ブラウン運動(本来のブラウン運動はよくしらない)とも違う

アルゴリズム体操

4分木による分割はどうか

2分木を使ったらどうか

Truchet tiles

Truchet tiles - Wikipedia

"FOOTER"