graph_mondrian.py

Created by schraf

Created on July 11, 2022

1.09 KB

Programme qui permet de générer une “infinité” de tableaux aléatoires à la Piet Mondrian.

Plusieurs améliorations sont envisageables comme :
- Faire varier légèrement les couleurs des pixels pour donner un effet de texture
- Lorsque 2 blocs contigus ont la même couleur, ne pas afficher de trait noir entre les 2
- Éviter qu’un même bloc puisse être choisi plusieurs fois ce qui est le cas dans le programme proposé

Quelques exemples :


from random import randint,seed
from kandinsky import *
from time import sleep


def pos(nb, d):
  l =[]
  for i in range(nb):
    # espace entre traites >= 10px
    l.append(randint(1, d) * 10)
  # Ajout des bords extremes
  l.append(0)
  l.append(10*d+8)
  l.sort()  
  return l


def coul(n):
  # rouge - bleu - jaune - noir
  c = [[225,45,31],[19,4,109],[242,192,17],[12,12,12]]
  return color(c[n][0],c[n][1],c[n][2])

def rect(xmin, ymin, xmax, ymax, c):
  fill_rect(xmin,ymin,xmax-xmin,ymax-ymin,coul(c))

      
def mondrian(s):
  seed(s)
  # position lignes vert et horiz
  x = pos(randint(2,6), 31)
  y = pos(randint(2,5), 23)
  # nb de blocs en couleurs
  n = randint(8,20)
  for b in range(0,n):
    # choix du bloc
    i = randint(0,len(x)-2)
    j = randint(0,len(y)-2) 
    # choix couleur
    c = randint(0,3)
    rect(x[i],y[j],x[i+1],y[j+1],c)
  # Traits verticaux
  for i in x:
    rect(i,0,i+2,240,3)
  # Traits horizontaux
  for i in y:
    rect(0,i,320,i+2,3)  
    
while True:
  n = randint(10,100000)
  mondrian(n)
  sleep(.3)
  fill_rect(0,0,320,222,(255,255,255))