als kleine praktische Übung versuche ich aktuell Langtons Ameisen Fraktal mit Tkinter umzusetzen. Ich bin nun gerade dabei dazu ein Gitter zu erstellen. Dazu benutze ich ein Dict das zu jedem Feld dessen x Koordinate, Y Koordinate und seinen Zustand speichert. Wenn ich dieses Netz nun erzeuge dann funktioniert das alles solange ich mich im Rahmen von 10-20 x 10-20 Feldern bewege. Für das Fraktal werde ich allerdings mehr als 100x100 benötigen. Wenn ich versuche das mit meiner aktuellen Methode zu tun, dann rechnet er und rechnet und rechnet ... und stürzt ab.
Ich wende mich an euch in der Hoffnung dass jemandem eine Methode mit weniger Rechenlast einfällt - oder jemandem auffällt was die Rechenlast so exponentiell explodieren lässt.
Ich benötige KEINE Ratschläge zu meiner sonstigen bisherigen Umsetzung, so lieb diese auch gemeint sind
Code: Alles auswählen
#THIS IS GOING TO BE A VISUALIZED ALGORITHM OF LANGTONS ANTS
import tkinter as tk
class Interface(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self,master)
self.env = Environment(100,100,"black")
self.grid()
self.createNet(self.env.getX(), self.env.getY())
def createNet(self, x, y):
envGrid = self.env.getFields()
for field in envGrid:
newfield = tk.Label(self, bg=envGrid.get(field)[2], height=1, width=1)
newfield.grid(row = envGrid.get(field)[0], column = envGrid.get(field)[1],padx=2,pady=2)
class Environment(object):
def __init__(self, fields_x, fields_y, stand_cond):
self.x = fields_x
self.y = fields_y
self.stand_cond = stand_cond
self.fields = self.createFields()
#GETS
def getFields(self):
return self.fields
def getX(self):
return self.x
def getY(self):
return self.y
#METHODS
def createFields(self):
'''Creating Fields by following Pattern:
{fieldname: [x_value, y_value, condition]'''
if self.x > 100:
self.x = 100
if self.y > 100:
self.y = 100
self.fields = {}
for curX in range(self.x):
for curY in range(self.y):
fieldname = str(curX)+"x|y"+str(curY)
self.fields[fieldname] = [curX, curY, self.stand_cond]
print (self.fields)
return self.fields
app = Interface()
app.master.title("Langtons Ants")
app.mainloop()
Sans