- こちらの続き
- 有限な2次元格子空間を考える
- 時間経過は離散的な世代進行とする
- 各格子の状態は2値(0か1)とする
- 次世代のある格子点の状態は、現世代のその格子点の状態か、その格子点と隣接する格子点との状態によって決まるものとする
- 次世代の状態が現世代の状態を継承する確率を与え(下のソースでは0.5を与えている)、残りは、隣接格子のいずれかの状態を受け継ぐものとする。複数ある隣接格子のどれを継承するかは、等確率で決まるものとする
- これは、ある空間上の子孫は、その空間上にいる片親とそれとメイティングしうるもう片親との子であって、両親のどちらを引き継ぐかは50:50であり、メイティングがだれとなされるかは、空間上の存在位置によってランダムに決まる、というモデルである
- しばらくすると、オレンジ一色になる(これはドリフトアウトした状態)。アニメはまた、初めから再度、再生されている
X<-21
Y<-21
A<-matrix(0,X,Y)
x0<-5:15
y0<-9:11
A[x0,y0]<-1
Nt<-99
for(i in 1:Nt){
tmpA<-A
for(j in 1:X){
if(j==1){
parentX<-c(j+1)
}else if(j==X){
parentX<-c(j-1)
}else{
parentX<-c(j-1,j+1)
}
for(k in 1:Y){
if(k==1){
parentY<-c(k+1)
}else if(k==Y){
parentY<-c(k-1)
}else{
parentY<-c(k-1,k+1)
}
parents<-expand.grid(parentX,parentY)
true.parent<-parents[sample(length(parents[,1]),1),]
selfORother<-runif(1)
tmpval<-A[j,k]
if(selfORother<0.5){
tmpval<-A[true.parent[1,1],true.parent[1,2]]
}
tmpA[j,k]<-tmpval
}
}
A<-tmpA
image(A)
file.name=paste("test",100+i,".png",sep="")
png(file=file.name)
image(A)
dev.off()
}
# ImageMagickの動いているwindows上で
# 出力したpngファイルをアニメにまとめるコマンド
# コマンドプロンプトで発行
# -loop 0 は繰り返し再生の指示(1回きりの映画なら-loop 1)
# convert -loop 0 -delay 10 *.png myAnimation.gif
- ImageJなるアプリケーション
- こちらから
- Image MagickよりGUIベースであって親切。対応OS・ビット違いなど、最近のパソコンへの配慮が大きい(模様)
- Javaベースらしい
- MacOSX, Linux, Windows
- 32bit 64bit対応
- Java環境ありなしどちらにも対応したexeファイルをこちらからダウンロード
- animation gif ファイルを作るなら
- たくさんのanimation gif化するべきファイルを1フォルダにおさめる
- ツールバーのFileから、Importを選ぶ
- 1ファイルをとりあえず選択すると、次にウィンドウが開いて、合わせる画像ファイルの枚数(デフォルトですべての枚数が表示されている)を指定、取り込みファイルがすべてでなく、一部であるなら、どういう規則のファイル名かなどを指定することもできる。順序は、ファイル名のnumerical sortをするかの選択などもある。その他のオプションもあるが、ひとまず触らない
- いったん取り込んだら、次に、Save As で、Animation Gifを選択して出来上がり