Beiträge von Mike im Thema „schnelles farbiges Apfelmännchen“

    ivettaB,

    zu deinem Beitrag Bitte melde dich an, um diesen Link zu sehen.: eine Queue herzunehmen ist schon mal ganz prima; die naive Methode, alle 4 Nachbarpixel zu speichern ist allerdings speichertechnisch relativ ineffizient. Die Füllregion läuft in Form eines Diamants vom Ausgangspunkt weg, und es wird jeder Punkt am Rand im Regelfall 2x auf die Queue geworfen.

    Mein in Bitte melde dich an, um diesen Link zu sehen. gegebenes Verfahren arbeitet mit horizontalen Spännen und braucht erheblich weniger Speicher für die Queue. Mit etwa so vielen Einträgen wie der Bildschirm horizontale Pixel hat kommt man in 99,999%+ aller Fälle aus. Das BASIC Programm nimmt dazu einfach zwei Zeichenketten her, eine für x, eine für y. Mit + wird hinten angehängt, mit MID$(...,2) vorne abgeschnitten. :D

    hast du was in Basic ?

    bin zwar nicht atomcode, aber ja, hier: Bitte melde dich an, um diesen Link zu sehen.

    So ein Floodfill arbeitet übrigens grundsätzlich anders als etwa ein Dreieck-Füll-Algorithmus. Letzteres geht rein von den Geometrie-Informationen aus, berechnet in dem umfassenden Rechteck auf dem Bildschirm für jede Zeile die äußersten Koordinaten links und rechts und zieht dann entsprechend die Linien.

    Ein Floodfill hat diese Geometrie-Informationen nicht, nur die Bitmap. Als zusammenhörend gilt (im Regelfall) was von jedem leeren Pixel in der Fläche aus gesehen, waagerecht oder senkrecht verbunden ist und auch leer ist. Versucht man auf diese Weise ein Dreieck zu füllen, indem man zuerst mit einer Linienziehroutine die Umrisse zeichnet und dann einen Floodfill darauf losläßt, kann es gerade bei spitzwinkligen Dreiecken passieren, daß der Floodfill nicht in die Ecken "reinkommt".

    Wer das Apfelmännchen bei guter Strukturauflösung richtig schnell haben will, der muss es schaffen, möglichst effektiv den rechenintensiven inneren Bereich zu überspringen, ohne dabei die Ränder in Mitleidenschaft zu ziehen.

    Das geht mit einem Floodfill von allen(!) Randpunkten des Bildschirms aus, mit den Iterationen=Maximum (-> schwarz, "Mandelbrot-Punkt") als Stop-Bedingung. Man nutzt hier aus, daß die Mandelbrot-Menge einfach zusammenhängend ist - insbesondere heißt das, daß sie keine Löcher hat.

    Ich hatte das seinerzeit bereits kombiniert mit einer Anzeigemethode, welche die Filamente hervorhebt. Hier zwei Beispiele vom VC-20:

    Bitte melde dich an, um diesen Anhang zu sehen. Bitte melde dich an, um diesen Anhang zu sehen.