Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] array füllen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] array füllen

    ich hab da ein array:


    vom grünen punkt(=2) aus will ich alle angrenzenden weißen(=1) felder auch grün füllen:


    wie geht das am besten?

    Peter


  • #2
    Mit Rekursion. Und Farbe.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Also:
      Schwarz = 0
      Weiß = 1
      Grün = 2
      Alle anderen Werte kommen garantiert nicht vor?
      Alle Werte garantiert Integer?

      Gibt es mehrere Grüne Felder (=2) oder immer nur einen?
      Sind die Koordinaten des grünen Punkts von Anfang an bekannt oder muss ich die grünen Felder erst im Array zusammensuchen?

      Wenn du fragst, wie es am besten geht, meinst du damit:
      * Möglichst elegant ~> wenig Quelltext, kaum fehleranfällig ~> Geschwindigkeit weniger bedeutend, da die Arrays wie im Bild eh immer relativ klein sind.
      oder
      * Möglichst schnell, auch für sehr große Arrays?

      Woher kommt das Arrays?
      Manchmal dauert die Umwandlung der Ausgangsdaten in das Array nämlich länger als die Verarbeitung des Arrays danach.
      Evtl kann man beides kombinieren und so viel Rechenzeit sparen.

      Allgemeine Infos dazu findest du ja dort:
      Flood fill - Wikipedia, the free encyclopedia (4-connected)
      http://de.wikipedia.org/wiki/Floodfill

      Kommentar


      • #4
        ich hab da ein array:
        Ich seh da kein Array. Wenn Du eines hast, solltest Du beschreiben, was das mit dem Bild oben zu tun hat.
        Weiterhin, was "vom grünen Punkt" aus bedeutet.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Oder halt mit PHP: imagefilltoborder - Manual
          You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

          Kommentar


          • #6
            @Griffith
            1)ja, keine anderen Werte
            2)nur 1 grüner Punkt und man weiß wo er ist[x][y]
            und:
            * Möglichst elegant ~> wenig Quelltext, kaum fehleranfällig ~> Geschwindigkeit weniger bedeutend, da die Arrays wie im Bild eh immer relativ klein sind.
            @nikosch:
            wenn ich das Array mit print_r ausgebe hat man doch viel weniger Überblick als wenn ich es als bild speichere
            es handelt sich um ein 2d array:
            PHP-Code:
            $arr[20][20
            Peter

            Kommentar


            • #7
              Mein spontane Eingebung (bin allerdings zu faul, auch nur das passende Array zu erstellen. Wenn sich jemand dran versuchen soll, wäre es vielleicht sinnvoll, wenn Du etwas passendes postest):

              0/ Vorbereitung: Das komplette Bild mit einem scharzen Rand erweitern - das spart schon mal die Prüfung der Bildgrenze
              1/ Prinzip: Nach einem gleichbleibenden Prinzip (bspw. Uhrzeigersinn) wandere vom Ausgangspunkt nach links, oben, rechts, unten, bis Du auf einen Wert != weiß stößt.
              2/ Dabei: Markiere jede neue Koordinate
              3/ Dabei merke Dir diese Koordinate als neuen Ausgangspunkt
              4/ Wenn alle 4 Himmelsrichtungen für einen Punkt maximal durchlaufen sind, hole Dir den nächsten Ausgangspunkt und starte von vorn.

              [edit]
              Numerierung der Schritte

              16 wäre der Lookup von Pos (1) nach (2), 20 der von (1) auf (0) etc.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Variante "4-Neighbour". Da gibt's eigentlich nicht groß was zu versuchen.

                Kommentar


                • #9
                  Stimmt, so gehts natürlich auch rekursiv. Hab zu kompliziert gedacht.

                  [edit]

                  Hat was meditatives. Sollte man mal in JS umsetzen..
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Danke für den Link!

                    Kommentar


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      Hat was meditatives. Sollte man mal in JS umsetzen..
                      Kann man sicher noch optimieren:
                      "Begrenzung setzen" -> Dann auf die Zellen klicken. Startpunkt das selbe..

                      Läuft zumindest im FF 3.6.8

                      EDIT: Noch was verändert.

                      EDITEDIT: Jetzt aber...
                      Angehängte Dateien

                      Kommentar

                      Lädt...
                      X