Aller au contenu principal
sports_esports Lab Canvas 2D Marche aléatoire Croissance fractale Rayon adaptatif

Agrégation limitée par diffusion — la croissance fractale par marche aléatoire en Canvas 2D

Une graine, des particules qui errent au hasard et se figent au contact de l'amas : de ce procédé purement local émerge une structure fractale dendritique, comme le givre ou un dépôt électrochimique. Grille d'occupation en tableau typé, rayon de lancement adaptatif et réapparition des marches perdues pour tenir le temps réel. Zéro dépendance.

Clic ou tap : ajouter une graine R : réinitialiser Espace : mettre en pause

Une fractale qui se construit toute seule

L'agrégation limitée par diffusion (DLA, pour diffusion-limited aggregation) n'a ni joueur ni score : c'est un procédé de croissance. Une graine est posée au centre. Des particules apparaissent au loin et errent au hasard ; dès que l'une d'elles touche l'amas, elle s'y fige définitivement. Répété des milliers de fois, ce geste minuscule fait émerger une structure fractale dendritique — la même famille de formes que le givre sur une vitre, une branche de corail ou un dépôt électrochimique. Personne ne dessine ces ramifications : elles sont la conséquence d'une règle purement locale.

La marche aléatoire, brique de base de la diffusion

Chaque particule se déplace d'une case vers l'une de ses huit voisines, tirée au sort à chaque pas. C'est une marche aléatoire, le modèle discret de la diffusion : le mouvement brownien d'une molécule dans un fluide. La particule ne vise rien, ne « cherche » pas l'amas — elle tâtonne. Le collage n'a lieu que lorsqu'elle arrive, par hasard, au contact d'une cellule déjà agrégée. Je vérifie ce contact sur une grille d'occupation : un simple tableau typé où chaque cellule retient l'ordre d'arrivée de la particule qui l'a remplie.

Pourquoi la forme se ramifie

L'asymétrie naît d'un biais géométrique. Une pointe qui dépasse de l'amas a statistiquement plus de chances d'intercepter une particule errante qu'un creux, protégé par ses voisines. Les extrémités captent donc l'essentiel du flux et croissent plus vite, tandis que l'intérieur reste vide : c'est cet écrantage qui produit les branches fines et l'aspect aéré, jamais un disque plein. Je colore d'ailleurs chaque cellule selon son ordre d'arrivée, de l'ambre au centre à l'indigo en périphérie : on lit ainsi l'histoire de la croissance, du cœur ancien vers les pointes récentes.

Faire tenir des milliers de marches en temps réel

Une marche aléatoire pure est terriblement lente : livrée à elle-même, une particule peut dériver à l'infini sans jamais revenir. J'applique donc deux optimisations classiques. Un rayon de lancement adaptatif : les particules n'apparaissent pas n'importe où, mais sur un cercle qui épouse la taille courante de l'amas — inutile de les faire naître au bout du monde. Et une réapparition immédiate dès qu'une particule s'éloigne trop : au lieu de suivre une trajectoire perdue jusqu'à sa fin, je la recycle sur le cercle de lancement. Plusieurs particules avancent à chaque image, et la croissance reste fluide sans jamais bloquer la boucle de rendu.

Ce que ce procédé dit de mon travail

Une forme complexe et organique peut naître d'une règle triviale répétée — à condition de dompter son coût. C'est exactement l'équilibre que je vise sur vos projets : un cœur de logique simple et lisible, entouré des quelques optimisations ciblées qui le rendent tenable à l'échelle réelle, sans jamais le complexifier inutilement. Un système dont on comprend le principe et les performances est un système que vous maîtrisez, que vous faites évoluer et dont vous restez pleinement propriétaire.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward