Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1920:zehnter_gruppentermin_06.02.2020

Dies ist eine alte Version des Dokuments!


Zehnter Gruppentermin

Anwesende: Hanna, Richard, und Gast

Was wir geschafft haben: - man kann das Programm anhalten und dann wieder fortführen - man kann Zellzustände per Mausklick/Mausbewegung verändern - der zeitkritischste Schritt ist nun um 4 Größenordnungen schneller, durch boolsche abfragen

Umgeschmissene Hürden entlang des heutigen Marathons: - Einlesen in Events (in Matplotlib) z.B. mit Leertaste stoppen - Einsamkeit ohne Mazal und Leroy und die einhergehende Teaminstabilität - allen Fortschritt der heutigen Session zu handlen, das übermotivierte Team zu koordinieren und jeden an allem Fortschritt teilhaben lassen

Ziele/Ideen fürs nächste Mal: - Nebenplots mit statistiken zu Alter/Anzahl der Zellen o.Ä. - Code ein wenig durchkämmen (mancherorts wurde heute schlampig gecodet)

Aktuelle GOL Datei: <code> # -*- coding: utf-8 -*- „“„ Created on Thu Jan 30 15:06:55 2020

@author: HP “„“

import random import numpy as np import matplotlib.pyplot as plt from PIL import Image from math import floor, ceil import time

# Größe der Matrix # Die Matrix wird zufällig mit Nullen und Einsen gefüllt

def Tripleeinheitsmatrix(zeilen,spalten):

  tem = np.zeros ((zeilen,spalten))
  for i in range(0, zeilen):
      for j in range(0, spalten):
          if i==j:
              tem[(i,j)] = 1
          else:
              tem[(i,j)] = 0
              
  for i in range(0, zeilen):
      for j in range(0, spalten):
          if i==(j+1):
              tem[(i,j)] = 1
  for i in range(0, zeilen):
      for j in range(0, spalten):
          if j==(i+1):
              tem[(i,j)] = 1
              
  tem[0,tem.shape[1]-1] = 1
  tem[tem.shape[1]-1,0] = 1
         
  return tem
              

def BerechneAnzahlNachbarn(zustand):

  z = np.dot(tem, zustand)       
  k = np.dot(z, tem)
  anzahlNachbarn = k - zustand
      
  return anzahlNachbarn

def BerechneNeuenZustand(zustand, anzahlNachbarn):

  #Ursprungszelle Tod + genau 3 lebende Nachbarn = lebend
  #Ursprungszelle Lebend + genau 1 lebenden Nachbarn = tot
  #Ursprungszelle Lebend + 2 o. 3 Nachbarn = lebend
  #Ursprungszelle lebend + 4 oder mehr Nachbarn = tot
  
  #for i in range(0, zeilen):
  #    for j in range(0, spalten):
  #        if zustand[(i,j)] == 1 and (anzahlNachbarn[(i,j)] in range(2) or anzahlNachbarn[(i,j)] in range(4,9)):
  #            zustand[(i,j)]=0
  #        elif zustand[(i,j)] == 0 and anzahlNachbarn[(i,j)]==3:
  #            zustand[(i,j)]=1
  zustand = (anzahlNachbarn == 3) + ((anzahlNachbarn == 2) * zustand)
  return zustand

def Schritt():

  global zustand, cmap
  start_time = time.time()
  anzahlNachbarn = BerechneAnzahlNachbarn(zustand)
  print('Berechne Nachbarn:', time.time() - start_time)
  
  start_time = time.time()
  zustand = BerechneNeuenZustand(zustand, anzahlNachbarn)
  print('Berechne neuen Zustand:', time.time() - start_time)
  cmap = cmap * zustand + zustand
  return zustand
              

def Wiederhole(t):

  for i in range(t):
      Schritt()

def MachQuadrat(pixel):

  breite = pixel.shape[0]
  hoehe = pixel.shape[1]
  size = max(breite, hoehe)
  links = floor((size - breite) / 2)
  rechts = ceil((size - breite) / 2)
  oben = floor((size - hoehe) / 2)
  unten = ceil((size - hoehe) / 2)
  pad_width = ((links, rechts), (oben, unten))
  pixel = np.pad(pixel, pad_width, mode='constant', constant_values=0)
  return pixel

#t= int(input('Gib die Zeitschritte ein: ')) def Initialisiere():

  global zustand, tem, zeilen, spalten, cmap
  modus =  int(input('Gib den Modus 1, 2, 3 oder 4 ein:  '))
  if modus==1 or modus==2:
      spalten = zeilen = int(input('Gib die Anzahl der Zeilen/Spalten ein: '))
  #zustand = np.zeros
  if modus==1:
      zustand = np.round(np.random.random((zeilen,spalten))).astype(int)
  
  elif modus==2:
      zustand=np.zeros((zeilen,spalten))
      for i in range(0,zeilen):
          for j in range (0,spalten):
              if j%2==0:
                  zustand[(i,j)]=0
              else:
                  zustand[(i,j)]=1
  
      if zustand[(int(zeilen/2),int(spalten/2))]==0:
          zustand[(int(zeilen/2),int(spalten/2))]=1
          zustand[(int((zeilen/2)+1),int(spalten/2))]=1
          
      else:
          zustand[(int(zeilen/2),int(spalten/2))]=0
          zustand[(int((zeilen/2)+1),int(spalten/2))]=0
  
  elif modus==3:
      DateiName = input('was willste oeffnen? ')
      Datei = open(DateiName)
  
      DateiAlsListe = []
      for line in Datei:
          DateiAlsListe.append([int(c) for c in list(line.rstrip())])
      DateiAlsMatrix = np.array(DateiAlsListe)
      
      zustand = MachQuadrat(DateiAlsMatrix)
      zeilen = spalten = zustand.shape[0]
      
  elif modus==4:
      dateiname = input('Gib den Bildpfad ein: ')
      bild = Image.open(dateiname)
      bild = bild.convert('1')
      bild.thumbnail((500,500))
      pixel = np.array(bild)
      zustand = MachQuadrat(pixel)
      zeilen = spalten = zustand.shape[0]
  tem = Tripleeinheitsmatrix(zeilen, spalten)
  cmap = zustand

#Wiederholungen(t)

<\code>

ws1920/zehnter_gruppentermin_06.02.2020.1581007118.txt.gz · Zuletzt geändert: 2020/02/06 17:38 von richard.wonneberger