Aller au contenu principal
sports_esports Lab Canvas 2D Récursivité L-système Zéro dépendance

Arbre fractal — la récursivité et les L-systèmes en Canvas 2D

Un arbre entièrement décrit par une règle de branchement répétée : chaque branche se scinde en deux sous-branches (angle ± θ, longueur × ratio) jusqu'à une profondeur donnée. Une démo Canvas 2D où j'illustre la récursivité, les systèmes de Lindenmayer (L-systèmes) et une oscillation façon vent obtenue par une sinusoïde. Zéro dépendance.

Souris : régler l'angle de branchement (X) et la profondeur (Y) R : régénérer une variante Espace : mettre en pause

Un arbre entier tenu dans une seule règle

Cet arbre n'est stocké nulle part. Je ne conserve pas la liste de ses branches, je conserve la règle qui les engendre : « une branche se scinde en deux sous-branches, chacune tournée d'un angle ± θ et raccourcie d'un facteur d'échelle ». Appliquée à elle-même, encore et encore, cette phrase unique suffit à faire pousser tout le feuillage. C'est le principe d'un système de Lindenmayer (L-système), formalisé par le biologiste Aristid Lindenmayer pour décrire la croissance des plantes.

La récursivité fait tout le travail

La fonction qui dessine une branche se termine en s'appelant deux fois elle-même, une fois pour chaque enfant, avec une longueur réduite et un angle incliné. Chaque appel replonge d'un niveau, jusqu'à une profondeur limite qui arrête la descente. C'est un cas d'école de récursivité : un problème visuellement complexe résolu par une poignée de lignes, parce que le sous-arbre gauche et le sous-arbre droit se traitent exactement comme l'arbre entier.

L'angle et le ratio dessinent l'espèce

Deux nombres suffisent à changer radicalement la silhouette. L'angle de branchement θ écarte plus ou moins les rameaux : resserré, l'arbre file vers le ciel comme un peuplier ; ouvert, il s'étale en boule comme un chêne. Le ratio de longueur, lui, décide de la vitesse à laquelle les branches maigrissent — un ratio proche de 1 donne un arbre dense et profond, un ratio faible un arbuste trapu. Déplacez la souris : l'axe horizontal règle l'angle, l'axe vertical la profondeur, et vous parcourez toute une flore d'un seul geste.

Un souffle de vent par une sinusoïde

Pour que l'arbre respire, j'ajoute à chaque angle une petite oscillation qui varie dans le temps : une sinusoïde, doublée d'une seconde de fréquence différente pour casser la régularité et imiter le bruit du vent réel. Surtout, l'amplitude croît avec la profondeur — le tronc reste stable, les rameaux fins frémissent. Ce simple dégradé d'inertie, de la base vers la cime, suffit à transformer un dessin figé en quelque chose de vivant.

Ce que je retiens pour vos projets

Un arbre foisonnant né d'une règle de trois lignes, c'est exactement la démarche que j'applique à un système d'entreprise : trouver la bonne abstraction, celle qui capture le motif répété plutôt que d'énumérer chaque cas à la main. Un code qui se ramifie proprement à partir d'un principe clair reste lisible, testable et facile à faire évoluer — là où une accumulation de cas particuliers finit toujours par étouffer. La complexité maîtrisée ne s'ajoute pas : elle se déduit d'une règle simple, bien posée.

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