Chaos Game
- posiziona un certo numero di punti di base
- il prossimo punto colorato è a due terzi tra quello attuale e un altro scelto a caso tra quelli di base
Quattro punti
import random # randint()
import pygame
WIDTH =800 # Larghezza
HEIGHT=800 # Altezza
SPAZIO=50 # Cornice vuota
RAGGIO=1 # Punto colorato
FRAME1=2 # Numero frame al secondo
FRAME2=500 # Numero punti per ogni frame
PUNTI=[]
PUNTI.append(( SPAZIO, SPAZIO))
PUNTI.append((WIDTH-SPAZIO, SPAZIO))
PUNTI.append(( SPAZIO, HEIGHT-SPAZIO))
PUNTI.append((WIDTH-SPAZIO, HEIGHT-SPAZIO))
NUM=len(PUNTI)
pygame.init()
screen=pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Chaos Game: frattale di Vicsek (4)")
clock=pygame.time.Clock()
# Disegna i punti base
for x,y in PUNTI:
pygame.draw.circle(screen, (0,0,128), (x,y), 25)
xx,yy = PUNTI[0]
ANCORA=True
while ANCORA:
# Gestione degli eventi
for ev in pygame.event.get():
if(ev.type == pygame.QUIT):
ANCORA=False
# Tono di verde
PENNA=(0, random.randint(128,255), 0)
# Un certo numero di punti
for i in range(FRAME2):
indice=random.randint(0, NUM-1)
x, y=PUNTI[indice]
xx=(xx+2*x)/3
yy=(yy+2*y)/3
pygame.draw.circle(screen, PENNA, (xx,yy), RAGGIO)
# Aggiorna il disegno
pygame.display.flip()
clock.tick(FRAME1)
pygame.quit()
Cinque punti
Aggiungi un altro punto… ottieni il frattale di Vicsek!
PUNTI.append((WIDTH/2, HEIGHT/2))
Otto punti
Con 8 punti intorno a un quadrato si ottiene il tappeto di Sierpinski!
PUNTI.append(( SPAZIO, SPAZIO))
PUNTI.append((WIDTH/2 , SPAZIO))
PUNTI.append((WIDTH-SPAZIO, SPAZIO))
PUNTI.append(( SPAZIO, HEIGHT/2 ))
PUNTI.append((WIDTH-SPAZIO, HEIGHT/2 ))
PUNTI.append(( SPAZIO, HEIGHT-SPAZIO))
PUNTI.append((WIDTH/2 , HEIGHT-SPAZIO))
PUNTI.append((WIDTH-SPAZIO, HEIGHT-SPAZIO))
Continua…
- Cambia la posizione di un punto
- Elimina uno dei punti
- …