# EDENUV MODEL # nacteme grafickou knihovnu a numericku knihovnu import matplotlib as mpl from matplotlib import pyplot as plt import numpy as np # definujeme rozmer mrizky a pocet kroku roz = 200 krok = 20000 # vytvorime pole nul, do ktereho budeme ukladat stavy bunek # zavorka (kroky, rozmer) udava velikost 2D pole pole = np.zeros((roz, roz),dtype=np.int) # inicializujeme pole[100,100] = 1 for i in range(krok): # funkce where vrati indexy prvku, ktere maji hodnotu jedna, # ve forme seznamu obsahujiciho dve pole, kde kazde z techto poli # obsahuje prislusne x,y souradnice indexy = np.where(pole == 1) # nahodne vybereme index rand = np.random.randint(len(indexy[0])) ind = [(indexy[0])[rand],(indexy[1])[rand]] # prozkoumame okoli odpovidajiciho prvku soused1 = pole[(ind[0]+1) % roz,ind[1]] soused2 = pole[ind[0],(ind[1]+1) % roz] soused3 = pole[(ind[0]-1) % roz,ind[1]] soused4 = pole[ind[0],(ind[1]-1) % roz] sousedi = np.array([soused1,soused2,soused3,soused4]) sous_indexy = np.where(sousedi == 0) # pokud jsou sousedi zaplneni, nastavime pole[ind] na 2, # abychom ho jiz priste neprohledavali if len(sous_indexy[0]) == 0: pole[ind[0],ind[1]] = 2 # nahodne vybereme prazdnou sousedni bunku a zaplnime ji else: sous_ind = (sous_indexy[0])[np.random.randint(len(sous_indexy[0]))] if sous_ind == 0: pole[(ind[0]+1) % roz,ind[1]] = 1 elif sous_ind == 1: pole[ind[0],(ind[1]+1) % roz] = 1 elif sous_ind == 2: pole[(ind[0]-1) % roz,ind[1]] = 1 elif sous_ind == 3: pole[ind[0],(ind[1]-1) % roz] = 1 # definujeme barevne schema pomoci vyctu, v nasem pripade cernobile barvy = mpl.colors.ListedColormap(['white','black','grey']) # definujeme prechod mezi barvami kdekoli mezi 0 a 1 hranice=[0,0.5,1.5,2] # pouzijeme barvy a hranice k normovani barevne mapy norma = mpl.colors.BoundaryNorm(hranice, barvy.N) # vykreslime barevnou mapu a zobrazime ji mapa = plt.imshow(pole,cmap=barvy,interpolation='None',norm=norma,origin='lower') plt.xlabel('x') plt.ylabel('y') plt.show()