diff --git a/day_and_night.py b/day_and_night.py new file mode 100644 index 0000000..643ba14 --- /dev/null +++ b/day_and_night.py @@ -0,0 +1,48 @@ +import numpy as np +import time +from lib import fft_convolve2d +import matplotlib.pyplot as plt +plt.ion() + +def day_and_night(state, k): + """ + 'day & night' automata state transition + """ + # computes sums around each pixel + b = fft_convolve2d(state,k).round() + c = np.zeros(b.shape) + + c[np.where((b == 3) & (state == 1))] = 1 + c[np.where((b == 6) & (state == 1))] = 1 + c[np.where((b == 7) & (state == 1))] = 1 + c[np.where((b == 8) & (state == 1))] = 1 + + c[np.where((b == 3) & (state == 0))] = 1 + c[np.where((b == 4) & (state == 0))] = 1 + c[np.where((b == 6) & (state == 0))] = 1 + c[np.where((b == 7) & (state == 0))] = 1 + c[np.where((b == 8) & (state == 0))] = 1 + + # return new state + return c + +if __name__ == "__main__": + # set up board + m,n = 100,100 + A = np.zeros((m,n)) + A = 0.63*np.random.random(m*n).reshape((m, n)) + A = A.round() + + # construct convolution kernel + k = np.zeros((m, n)) + k[m/2-1 : m/2+2, n/2-1 : n/2+2] = np.array([[1,1,1],[1,0,1],[1,1,1]]) + + # plot each frame + plt.figure() + img_plot = plt.imshow(A, interpolation="nearest", cmap = plt.cm.gray) + plt.show() + while True: + A = day_and_night(A, k) + img_plot.set_data(A) + plt.draw() + time.sleep(0.01) diff --git a/two_by_two.py b/two_by_two.py index dd0666b..864774e 100644 --- a/two_by_two.py +++ b/two_by_two.py @@ -40,4 +40,4 @@ def two_by_two(state, k): A = two_by_two(A, k) img_plot.set_data(A) plt.draw() - time.sleep(0.1) + time.sleep(0.01)