DLA Diffusion Limited Agregation
Le dimanche 12 août 2007 à 12:38 :: Flash-AS3 :: #23 :: rss :: 1981 lectures
ou Agrégation Limitée par Diffusion. En fait, c'est un peu comme un L-system sauf que ça permet de simuler une croissance par agrégation au lieu de faire une propagation. D'ailleurs ça sert plutôt à modéliser des réactions chimiques que des processus organiques. Par exemple une élctrolyse quand les anions se collent à l'anode. on utilise ça pour faire les plaquage (plaqué or comme ma carte Gold)
N'allez pas croire que c'est très savant, je viens de relire un article wikipédia sur l'électrolyse 
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:
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.
copains
Commentaires
1. Le lundi 13 août 2007 à 12:15, par Tekkila
2. Le lundi 13 août 2007 à 19:50, par Seraf
3. Le lundi 13 août 2007 à 19:55, par Tekkila
4. Le lundi 13 août 2007 à 22:36, par nicoptere
5. Le mardi 14 août 2007 à 20:28, par starmonkey
6. Le samedi 18 août 2007 à 08:07, par jeanphilippe
7. Le jeudi 23 août 2007 à 19:15, par nicoptere
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.