Reprendre le code :
# https://scienceetonnante.com/2013/10/28/les-automates-cellulaires-elementaires/
from PIL import Image
def creation_image(largeur,hauteur):
image = Image.new('RGB', (largeur,hauteur), (255,255,255))
# on met en noir le pixel du milieu de la première ligne
image.putpixel((largeur//2,0),(0,0,0))
image.save("MonImage.png", "PNG")
return image
image=creation_image(501,250)
def regle_en_binaire(entier):
'''
creation de la regle à partir d'un nbre entier
entier : int entre 0 et 255
return : tuple de longueur 8 donnant l'ecriture binaire de l'entier
>>>regle_en_binaire(12)
(0, 0, 0, 0, 1, 1, 0, 0)
>>>regle_en_binaire(128)
(1, 0, 0, 0, 0, 0, 0, 0)
'''
def lecture_bloc_centre_pixel(img,x,y):
'''
déterminer le nombre associé à un bloc de 3 pixels centré sur celui
de coordonnées (x,y)
en le convertissant en binaire
'''
pixel1=(img.getpixel((x-1,y))==(0,0,0))
pixel2=(img.getpixel((x,y))==(0,0,0))
pixel3=(img.getpixel((x+1,y))==(0,0,0))
return pixel1*4+pixel2*2+pixel3
def evolution(regle):
'''
applique l'evolution selon la regle fixée
'''
regle_bin=regle_en_binaire(regle)
global image
image_retour=image.copy()
l,h=image.size
for y in range(h-1):
for x in range(1,l-1):
bloc=lecture_bloc_centre_pixel(image_retour,x,y)
resultat_evol=regle_bin[7-bloc]
if resultat_evol==1:
image_retour.putpixel((x,y+1),(0,0,0))
image_retour.show()
image_retour.save("regle"+str(regle)+".png", "PNG")
et compléter la fonction regle_en_binaire().
Tester ensuite votre programme avec la commande evolution(126) par exemple.