DEV Community

Cover image for Créer un Univers avec Python : Une Simulation Inspirée par la Poésie et le Cosmos
Khadidja Bounadja
Khadidja Bounadja

Posted on

Créer un Univers avec Python : Une Simulation Inspirée par la Poésie et le Cosmos

J'ai toujours pensé que les théories les plus complexes pouvaient être comprises avec des analogies simples. Guidé par mon intuition et inspiré par des textes anciens, j'ai voulu créer une simulation qui donne vie à une idée fascinante : et si l'univers était un organisme vivant, un immense cerveau ?
Ce projet explore la naissance, la mort et le cycle de la matière, non pas avec des équations complexes, mais avec la logique d'un simple code Python.
Le Concept : De la Poésie au Code
Ma théorie repose sur quelques principes :
La Matière Noire et l'Énergie Noire : La matière noire est la "structure" de l'univers, une obscurité dormante. L'énergie noire est le "déclencheur", la force qui "perturbe" cette obscurité pour créer la lumière.
La Naissance de l'Étoile ("Pouf Chocapic") : Une étoile naît quand la matière "soupe" consomme assez d'énergie noire en un point précis. C'est le moment de la création.
Le Cycle Infini : Une étoile est comme une plante qui naît, se nourrit, meurt et dont les résidus servent à créer de nouvelles planètes, perpétuant le cycle.
Pour visualiser ces idées, j'ai utilisé Python pour modéliser une petite portion de mon univers.
La Simulation : Comment le Code Fonctionne
Le code utilise la librairie numpy pour créer une grille (notre univers) et matplotlib pour en faire une image. Le processus est simple :
Création du Vide Cosmique : Une grille est remplie d'une valeur de base représentant le potentiel de l'énergie noire.
L'Action de la Matière : Des particules de matière sont placées aléatoirement et commencent à "soustraire" de l'énergie noire.
La Naissance : Lorsque le potentiel d'énergie noire d'un point atteint un seuil critique, une étoile est née ! Le code capture cet instant et crée une image.

Voici le code complet. Les commentaires expliquent chaque étape.

[4]

-- coding: utf-8 --

import numpy as np
import random
import math

--- Règles de l'univers ---

force_de_lumiere = 3 * 3
nombre_particules_matiere = 200
valeur_energie_noire_de_base = 20
grid_size = 50

--- Création du cosmos ---

cosmic_void = np.full((grid_size, grid_size), valeur_energie_noire_de_base)
particules = [{'pos': (random.randint(0, grid_size - 1), random.randint(0, grid_size - 1)), 'force': 1} for _ in range(nombre_particules_matiere)]

print("Le cosmos est créé, avec un potentiel d'énergie noire élevé.")

--- Simulation de la naissance ---

etoile_creee = False
for temps in range(1, 101):
nouvelle_grille = np.copy(cosmic_void)

for p in particules:
    nouvelle_grille[p['pos'][0], p['pos'][1]] -= p['force']

for y in range(grid_size):
    for x in range(grid_size):
        if nouvelle_grille[y, x] <= (valeur_energie_noire_de_base - force_de_lumiere):
            masse_etoile = valeur_energie_noire_de_base - nouvelle_grille[y, x]
            print(f"\nPOUF CHOCAPIC ! Une étoile est née à ({y}, {x}) avec une masse de {masse_etoile:.2f} !")
            etoile_creee = True
            break
    if etoile_creee: break
if etoile_creee: break

if temps % 10 == 0:
    print(f"Étape {temps} : La création continue...")
Enter fullscreen mode Exit fullscreen mode

print("\nLa simulation de la naissance est terminée.")
Le cosmos est créé, avec un potentiel d'énergie noire élevé.
Étape 10 : La création continue...
Étape 20 : La création continue...
Étape 30 : La création continue...
Étape 40 : La création continue...
Étape 50 : La création continue...
Étape 60 : La création continue...
Étape 70 : La création continue...
Étape 80 : La création continue...
Étape 90 : La création continue...
Étape 100 : La création continue...

La simulation de la naissance est terminée.

[2]
1 s

-- coding: utf-8 --

import random
import time

--- Règles de l'univers ---

masse_critique = 50
naine_blanche_seuil = 20
etoile_neutrons_seuil = 40

--- Création de l'étoile ---

etoile_masse = 100

print(f"Une étoile est née avec une masse de {etoile_masse}.")

--- Simulation de la mort ---

while etoile_masse > masse_critique:
perte_masse = random.uniform(1, 5)
etoile_masse -= perte_masse
print(f"L'étoile s'use... Masse restante : {etoile_masse:.2f}")
time.sleep(0.1)

--- Le destin final ---

print(f"\nL'étoile a atteint la masse critique de {masse_critique} !")

if etoile_masse < naine_blanche_seuil:
print("L'étoile a terminé son cycle et est devenue : Naine Blanche")
elif etoile_masse < etoile_neutrons_seuil:
print("L'étoile a terminé son cycle et est devenue : Étoile à Neutrons")
else:
print("L'étoile a terminé son cycle et est devenue : Trou Noir")

print("\nLe cycle de vie et de mort de l'étoile est terminé.")
Une étoile est née avec une masse de 100.
L'étoile s'use... Masse restante : 97.76
L'étoile s'use... Masse restante : 95.43
L'étoile s'use... Masse restante : 93.23
L'étoile s'use... Masse restante : 89.64
L'étoile s'use... Masse restante : 88.06
L'étoile s'use... Masse restante : 84.97
L'étoile s'use... Masse restante : 79.97
L'étoile s'use... Masse restante : 77.70
L'étoile s'use... Masse restante : 74.58
L'étoile s'use... Masse restante : 70.17
L'étoile s'use... Masse restante : 67.67
L'étoile s'use... Masse restante : 63.38
L'étoile s'use... Masse restante : 60.06
L'étoile s'use... Masse restante : 56.44
L'étoile s'use... Masse restante : 55.20
L'étoile s'use... Masse restante : 53.17
L'étoile s'use... Masse restante : 50.17
L'étoile s'use... Masse restante : 48.06

L'étoile a atteint la masse critique de 50 !
L'étoile a terminé son cycle et est devenue : Trou Noir

Le cycle de vie et de mort de l'étoile est terminé.

[3]
0 s

-- coding: utf-8 --

import numpy as np
import random
import math
import time

--- Règles de l'univers ---

force_de_lumiere = 3 * 3
nombre_particules_matiere = 200
valeur_energie_noire_de_base = 20
grid_size = 50
masse_critique = 5

--- Création du cosmos ---

cosmic_void = np.full((grid_size, grid_size), valeur_energie_noire_de_base)
particules = [{'pos': (random.randint(0, grid_size - 1), random.randint(0, grid_size - 1)), 'force': 1} for _ in range(nombre_particules_matiere)]

print("Le cosmos est créé, avec un potentiel d'énergie noire élevé.")

--- Fonctions pour le cycle ---

def vie_etoile(etoile_masse):
perte_masse = random.uniform(0.1, 0.5)
etoile_masse -= perte_masse
return etoile_masse

def mort_stellaire(masse_noyau):
if masse_noyau < 3:
return "Naine Blanche"
elif masse_noyau < 7:
return "Étoile à Neutrons"
else:
return "Trou Noir"

--- Simulation du cycle complet ---

etoile_creee = False
etoile_masse = 0

Phase 1 : La naissance

for temps in range(1, 101):
nouvelle_grille = np.copy(cosmic_void)
for p in particules:
nouvelle_grille[p['pos'][0], p['pos'][1]] -= p['force']

for y in range(grid_size):
    for x in range(grid_size):
        if nouvelle_grille[y, x] <= (valeur_energie_noire_de_base - force_de_lumiere):
            etoile_masse = valeur_energie_noire_de_base - nouvelle_grille[y, x]
            print(f"\nPOUF CHOCAPIC ! Une étoile est née à ({y}, {x}) avec une masse de {etoile_masse:.2f} !")
            etoile_creee = True
            break
    if etoile_creee: break
if etoile_creee: break
Enter fullscreen mode Exit fullscreen mode

Phase 2 : La mort

if etoile_creee:
while etoile_masse > masse_critique:
etoile_masse = vie_etoile(etoile_masse)
time.sleep(0.1)

print(f"\nL'étoile a atteint la masse critique de {masse_critique} !")
destin_final = mort_stellaire(etoile_masse)
print(f"L'étoile a terminé son cycle et est devenue : {destin_final}")
Enter fullscreen mode Exit fullscreen mode

print("\nLe cycle de l'étoile est terminé.")
Le cosmos est créé, avec un potentiel d'énergie noire élevé.

Le cycle de l'étoile est terminé.

Uploading image

Top comments (0)