Scanline Flood fill Algorithm

16 Sep 2016,
Share: 

Flood fill Algorithm

Flood fill Algorithm คือ Algorithm การระบายสีโดยมีเงื่อนไขอยู่ว่ารูปทรงที่ต้องการระบายนั้นจะต้องเป็นรูปปิด ถ้าใครนึกภาพไม่ออกก็ลองนึกถึงโปรแกรม paint จะมีเครื่องมือเทสี(Fill) มีลักษณะเช่นเดียวกัน

Image

scanline-floodfill-algorithm Flood fill Algorithm จะแบ่งออกเป็นหลายประเภทแต่ในบทความนี้ จะอธิบายถึง Scanline Flood fill Algorithm

Scanline Flood fill Algorithm

หลักการทํางานของ Scanline Flood fill Algorithm คือ แสกนไปทีละ line ตามรูปตัวอย่าง

Image

มาดูตัวอย่าง source code กันดีกว่าครับ

void floodFillScanlineStack(int x, int y, int newColor, int oldColor)
{
    if(oldColor == newColor) return;
    emptyStack();

    int y1;
    bool spanLeft, spanRight;

    if(!push(x, y)) return;

    while(pop(x, y))
    {
        y1 = y;
        while(y1 >= 0 && screenBuffer[x][y1] == oldColor) y1--;
        y1++;
        spanLeft = spanRight = 0;
        while(y1 < h && screenBuffer[x][y1] == oldColor )
        {
            screenBuffer[x][y1] = newColor;
            if(!spanLeft && x > 0 && screenBuffer[x - 1][y1] == oldColor)
            {
                if(!push(x - 1, y1)) return;
                spanLeft = 1;
            }
            else if(spanLeft && x > 0 && screenBuffer[x - 1][y1] != oldColor)
            {
                spanLeft = 0;
            }
            if(!spanRight && x < w - 1 && screenBuffer[x + 1][y1] == oldColor)
            {
                if(!push(x + 1, y1)) return;
                spanRight = 1;
            }
            else if(spanRight && x < w - 1 && screenBuffer[x + 1][y1] != oldColor)
            {
                spanRight = 0;
            }
            y1++;
        }
    }
}

ตัวอย่างนี้จะเป็นการ scan ทางแนวตั้ง โดยจะใช้ Stack เข้ามาช่วย ลองทําความเข้าใจ source code ดูครับ

ข้อมูลจาก lodev.org

Suggestion blogs

ติดตั้ง Software หลายๆตัวบน mac ในครั้งดียว ด้วย Brew

สวัสดีครับ ปกติเวลาเราต้องการจะติดตั้ง Software บนเครื่อง Mac ก็สามารถทําได้หลายรูปแบบ เช่น โหลด file พวก _.dmg หรือ _.pkg สําหรับติดตั้งมากดติดตั้ง หนึ่งในหลายๆแบบในการติดตั้ง Software บน Mac ที่งายก็คือการใช้งาน Brew ครับ ซึ่ง Brew จะช่วยให้เราสามารถติดตั้ง Software บน Mac ได้ในคําสั่งเดียว โดยเราไม่ต้องไปโหลด File install ลงมาบนเครื่องให้ยุ่งยาก

[nginx] Limiting the rate of requests and connection

nginx สามารถ config ให้ limit จํานวน request และ connection ได้ ทั้งนี้เพื่อป้องกันการ request เข้ามามากๆเกินความเป็นจริงที่ client จะทําได้

การใช้งาน VI Editor

สวัสดีครับ ในบทความนี้เราจะมาเรียนรู้การใช้งาน Editor ที่นิยมใช้กันในตระกูล Linux เนื่องจากเป็น Editor ที่ถูกติดตั้งอยู่ใน Linux เกือบทั้งหมด และใครที่ใช้งาน Version Control อย่าง Git ก็ได้ใช้ VI ด้วยเช่นกัน โดยจะเจอตอนที่เราใส่ git commit message


Copyright © 2019 - 2026 thiti.dev |  v1.61.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ