僕の夢

はじめに

この記事はプログラミングラボ部アドベントカレンダープロ部門 9日目の記事として書かれています。

https://adventar.org/calendars/4410

8記事中4記事書き終わりました。この記事は5記事目です。

僕の夢

皆さんは「癒されたい」と思ったときどんなことをしますか?

僕は家に水生生物を何種類か飼っているので、癒されたいときは彼ら(性別知らんけど)を見て癒されています。かわいいですね水生生物。

ただ、頻繁にみているとさすがに飽きてきてしまいます。かわいいのは変わりないのですが、たまには違う種類の水生生物を見たいなーと思うことがあります(ちなみに僕は水生生物を除いた動物の容姿があまり好きではありません、植物は好きです)。

そんなことを思っているうちに、自分で生体シミュレーションができるプログラムを作ればいいのでは?みたいなことを思いつきました。勝手に進化して生物の動き方や性質が変われば飽きることもないし、見た目も自分好みにできるし、無限に癒されることができそうみたいなのりです。

とはいっても、どんなものにするのかもほとんど決まっていないので、いつか作れればいいなーというのが僕の夢です。しょぼい夢ですね。

本題

自分の夢を語るだけでプロラボのアドベントカレンダーが務まるとは思っていません。ここからが本題です。

生物シミュレーションをするにあたって、いろいろなことを調べているうちに、Boidsアルゴリズムなるものがあることを知りました。これは、動物の群れをシミュレートするアルゴリズムで、映画などに出てくる鳥や魚の群れを本物と同じように動かすために活用されています。

アルゴリズム

Boidsアルゴリズムは、以下の3つのルールを各生物に対して適用するだけで、群れのような動きを実現することができます。

分離(Separation)

一定範囲にいる他の生物から離れるような方向に動かす。
f:id:Unit112358:20191208232444p:plain

整列(alignment)

一定範囲にいる他の生物が向いている平均の方向を向くように動かす。
f:id:Unit112358:20191208232448p:plain

結合(cohesion)

一定範囲にいる他の生物の平均位置の方向に移動する。
f:id:Unit112358:20191208232453p:plain

たったこれだけで群れのような動きを実現できます。

下のサイトで実際にどのように動くかを見ることができます。

Flocking boids - bl.ocks.org

かわいいですね。
結構簡単に実装できるので、興味がある人は自分で作ってみてください。

おわり

明日はchocobo333の記事です。多分遅刻するんじゃないですかね。