1次元セルオートマトン 山中和義 2007/09/05 11:43:36 └!ライフゲーム(Conway'sGameofLife)(2次... 山中和義 2007/09/07 20:53:06 (修正2回) └自己相似なパターン 山中和義 2007/09/17 13:57:04
1次元セルオートマトン 山中和義 2007/09/05 11:43:36 ツリーへ
1次元セルオートマトン |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/09/05 11:43:36 | |
!1次元セルオートマトン(2状態3近傍) SUB CellularAutomaton1D(Num,m,cell(),Cnt) !ルールNum、m個のセル、t=[0,Cnt-1] DIM R(8) !ルールを得る FOR i=1 TO 8 LET R(9-i)=VAL(mid$(right$(REPEAT$("0",7)&BSTR$(Num,2),8),i,1)) NEXT i SET DRAW mode hidden !ちらつき防止(開始) CLEAR FOR i=1 TO m !初期状態を表示する CALL SetPixel(i,0,cell(i)) NEXT i FOR t=1 TO Cnt-1 !各時刻の状態を得る LET c1=cell(m) !左端 LET c2=cell(1) FOR i=1 TO m IF i=m THEN !右端なら LET c3=cell(1) ELSE LET c3=cell(i+1) END IF LET cell(i)=R((c1*2+c2)*2+c3 + 1) !左、中央、右の状態に応じて決定する CALL SetPixel(i,t,cell(i)) !セルの状態を表示する LET c1=c2 !次へ LET c2=c3 NEXT i NEXT t SET DRAW mode explicit !ちらつき防止(終了) PRINT "ルール";rule END SUB SUB SetPixel(x,y,c) !(x,y)の位置に点を描く SET POINT STYLE 1 IF c=1 THEN PLOT POINTS:x,y END SUB LET N=800 DIM c(N) !1次元セル空間 SET BITMAP SIZE N,N/2 !表示領域(横長) SET WINDOW 0,N,N/2,0 !ビットマップ座標 ※左上が原点、X軸は右へ、Y軸は下へ !FOR p=0 TO 2^8-1 !256種類 !FOR p=30 TO 30 FOR p=90 TO 90 !FOR p=110 TO 110 !FOR p=184 TO 184 MAT c=ZER !初期値 t=0 LET c(N/2)=1 CALL CellularAutomaton1D(p,N,c,N/2) WAIT DELAY 1 NEXT p END |
└!ライフゲーム(Conway'sGameofLife)(2次... 山中和義 2007/09/07 20:53:06 (修正2回) ツリーへ
Re: 1次元セルオートマトン |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/09/07 20:53:06 ** この記事は2回修正されてます | |
!ライフゲーム(Conway's Game of Life)(2次元セルオートマトン)
LET N=50 !大きさ DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵 ! 1 2 3 4 5 ! 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 DATA "□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□" !グライダー・ガン(gliderguns) DATA "□□□□□□□□□□□□□□□□□□□□□□■□■□□□□□□□□□□□" DATA "□□□□□□□□□□□□■■□□□□□□■■□□□□□□□□□□□□■■" DATA "□□□□□□□□□□□■□□□■□□□□■■□□□□□□□□□□□□■■" DATA "■■□□□□□□□□■□□□□□■□□□■■□□□□□□□□□□□□□□" DATA "■■□□□□□□□□■□□□■□■■□□□□■□■□□□□□□□□□□□" DATA "□□□□□□□□□□■□□□□□■□□□□□□□■□□□□□□□□□□□" DATA "□□□□□□□□□□□■□□□■□□□□□□□□□□□□□□□□□□□□" DATA "□□□□□□□□□□□□■■□□□□□□□□□□□□□□□□□□□□□□" MAT c=ZER LET i=1 DO READ IF MISSING THEN EXIT DO: t$ !初期化する FOR j=1 TO LEN(t$) IF t$(j:j)="■" THEN LET c(j,i)=1 !i行、j列 ※MAT PLOT CELLS使用のため転置 NEXT j LET i=i+1 !次へ LOOP LET g=1 !世代 DO SET DRAW mode hidden !ちらつき防止(開始) CLEAR MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g) SET DRAW mode explicit !ちらつき防止(終了) MAT nc=ZER FOR i=1 TO N !次の世代へ FOR j=1 TO N LET c1=c(i-1,j-1)+c(i-1,j)+c(i-1,j+1) !上 LET c2=c(i,j-1)+c(i,j+1) !中央 LET c3=c(i+1,j-1)+c(i+1,j)+c(i+1,j+1) !下 LET cnt=c1+c2+c3 !周囲(ムーア近傍)のセルの状態を得る !!!PRINT i;j;cnt !debug debug debug IF c(i,j)=1 THEN !セルが「生」なら IF cnt=2 OR cnt=3 THEN !維持! LET nc(i,j)=1 ELSE !過疎、過密で死亡! END IF ELSE !「死」なら IF cnt=3 THEN LET nc(i,j)=1 !誕生! END IF NEXT j NEXT i MAT c=nc !次へ LET g=g+1 LOOP END |
└自己相似なパターン 山中和義 2007/09/17 13:57:04 ツリーへ
Re: !ライフゲーム(Conway'sGameofLife)(2次... |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/09/17 13:57:04 | |
自己相似なパターン
規則を変えるとフラクタルな図形が現れます。 ●8の中から1つ LET N=100 !大きさ DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵 MAT c=ZER LET c(N/2,N/2)=1 !中央に1つ LET g=1 !世代 DO SET DRAW mode hidden !ちらつき防止(開始) CLEAR MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g) SET DRAW mode explicit !ちらつき防止(終了) MAT nc=ZER FOR i=1 TO N !次の世代へ FOR j=1 TO N LET c1=c(i-1,j-1)+c(i-1,j)+c(i-1,j+1) !上 LET c2=c(i,j-1)+c(i,j+1) !中央 LET c3=c(i+1,j-1)+c(i+1,j)+c(i+1,j+1) !下 LET cnt=c1+c2+c3 !周囲(ムーア近傍)のセルの状態を得る !!!PRINT i;j;cnt !debug debug debug LET nc(i,j)=c(i,j) !そのまま IF cnt=1 THEN LET nc(i,j)=1 !誕生! NEXT j NEXT i MAT c=nc !次へ LET g=g+1 LOOP END ●パリティ LET N=100 !大きさ DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵 MAT c=ZER LET N2=INT(N/2) LET c(N2-1,N2-1)=1 !3×3の正方形 LET c(N2-1,N2)=1 LET c(N2-1,N2+1)=1 LET c(N2,N2-1)=1 LET c(N2,N2)=1 LET c(N2,N2+1)=1 LET c(N2+1,N2-1)=1 LET c(N2+1,N2)=1 LET c(N2+1,N2+1)=1 LET g=1 !世代 DO SET DRAW mode hidden !ちらつき防止(開始) CLEAR MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g) SET DRAW mode explicit !ちらつき防止(終了) MAT nc=ZER FOR i=1 TO N !次の世代へ FOR j=1 TO N LET c1=c(i-1,j) !上 LET c2=c(i,j-1)+c(i,j)+c(i,j+1) !中央 LET c3=c(i+1,j) !下 LET cnt=c1+c2+c3 !周囲のセルの状態を得る !!!PRINT i;j;cnt !debug debug debug LET nc(i,j)=MOD(cnt,2) !パリティ(排他的論理和) NEXT j NEXT i MAT c=nc !次へ LET g=g+1 LOOP END |