Algorithmus zum Farbausfüllen beliebiger Polygone
-
höchstwahrscheinlich wird ein Boundary Fill oder ein Flood Fill Algorithmus verwendet - diese arbeiten einfach auf Pixelebene
Boundary Fill und Flood Fill arbeiten in etwa so wie es TGGC geschrieben hat
Ein besser Methode ist sicherlich "ber geradenschnittpunkte" zu gehen - auch Abtastzeilenalgorithmus (Scanline Verfahren) genannt
such mal nach diesen Begriffen in Google - da findet man einiges - oder such mal nach dem Begriff "Edge Table" - das dürfte die richtige Richtung sein...
-
TGGC schrieb:
Eine Möglichkeit ist:
füllen( Pixel, Farbe ) { male Pixel mit Farbe für alle nachbarn wenn Nachbarfarbe != Farbe und innerhalb des Polys füllen( Nachbarpixel, Farbe ); }
mit Rekursion zu arbeiten halt ich für nich sinnvoll, da weil die Funktion in sich noch mal sich selber aufruft, werden bei jedem Selbstaufruf die verwendeten Ressourcen zwischengespeichert, und das für jeden Pixel - dh: ein Feld von 100x100 px erzeugt Rekursionen von 10.000 Selbstaufrufen, was sich extrem nach Bufferoverflow anhört ( und es wird wohl nicht nur ein zu füllendes Poly geben
)
-
Für mich nicht.
Bye, TGGC (Keine Macht den Dummen)
-
Bufferoverflow
wo kein buffer, da kein overflow.
was du meinst ist, das der stack voll wird, da hast du recht.
andererseits wäre der passende algo der mit schleifen arbeitet nicht so schön zu verstehen
-
Bei mir gings so auch nicht (Stack overflow), habe dann auch den Scanline-Algorithmus angewandt.
-
1. alles was man rekursiv programmieren kann, kann man auch iterativ programmieren
2. es gibt repetive rekursion (die hier auch vorliegt)
-
zudem ist die rekursive Variante oft leichter zu erklären und verstehen. Implementieren kann man dann ja immer noch iterativ.
-
Allerdings ist die erstgennante Methode - abgesehen davon, dass sie rekursiv nicht zu benutzen ist - nicht so effizient
-
weiß vielleicht irgendwer woher ich mal einen beispielcode zum scanline-algorithmus bekomme? Ich hab jetzt mehrere Tage dran gearbeitet und er macht es iummer noch nicht so wie ich das will
-
Tja, darum hab ich wohl 'nen anderen vorgeschlagen. Aber google weiss es bestimmt.
Bye, TGGC (Wähle deine Helden)
-
aber deine methode lässt bei mir den stack überlaufen...
-
otze schrieb:
Bufferoverflow
wo kein buffer, da kein overflow.
was du meinst ist, das der stack voll wird, da hast du recht.
andererseits wäre der passende algo der mit schleifen arbeitet nicht so schön zu verstehen... richtig (vertan!)