Skip to content
Snippets Groups Projects
Commit 3b272b80 authored by phwitte's avatar phwitte
Browse files

Update Life.py

parent ff7076ce
No related branches found
No related tags found
No related merge requests found
......@@ -15,7 +15,7 @@ matplotlib.use('TkAgg')
import matplotlib.pyplot as pyplot
def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 0, yshift= 0):
def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 1, yshift= 1):
width =2*r2+1
height=2*r2+1
......@@ -61,7 +61,7 @@ def circleArray(r1, r2, weight, oval=0, ovalscaling= 2, invers=False, xshift = 0
return map_
def squareArray(r1, r2, weight, rect=1, rectscaling= 2):
def squareArray(r1, r2, weight, rect=0, rectscaling= 2):
width = 2*r2+1
height=2*r2+1
......@@ -93,7 +93,7 @@ class Life(object):
n: the number of rows and columns
"""
def __init__(self, n, mode='wrap', random = True, p=0.001, radius1 = 3, radius2 = 6, weight=-0.5, doubleStates = False, inversion = False):
def __init__(self, n, mode='wrap', random = False, p=0.001, radius1 = 3, radius2 = 6, weight=-0.25, doubleStates = True, inversion = False):
"""Attributes:
n: number of rows and columns
mode: how border conditions are handled
......@@ -141,18 +141,31 @@ class Life(object):
"""Executes one time step."""
con = scipy.ndimage.filters.convolve(self.array,
self.weights,
mode=self.mode)
mode=self.mode, cval=0.0 )
#boolean = (con==3) | (con==12) | (con==13)
sideBorders = True
topbotBorders = True
if (not self.doubleStates):
boolean = (con >= 1)
for y in range(self.n):
for x in range(self.n):
if sideBorders and ((x < self.radius2) or (x > self.n-self.radius2)):
boolean[y][x] = True
if topbotBorders and ((y < self.radius2) or (y > self.n-self.radius2)):
boolean[y][x] = True
self.array = numpy.int8(boolean)
else:
print ("doublestates")
values = [[ 0 for x in range(self.n)] for y in range(self.n)]
for y in range(self.n):
for x in range(self.n):
if con[y][x] >= 4*self.radius2:
if sideBorders and ((x < self.radius2) or (x > self.n-self.radius2)):
values[y][x] = 0
if topbotBorders and ((y < self.radius2) or (y > self.n-self.radius2)):
values[y][x] = 0
elif con[y][x] >= 2*self.radius2:
values[y][x] = 2
elif con[y][x] >= 1:
values[y][x] = 1
......@@ -185,19 +198,21 @@ class LifeViewer(object):
self.pcolor = pyplot.pcolor(a, cmap=self.cmap)
self.fig.canvas.draw()
def animate(self, steps=10):
def animate(self, steps=1):
"""Creates the GUI and then invokes animate_callback.
Generates an animation with the given number of steps.
"""
self.steps = steps
self.fig.canvas.manager.window.after(1000, self.animate_callback)
self.fig.savefig('/home/phill/Cell_Automata/test_0/pic.png')
pyplot.show()
def animate_callback(self):
"""Runs the animation."""
for i in range(self.steps):
self.life.step()
self.fig.savefig('/home/phill/Cell_Automata/test_0/pic' + str(i)+ '.png')
self.update()
print ('end')
......@@ -209,7 +224,7 @@ def main(script, n=20, radius1 = 5, radius2 = 10,p= 0.1, weight=-0.5, doubleStat
life = Life(n, random=True, radius1 = radius1, radius2 = radius2, p = p, weight = weight, doubleStates=doubleStates, inversion=inversion)
#life.add_glider(10, 10)
viewer = LifeViewer(life)
viewer.animate(steps=100)
viewer.animate(steps=10)
""" df """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment