群れをシミュレートする

概要

Life is Beautiful という blog サイトに縁日の金魚すくいを模したサンプルがあったので、それを真似て試みに作ってみたものです。 元は2005年春学期のプログラミングA演習のために作ったものであり、そのためにこの演習授業が終了した時点で受講生たちが知りうる範囲の文法と記述方法で作っています。

なお Reynolds の論文を元にしてやっていますので、アルゴリズムは借り物です。 これを参考に演習の課題を作ろうとしている人たちへの注意ですが、やはり既存のアルゴリズムを利用するのはオリジナルで何か作るのに較べたら簡単です。 もちろん先人の知恵を援用するのは重要なことですが、対象となる演習授業ではオリジナルのアイディアを実装する能力を求めているのか、そうではないのか、といったことに注意しながら参考にして下さい。

3 時間ほどでおおよそ作成し、 あと二日ほどに分けて空き時間を 2 時間ほど投入して色とシッポを付けることができました。 基礎プログラミング演習 II 終了時点ではこの位のことができるまでには到達している、という参考までに。

プログラム

  1. コード:reynolds.c
    (実行時に $ ./a.out 30 0.05 のように個体数(30匹)とフレーム間待ち時間(0.05秒)を指定してください。要Handy Graphic。)
  2. 動作サンプル:#1, #2 (QuickTime Movie)
  3. 旧サンプル:#3, #4 (QuickTime Movie, Handy Graphic ではなく EGGX を使ったもの。高速描画が可能。)

参考資料

  1. "リアルな映像を作るグラフィックス・アルゴリズム", "今からでも遅くない!アルゴリズム入門", 日経 ITPro, 2006
  2. "習作UI: 縁日の金魚を再現してみた", Life is Beautiful, Satoshi Nakajima, 2007
  3. "Flocks, Herds, and Schools: A Distributed Behavioral Model", Craig W. Reynolds, ACM SIGGRAPH '87 Conference Proceedings, 1987
  4. "群れをシミュレートする" (EGGX 版) Yutaka Yasuda

Yutaka Yasuda (yasuda@bakkers.gr.jp)