Antescience

Antescience

Théorie du Chaos


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()

 

 

 

 

20/12/2024
0 Poster un commentaire