Générateur de Chaos (programmé en python)
Voici un générateur de Chaos de ma conception, programmé en python, et nécessitant pygame.
Il crée un tentacule qui se meut Chaotiquement. Les conditions initiales dépendent de la graine de hasard choisie. Le tentacule ne se meut pas par le hasard.
#
# tentacule v2.py
#
# programme de reflexion sur
# la théorie du chaos
#
# par Bruno Vignoli
# 13/06/2024
#
# imports
import pygame
from pygame.locals import *
import math, random
# initialisation de pygame
pygame.init()
# définition de la fenêtre
size = width, height = 512, 512
screen = pygame.display.set_mode(size)
# constantes
MAX_DISCS = 100
MAX_SPEED = 5
MAX_RAY = 8
DIV_RAY = 1
# définition des couleurs
BLACK = 0, 0, 0
WHITE = 255, 255, 255
RED = 255, 0, 0
# définition des variables
r = 10
sx = 256
sy = 256
loop = True
# établir la graine de hasard à "toujours la même chose"
# (changer la valeur pour changer les conditions initiales)
random.seed(0)
# definir des disques
disc = []
for i in range(MAX_DISCS):
speed = random.randrange(1, MAX_SPEED)
ray = random.randrange(1, MAX_RAY) / DIV_RAY
angle = random.randrange(0, 360)
spin = (random.randrange(0, 1) * 2) - 1
disc.append([ray, angle, speed, spin])
# boucle principale
while loop:
# événements
for event in pygame.event.get():
# fermeture de la fenêtre ?
if event.type == pygame.QUIT:
# quitter la boucle
loop = False
# remplir l'écran en noir
screen.fill(BLACK)
# calculer la position du disque maximal
x = sx
y = sy
# dessiner le disque central
pygame.draw.circle(screen, WHITE, (sx, sy), r / 2, 0)
for i in range(MAX_DISCS):
oldx = x
oldy = y
x += disc[i][0] * math.cos(math.radians(disc[i][1]))
y += disc[i][0] * math.sin(math.radians(disc[i][1]))
# dessiner la ligne précédente
pygame.draw.line(screen, RED, (oldx, oldy), (x, y))
# calculer la nouvelle position de chaque disque
disc[i][1] += disc[i][2] * disc[i][3]
if disc[i][1] >= 360:
disc[i][1] = 360
disc[i][3] = -disc[i][3]
elif disc[i][1] < 0:
disc[i][1] = 0
disc[i][3] = -disc[i][3]
# dessiner le disque à l'écran
pygame.draw.circle(screen, WHITE, (x, y), r, 0)
# affiche la nouvelle frame
pygame.display.flip()
# attendre 1 / 16 de seconde
pygame.time.wait(16)
# quitter pygame
pygame.quit()