ontimer in rekursiverfunktion



  • Hallo!

    Mein Problem ist das ich ein Polygon anschaulich füllen möchte, mit einem Rekursive Algorithmus,nämlich den BoundaryAlgo.

    void Poly::boundaryfill(int x, int y,TColor colnew, TColor colbor, TImage *img)
    {
    
        if (x < img->Width && y < img->Height)
        if ((colnew != img->Canvas->Pixels[x][y]) && (img->Canvas->Pixels[x][y] != colbor ))
            {
            img->Canvas->Pixels[x][y] = colnew;
            img->Refresh();
            //hier hätte ich gerne eine variable Pausenlänge
            boundaryfill(x + 1 , y     , colnew,colbor,img);
            boundaryfill(x - 1 , y     , colnew,colbor,img);
            boundaryfill(x     , y + 1 , colnew,colbor,img);
            boundaryfill(x     , y - 1 , colnew,colbor,img);
    
        }
    }
    

    Nur irgenwie fällt mir nix ein wie ich das machen könnte!
    Kann mir vielleicht jemand weiter helfen.

    mfg polygonman



  • was ist Dein Problem?

    Dein Algo macht das doch mit der Rekursion.

    Oder soll das 'anschaulich' langsam gehen? Dann würde ich die Koordinate (x,y)
    und die Farbe in eine Struct (Class) packen und das ganze fuer jedes Pixel in eine TList speichern.

    Mit nem OnTimer kann das dann zeitgesteuert aus der TList abgearbeitet werden.



  • Der Algo funktioniert schon aber ich wollte ihn halt sichtbar machen (also verlangsamen) so das man sieht wie er arbeitet.

    Danke für Deinen Tip ich werde es mal so probieren!

    mfg Polygonman



  • Weis nicht ob du das meinst, aber ich könnte mir vorstellen das du was suchst, damit man sieht, wie die Pixel nacheinander "angehen"
    Würde das dann für diesen Zweck so lösen:
    Am Beginn der rekursiven Funktion einfügen:

    ...
    Application->ProcessMessages();
    Sleep(500);  // hier 500ms
    ...
    

Anmelden zum Antworten