by Lionel Debroux » 11 Aug 2011, 13:56
Si tu veux vraiment faire un "pot de peinture" (FloodFill) qui réponde à tous les usages, en fait, il faut les deux, et donner à l'utilisateur une façon de passer de l'un à l'autre et un undo/redo

A l'utilisation, le défaut du FloodFill à 8 points est qu'à cause de sa propension à passer de l'autre côté d'une ligne, il remplit des zones que l'utilisateur, dans sa tête, ne veut justement pas que le FloodFill remplisse. Par exemple:
- Code: Select all
*
*/
X*
**
*
Si l'algorithme de FloodFill à 8 points arrive sur la case X, il va déclencher le remplissage de la case /... et de là, de toute la zone qu'on peut atteindre à partir de la case /.
Le FloodFill à 4 points ne donnera pas ce genre de mauvaises surprises, mais en contrepartie, il donne de mauvais résultats dans d'autres cas d'utilisation, où le FloodFill à 8 points, quant à lui, excelle. L'exemple extrême est le damier
- Code: Select all
XXXXX
X0X0X
XX0XX
X0X0X
XXXXX
Avec un FloodFill à 4 points, et un damier qui fait des dizaines de pixels de côté, bon courage pour faire changer tous les 0
