begin process at 2012 05 26 03:46:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

MX2004: CLASS

 > CLASS FLOODFILL (IMPLEMENTATION DE L'ALGO DE REMPLISSAGE PAR GERME)

CLASS FLOODFILL (IMPLEMENTATION DE L'ALGO DE REMPLISSAGE PAR GERME)


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :MX2004: CLASS Niveau :Initié Date de création :29/04/2004 Date de mise à jour :13/07/2004 22:36:00 Vu :7 263

Auteur : BlackWizzard

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


 Description

Cette class fonctionne dans des matrices de type {array[y][x] = valeur}
elle sert a connaitre les case de meme valeur situé dans la meme zone que la case indiqué lors de l'initialisation. Comme ce n'est pas tres clair, voici un exemple:
voici une matrice, un array a 2 dimention de type array[number][letter].

0ABCDEFGHIJKLM
0xxxxxxx xxx0xx
1xxxxx00xxx0xx
2xxxx0000xxxxx
3xx000xx00 xxxx
4xxxxxxx00xxxx
5xxxxxxxxxxxxx

Si on init la class sur la case [2][g], nous obtiendrons dans un array toutes les case remplies de "0" SAUF [0][K] et [1][K] car elles ne sont pas dans la meme zone (ou meme tache).

On appel ça un algo de remplissage par germe car on utilise une methode recurcive pour trouver les cases. Il existe d'autres algo pour ce meme resultat comme l'algo par balayage lineaire, etc...

L'utilité c'est à vous de voir!
je m'en suis servit dans mon implementation du jawBreaker par exemple.

Quand elle a fini son execution, la class fait un dispatchEvent de type "finished" (utilisation de la class GDispatcher de Grand Skinner, http://www.gskinner.com/blog/archives/000027.html)

Source

  • // floodfill.as
  • //
  • // @version: 1.0
  • // @author: blackwizzard
  • // @comment: Implementation de l'algorithme de remplissage par germe.
  • // utile la class GDispatcher de Grant Skinner
  • import GDispatcher;
  • class floodfill {
  • var dispatchEvent:Function;
  • var addEventListener:Function;
  • var removeEventListener:Function;
  • var eventListenerExists:Function;
  • var removeAllEventListeners:Function;
  • private static var _eventDispatcherInit;
  • var a:Array;
  • var m:Array;
  • var v;
  • //
  • function floodfill(matrice:Array, x:Number, y:Number) {
  • _eventDispatcherInit = GDispatcher.initialize(this);
  • a = new Array();
  • m = new Array();
  • m = matrice;
  • v = m[y][x];
  • checkPoint(x, y);
  • dispatchMessage("finished");
  • }
  • //
  • function checkPoint(x, y) {
  • if (m[y][x] == v && !isOnArray(x, y)) {
  • a.push(new Object({x:x, y:y}));
  • if (!isOnArray(x, y-1)) {
  • checkPoint(x, y-1);
  • }
  • if (!isOnArray(x-1, y)) {
  • checkPoint(x-1, y);
  • }
  • if (!isOnArray(x, y+1)) {
  • checkPoint(x, y+1);
  • }
  • if (!isOnArray(x+1, y)) {
  • checkPoint(x+1, y);
  • }
  • }
  • }
  • //
  • function isOnArray(x, y) {
  • for (var i = 0; i<=a.length-1; i++) {
  • if (a[i].x == x && a[i].y == y) {
  • return true;
  • }
  • }
  • return false;
  • }
  • //
  • private function dispatchMessage(type:String):Void {
  • this.dispatchEvent({target:this, type:type});
  • }
  • //
  • function matrix() {
  • return a;
  • }
  • }
// floodfill.as
// 
// @version: 1.0
// @author: blackwizzard
// @comment: Implementation de l'algorithme de remplissage par germe.
// utile la class GDispatcher de Grant Skinner
import GDispatcher;
class floodfill {
	var dispatchEvent:Function;
	var addEventListener:Function;
	var removeEventListener:Function;
	var eventListenerExists:Function;
	var removeAllEventListeners:Function;
	private static var _eventDispatcherInit;
	var a:Array;
	var m:Array;
	var v;
	//
	function floodfill(matrice:Array, x:Number, y:Number) {
		_eventDispatcherInit = GDispatcher.initialize(this);
		a = new Array();
		m = new Array();
		m = matrice;
		v = m[y][x];
		checkPoint(x, y);
		dispatchMessage("finished");
	}
	//
	function checkPoint(x, y) {
		if (m[y][x] == v && !isOnArray(x, y)) {
			a.push(new Object({x:x, y:y}));
			if (!isOnArray(x, y-1)) {
				checkPoint(x, y-1);
			}
			if (!isOnArray(x-1, y)) {
				checkPoint(x-1, y);
			}
			if (!isOnArray(x, y+1)) {
				checkPoint(x, y+1);
			}
			if (!isOnArray(x+1, y)) {
				checkPoint(x+1, y);
			}
		}
	}
	//
	function isOnArray(x, y) {
		for (var i = 0; i<=a.length-1; i++) {
			if (a[i].x == x && a[i].y == y) {
				return true;
			}
		}
		return false;
	}
	//
	private function dispatchMessage(type:String):Void {
		this.dispatchEvent({target:this, type:type});
	}
	//
	function matrix() {
		return a;
	}
}

 Conclusion

utilisation:

var ff = new floodfill(matrice, xpos, ypos);
var newMatrix:Array = new Array();
newMatrix = ff.matrix();
for (var i= 0; i<=newMatrix.length-1;i++) {
  trace("point [x:"+newMatrix[i].x+", y:"+newMatrix[i].y+"] found!");
}


 Historique

13 juillet 2004 22:36:00 :
cette source bouge vers MX2004:CLASS

 Sources du même auteur

Source avec Zip Source avec une capture SPORE-LIKE DEMO
Source avec Zip Source avec une capture LINECHART / AREACHART : COMPOSANT AS2, SOURCE XML, STYLE PAR...
Source avec Zip COURS FLASH: COMMUNICATION FLASH/PHP
Source avec Zip 3D TEMPS REEL EN AS2
Source avec Zip Source avec une capture CLASS PIECHART: CODE ET COURS (8 PAGES FLASHPAPER/WORD)

 Sources de la même categorie

Source avec Zip Source avec une capture LECTEUR MP3 AVEC LISTE DE LECTURE, STREAMING OU NON (COMPOSA... par eron
Source avec Zip ENREGISTRER DANS UN FICHIER TEXTE AVEC L'AIDE D'UN EXE par Mr_Qqn
Source avec Zip Source avec une capture CLASSE CALCULATOR par BananaTree
Source avec Zip Source avec une capture CLASS "PATERN" : PERMET LA CRÉATION DE REMPLISSAGE DE MOTIF ... par top30
Source avec Zip Source avec une capture MA CLASSE DE BASE SUR LES TEXTES ( STRINGS ) par snakeeater1

Commentaires et avis

Commentaire de TomQuick le 29/04/2004 17:03:50

Wouaw, c'est super ça aussi !!!
J'ai été sur ton site pour y apprendre les bases, c'est génial et mieux que les bouquins pour y apprendre les leçons !!!

Commentaire de BlackWizzard le 29/04/2004 17:22:06 administrateur CS

contrairement au bouquin, mon but c pas le fric, du coup ya pas de blabla cencé grossir pour justifier le prix...
content que ce soit utile ;) (fait pas attention au blog, il est tout buggué, fo que je code des patchs...)

Commentaire de top30 le 29/04/2004 19:46:05

Qund je test ton exemple, jene vois rien car j ai une boucle de plus de 256 niveaux de récurtion !!!

Autre question, y pas de parametres pour choisir la taille de la "tache" de vérification ???

Vite des nouvelles !!!!

Commentaire de BlackWizzard le 29/04/2004 20:14:03 administrateur CS

mon exemple fonctionne si la variable "matrice" est un array de type [y][x] et que matrice[y][x] != undefined && !isNan(matrice[y][x])

mais va voir le source de jawBreaker, dans function.as, j'utilise cette class.

Commentaire de afad le 30/04/2004 11:59:49

Bon du coup, qui s'y colle pour programmer un Démineur, BW vient de nous résoudre la principale difficultée du jeu ;)

A+
aFaD

Commentaire de individis-bis le 01/05/2004 02:34:30

Programmer un démineur pourquoi pas, mais toujours partisan du moindre effort il existe un composant tout fait pour faire des démineur...
Sinon sympa ce code, et surtout utile, pourquoi pas pour faire de la reconaissance d'image simple, après découpage vers array et donc  zones de couleurs ou de luminosité etc...
Bref je me comprend, suis fatigué ce soir.

Commentaire de BlackWizzard le 01/05/2004 03:48:02 administrateur CS

ba, reconnaissance d'image, si tu vx, mais alors faudra attendre flash MX2010 et des pc avec 1To de ram et 2Thz ;)
deja sur une matrice de 40*40, il met pres de 1.5 secondes a trouver les cases alors imagine faire de la reconnaissance sur plus grand!
ou alors faut passer la class en java, ce qui n'est pas complex vu les similitudes de langages, et traiter ça coté java, avec liaison XMLSocket... mais bon, je pense pas que ce soit l'ideal...

Commentaire de individis-bis le 02/05/2004 12:09:06

Reconnaissance... si si...
Je pense que d'ores et déjà on pourait le faire avec des icones 32X32 en 16 ou même 256 couleurs, les arrays seraient à comparer avec une banque d'icone et des codage couleurs par zone stockés dans des dll par exemple... Et pourquoi pas interprêter des formes similaire mais bon...

Commentaire de BlackWizzard le 02/05/2004 13:47:28 administrateur CS

lol
oui, sur des icons, le format est assez petit pour ça...

Commentaire de vincseize le 01/06/2004 02:22:36

Hi

Je vois exactement à quoi peu me servir cette class ...

Du genre (et vous allez rire par rapport a votre niveau),
remplir un patatoide  ...

En fait j aimerais pouvoir m en servir faire une explorateur de territoire ... mais honnetement je vois pas trop comment ca marche ...
Un zip serait il possible , ou si je comprend tout seul je peu faire parti du Club

En tout ca bravo les gars ...

Commentaire de BlackWizzard le 01/06/2004 15:38:52 administrateur CS

pour voir la class en action va voir ma source "implementation du jawbreaker en as2"

Commentaire de janetdream le 15/12/2006 02:40:19

Tu es vraiment une bète de flash ! J'admire !

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales