質問
前回の質問で最後だと書きましたが、さらに1つ問題が発生したので質問したいと思います。すみません。これで最後にします。先ほど質問文を変更しました。すみません。
初期条件で乱数を用いて20%の確率で紫が、40%の確率で赤が、40%の確率で青が出るように設定しましたが、何回試しても紫が初めに出てきません。初期条件の書き方はこれで正しいのでしょうか?それとも乱数がうまく機能していないのでしょうか?
そして、5番目のセルと15番目のセルをAの値を1にして、10番目のセルと20番目のセルをAの値を3にして、紫色にしたのち、その他のセルを50%でAの値を2にして赤色に、50%でAの値を4にして青色にする初期条件を書こうとしましたが、できませんでした。これはどうすればよいのでしょうか?
python3
1from tkinter import * 2import time 3import tkinter as tk 4import random 5import math 6#配列の宣言 7def array2(N1,N2): 8 return [[0 for j in range(N2)]for k in range(N1)] 9def array3(N1,N2,N3): 10 return [array2(N2,N3)for k in range(N1)] 11#セルの初期設定 12def initdt(): 13 A=array3(1000,31,31) 14 B=array3(1000,31,31) 15 for i in range(1,31): 16 r_i=random.random() 17 if (r_i <= 0.10): 18 A[0][i][15]=1 19 B[0][i][15]=1.0 20 if (r_i > 0.10 or r_i <= 0.20): 21 A[0][i][15]=3 22 B[0][i][15]=1.0 23 if (r_i > 0.20 or r_i <= 0.60): 24 A[0][i][15]=2 25 B[0][i][15]=0.1 26 if (r_i > 0.60): 27 A[0][i][15]=4 28 B[0][i][15]=0.1 29 return A , B 30#セルオートマトンの実行 31def execCell(A,B,i1): 32 i2 = 1 + i1 33 for i in range(1,30): 34 if A[i1][i][15] == 1: 35 B[i2][i][15] = 0.8 * B[i1][i][15] 36 if (0 <= B[i2][i][15] < 0.5): 37 A[i2][i][15] = 2 38 if (0.5 <= B[i2][i][15] <= 1): 39 A[i2][i][15] = 1 40 if A[i1][i][15] == 2: 41 if (A[i1][i-1][15] == 1 or 2) and (A[i1][i+1][15] == 1 or 2): 42 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.25 * B[i1][i+1][15] + 0.25 * B[i1][i-1][15] 43 if (A[i1][i-1][15] == 3 or 4) and (A[i1][i+1][15] == 1 or 2): 44 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.75 * B[i1][i-1][15] + 0.25 * B[i1][i+1][15] 45 if (A[i1][i-1][15] == 1 or 2) and (A[i1][i+1][15] == 3 or 4): 46 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.25 * B[i1][i-1][15] + 0.75 * B[i1][i+1][15] 47 if (A[i1][i-1][15] == 3 or 4) and (A[i1][i+1][15] == 3 or 4): 48 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.75 * B[i1][i-1][15] + 0.75 * B[i1][i+1][15] 49 if (0 <= B[i2][i][15] < 0.5): 50 A[i2][i][15] = 2 51 if (0.5 <= B[i2][i][15] <= 1): 52 A[i2][i][15] = 1 53 if (1.0 < B[i2][i][15]): 54 A[i2][i][15] = 1 55 B[i2][i][15] = 1.0 56 if A[i1][i][15] == 3: 57 B[i2][i][15] = 0.8 * B[i1][i][15] 58 if (0 <= B[i2][i][15] < 0.5): 59 A[i2][i][15] = 4 60 if (0.5 <= B[i2][i][15] <= 1): 61 A[i2][i][15] = 3 62 if A[i1][i][15] == 4: 63 if (A[i1][i-1][15] == 1 or 2) and (A[i1][i+1][15] == 1 or 2): 64 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.10 * B[i1][i+1][15] + 0.10 * B[i1][i-1][15] 65 if (A[i1][i-1][15] == 3 or 4) and (A[i1][i+1][15] == 1 or 2): 66 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.40 * B[i1][i-1][15] + 0.10 * B[i1][i+1][15] 67 if (A[i1][i-1][15] == 1 or 2) and (A[i1][i+1][15] == 3 or 4): 68 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.10 * B[i1][i-1][15] + 0.40 * B[i1][i+1][15] 69 if (A[i1][i-1][15] == 3 or 4) and (A[i1][i+1][15] == 3 or 4): 70 B[i2][i][15] = 0.8 * B[i1][i][15] + 0.40 * B[i1][i-1][15] + 0.40 * B[i1][i+1][15] 71 if (0 <= B[i2][i][15] < 0.5): 72 A[i2][i][15] = 4 73 if (0.5 <= B[i2][i][15] <= 1): 74 A[i2][i][15] = 3 75 if (1.0 < B[i2][i][15]): 76 A[i2][i][15] = 3 77 B[i2][i][15] = 1.0 78#セルの位置決めとIDの設定 79def drawCell(canvas,A,k): 80 x2=0 81 CID=array2(31,31) 82 for i in range(1,30): 83 x1=x2 84 x2=x1+10 85 y2=0 86 for j in range(1,30): 87 y1=y2 88 y2=y1+10 89 CID[i][j]=canvas.create_rectangle(x1,y1,x2,y2,fill='black') 90 return CID 91#セルの色設定 92def modifyCell(canvas,A,k,CID): 93 CL=['black','#800080','#ff0000','#800080','#0000ff'] 94 for i in range(1,30): 95 for j in range(1,30): 96 canvas.itemconfig(CID[i][j],fill=CL[A[k][i][j]]) 97 canvas.itemconfig(CID[i][j],outline=CL[A[k][i][j]]) 98#Tk初期設定 99def initTk(): 100 tk=Tk(); tk.title("2D Cell Automaton"); tk.resizable(0,0) 101 return tk 102#画面キャプチャ用 103def leftMouseDown(event): 104 global canvas, A,k,CID 105 modifyCell(canvas,A,k,CID) 106 execCell(A,B,k) 107#実行メイン 108A,B=initdt() 109root=initTk() 110canvas=Canvas(root,width=290,height=290,highlightthickness=0) 111canvas.pack() 112CID=drawCell(canvas,A,0) 113k=0 114 115def animate(): 116 global k 117 modifyCell(canvas, A, k, CID) 118 execCell(A,B,k) 119 k = 1 + k 120 root.after(200, animate) 121 122root.after(200, animate) 123root.mainloop()
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 07:43