2次元線形セルオートマトン(課題1202)

[全課題リスト|サンプルソース|完成した実行ファイル(実習室のみ)|完成したソースの例] Time-stamp: "2004/12/13 Mon 20:13 hig"

課題0902の2次元バージョンをやろう. つまり, ある生物群が2次元の土地のx,y=0,1,2,...,20 の21*21地点に住んでいる. (x,y) にいる1個体は1年で死ぬが, (x±1,y)(x,y±1) の4地点に 子供を残す(単為生殖なのです).

したがって, t年目の, 地点 x の個体数 n(x,y,t) は, n(x,y,t+1)=n(x-1,y,t)+n(x+1,y,t)+n(x,y-1,t)+n(x,y+1,t) にしたがう. 0年目には, (x,y)=(10,10) にだけ個体が1個いたとする. そのあとの個体数の変化をアニメーションするプログラム cp2d1.c を, オイラー方式で作ろう. ただし, n[x][y], nnext[x][y] のような変数を用いるのでなく, n[x][y][t] にすべての時刻の個体数を保存しよう. 個体数は,

/* 前の方で定義 */
float colors[5][3]={
/* R G B = 赤緑青 */
  {0.0,0.0,0.0},		/* 黒 */
  {0.0,1.0,0.0},		/* 緑 */
  {0.0,0.0,1.0},		/* 青 */
  {1.0,0.0,1.0},		/* マゼンタ */
  {1.0,1.0,1.0}			/* 白 */
};

/* n[x][y][t] を 地点 (x,y) の時刻 t の個体数とする */
glMaterialfv(GL_FRONT,GL_AMBIENT, colors[n[x][y][z]%5]);/* 環境光 */
glMaterialfv(GL_FRONT,GL_DIFFUSE, colors[n[x][y][z]%5]);/* 拡散光 */
glMaterialfv(GL_FRONT,GL_SPECULAR,colors[n[x][y][z]%5]);/* 鏡面光 */
glMaterialf(GL_FRONT,GL_SHININESS, shininess); /* 輝度 */
のように, (たとえば)5で割った余りに応じて,色で表現しよう.

対応する携帯アプリ も参照.


Copyright © 2004 Saburo Higuchi. All rights reserved.
樋口三郎, hig mail address