La différence entre un L-system et un DLA c'est donc qu'un DLA sert à modéliser des agrégats. ça paraît con dit comme ça. mais en gros le l-system part de la graine et explore le vaste monde de manière récursive en suivant une règle alors que les DLA attendent qu'un truc vienne se coller sur eux. l'agrégat de départ s'appelle un cluster en anglais donc j'ai gardé ce nom. Le truc qui vient se coller dessus c'est une particule toute bête qui se déplace dans l'espace.

Voila le thread qui m'a donné envie de refaire : galaxygoo pour la théorie c'est encore Paul Bourke qui s'y colle : dla3D
il crée des DLA en 3D (pourquoi faire simple quand on a le niveau) mais ça reste applicable en 2D (on fait ce qu'on peut ...)

j'ai téléchargé la source de galaxygoo mais c'est moche... enfin je trouve moche parce que c'est des clips et des htiTests... j'ai préféré faire un bitmapdata et un hitTest sur le pixel comme ça on peut utiliser l'api de dessin pour faire des formes tordues et le système reste robuste et pas trop gourmand en ressources.

Une fois n'est pas coutume, les problèmes n'étaient pas où je les attendais. Je pensais que le gros du problème viendrait de ce test de collisions mais en fait non, le plus compliqué c'est l'émetteur. Je voulais faire en sorte :

  • qu'il puisse y en avoir plusieurs
  • qu'ils aient différents modes d'émission
  • qu'ils soient paramétrables

ça donne un pack de 3 classes :

  • DLA : met en place le cluster gère les émetteurs et opère les tests à intervalle régulier
  • DLAPoint : étend flash.geom.Point et lui ajoute une vitesse en x / y + une méthode de mouvement et de dessin.
  • DLAEmitter : les émetteurs

ci dessous une liste des différents types de configurations. la source contient le dernier (avec ceux qui bougent). pour des raisons de sécurité, je te suggère de les regarder un par un (focus, click > start et reclick>stop ). Après si tu veux casser ton ordinateur tu les mets tous ensemble d'un coup. Ils meurrent quand l'agrégat les touche c'est pour ça des fois ça s'arrête super vite ( les deux derniers). click, click et ça repart.
Un autre truc important comme c'était pour mes tests, j'avais pas dit de réinitialiser le tableau des émetteurs donc si tu click et click alors quel'émetteur n'est pas mort il sera encore présent dans la session d'après et là tu risques vraiment d'avoir des problèmes au bout de 47 clickclick. les joies de l'expérimental :) c'est corrigé dans le zip

émetteur aléatoire:

émetteur point :

émetteur angle 2 :

émetteur angle 3:

émetteur cercle extérieur :

émetteur cercle intérieur :

émetteur ligne :

plusieurs émetteurs:

le zip avec tout dedans : DLA

on peut imaginer une petite classe pour créer un clip à partir d'une image, PicHolder mettons, elle étend Sprite et prend une url en paramètre (charge et affiche l'image, c'est tout) puis on la redimensionne rotationne en fonction de la particule et ça peut donner des jolis trucs je pense.

Sinon, dans mes essais j'ai remarqué qu'on pouvait faire un substrate assez facilement en changeant 2, 3 règles : dans mon truc, la collision avec un pixel opaque cause la destruction de la particule. dans le substrate la rencontre avec un mur arrête le dessin. le tout c'est de stocker intelligemment les points de départ et d'arrivée, d'en déduire des lignes et lancer le traçage progressif des normales à partir de barycentres soit aléatoires soit augmentés progressivement le long de la ligne. c'est une autre histoire mais ça donne plein d'idées.