Scanline Flood fill Algorithm

16 Sep 2016

Share to:

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

การใช้งาน putty เบื้องต้น

Putty คืออะไร?Putty เป็นโปรแกรม Remote Server หรือ SSH ( Secure Shell ) พูดให้เข้าใจง่ายๆก็คือ เราสามารถใช้โปรแกรมนี้ในการ สั่งงาน Server ด้วย command line โดยส่วนใหญ่แล้วจะใช้เชื่อมต่อไปยัง server ที่เป็น linux รองรับการเชื่อมต่อหลากหลายรูปแบบดังนี้

strncpy ในภาษา C, C++

strncpy เป็น function สําหรับ copy string จากตัวแปรต้นทางไปใส่ในตัวแปรปลายทางรูปแบบการใช้char *strncpy(char *dest, const char *src, size_t n) Parameter

Pull up, Pull down คืออะไร?

Pull up, Pull down คืออะไร?คือการต่อ ตัวต้านทานที่ขา input ของไมโครคอนโทลเลอร์ เหตุผลที่ต้องต่อคือ ถ้าเราต่อสวิตส์หรือ เซนเซอร์ต่างๆ เข้ากับไมโครคอนโทรเลอร์ตรงๆ อย่างเดียว อาจจะทำให้เกิดสัญญาณรบกวนได้ในกรณีที่ input ถูกลอยขาไว้ ไม่ได้จ่าย logic high หรือ low เช่น การต่อสวิตส์ ถ้าเรากดสวิตส์ จะทำให้มี logic high จ่ายให้กับ input ของไมโครคอนโทลเลอร์ แต่ถ้าเราปล่อยสวิตส์ ทำให้ ขา input ถูกลอยไว้ ไม่ได้ต่อลงกราวหรือ logic low ดังนั้นจึงต้องต่อ Pull up, Pull down เพื่อให้แน่ใจว่าเป็น logic high หรือ low เสมอ ถึงแม้ว่าจะไม่มี input ป้อนเข้ามา


Copyright © 2019 - 2025 thiti.dev |  v1.45.0 |  Privacy policy | 

Build with ❤️ and Astro.

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