オイラー表示とラグランジュ表示, コンタクトプロセス

目次 解答例(ないかも)

最後の更新は次の時刻以降のはず.Time-stamp: "2003/03/25 Tue 10:22 hig"


準備

今週あたりからランダムウォークを終わってコンタクトプロセスに移ります. 新しいディレクトリをつくって, そこに cd しよう.
s1609h017% cd
s1609h017% cd cs2
s1609h017% mkdir cp
s1609h017% cd cp
22以降の課題はここでで作業しよう.

課題22_01(ta131)オイラー表示

lag1d1.c は, 2人が同時にランダムウォークする ラグランジュ(人指向)方式の プログラムである. 1次元で, 2人はそれぞれ, 確率1/2 で右左に1ずつ進む.

10人が同時にランダムウォークして, 同様な表示をする. オイラー(場所指向)方式の プログラム eul1d1.cを作ろう. 2人以上のウォーカーが同じ位置に来たときは, 大きな点を描こう. それには, n(x) > 0 である点 x について

glPointSize((GLdouble)n[x]);		/* 点の大きさ */
glBegin(GL_POINTS);
  glVertex2d((GLdouble)x/(GLdouble)XMAX, 0.0);
glEnd();

などとすればよい.

完成例: ~hig/cs2/cp/eul1d1

興味と時間のある人は, 3次元グラフィックスバージョン lag1d2.c をまねて 3次元グラフィックスバージョン eul1d2.c を作ってみよう. この場合, 大きさは(まだ)変えなくてよい. 3次元グラフィックスについては, 次週以降に詳しく説明します.

課題22_02(ta132)コンタクトプロセス

ある生物群が1次元状の土地のx=0,1,2,...,20 の21地点に住んでいる. x にいる1個体は1年で死ぬが, x-1x+1 の2地点に 子供を残す(単為生殖なのです).

したがって, t年目の, 地点 x の個体数 n(x,t) は, n(x,t+1)=n(x-1,t)+n(x+1,t) にしたがう. 0年目の個体数分布が, n(,0)={0,0,....,0,1,0,0,....,0} だとして, そのあとの個体数の変化をアニメーションするプログラム contact1d1.c を作ろう. 個体数は,

/* 前の方で定義 */
GLdouble colors[5][3]={
/* R G B = 赤緑青 */
  {0.0,1.0,0.0},
  {0.0,0.0,1.0},
  {1.0,0.0,1.0},
  {1.0,1.0,0.0},
  {0.0,1.0,1.0}
};

/* n[x] を 地点 x の人数とする */
glColor3dv(colors[n[x]%5]);
glBegin(GL_POINTS);
  glVertex2d(x, 0);
glEnd();
のように, (たとえば)5で割った余りに応じて,色で表現しよう.

完成例: ~hig/cs2/cp/contact1d1


Copyright © 2002 Saburo Higuchi. All rights reserved.
Saburo HIGUCHI, hig mail address