Ich versuche, einen Algorithmus zu implementieren, der dem Flood-Fill ähnelt. Das Problem ist, dass ich mir nicht sicher bin, auf welche Weise ich ihn implementieren soll, z.B. rekursiv oder nicht rekursiv.
Ich weiß, dass jeder seine Mängel hat, aber einer von ihnen muss schneller sein als der andere. die rekursive öffnet neue Funktion auf dem Stapel, wenn die nicht-rekursive 4 neue Punkte jedes Mal zuweist.
Beispiel für das nicht-iterative :
Stack<Point> stack = new Stack<Point>();
stack.Push(q);
while (stack.Count > 0)
{
Point p = stack.Pop();
int x = p.X;
int y = p.Y;
if (y < 0 || y > h - 1 || x < 0 || x > w - 1)
continue;
byte val = vals[y, x];
if (val == SEED_COLOR)
{
vals[y, x] = COLOR;
stack.Push(new Point(x + 1, y));
stack.Push(new Point(x - 1, y));
stack.Push(new Point(x, y + 1));
stack.Push(new Point(x, y - 1));
}
}
edit : ich werde den folgenden Algorithmus auf eine 600X600 Pixel Karte anwenden. obwohl das Floodfill nicht auf die gesamte Karte angewendet werden wird, sollte es etwa 30% - 80% der Karte bei jeder Iteration abdecken. mein Ziel ist es, Kanten in einer Höhenkarte zu entdecken und diese Kanten für eine weitere Verwendung zu markieren.