Thuật toán tô màu theo đường biên

Em đang học đồ họa có bài này có thuật toán nhưng e không giải ra được các anh chị giúp em với

Thuật toán tô màu theo đường biên:
(áp dụng với i={1,-1})

  • Bước 1: Tìm biên trái nhất và biên phải nhất
x1=x; x2=x;
while (màu(x1-1,y)!=mb)  x1=x1-1;
while (màu(x2+1,y)!=mb)  x2=x2+1;
  • Bước 2: Vẽ đoạn (x1,y) và (x2,y) bằng màu tô (mt)

  • Bước 3: Tính điểm phát triển tiếp theo:

while(màu(x1,y+i)=mb)  x1=x1+1;
  • Bước 4: Nếu x1<=x2:
nx=x1;
y=y+i;
quay lại Bước1;
  • Bước 5: Kết thúc.

Có cái giải thuật tô màu bằng đệ quy này hi vọng gúp được bạn :smile:

void Tomau(x,y,mau_to,mau_duongbien){
    //kiem tra xem mau diem x,y co trung voi mau bien ko?
   if(getColor(x,y)!=mau_duongbien){
       //to mau diem x,y neu mau ko trung
        setColor(mau_to);
        drawLine(x,y,x,y);
        //goi de quy to mau cac diem lan can
       Tomau(x+1,y,mau_to,mau_duongbien);
       Tomau(x-1,y,mau_to,mau_duongbien);
       Tomau(x,y+1,mau_to,mau_duongbien);
       Tomau(x,y-1,mau_to,mau_duongbien);
   }
    else return;
}

cái này áp dụng để tô màu vùng nhỏ được , còn mà vùng tô mà rộng thì nên dùng cái khác

đây là tô màu loang mà

@@ con` ai song khong :3
//Tô màu biên
#include <graphics.h>
void tomau_biennua(int x, int y, int mb, int mt, int i)
{ int x1,x2;
setcolor(mt);
do
{ x1=x; x2=x;
while (getpixel(x1-1,y)!=mb) x1–;
while (getpixel(x2+1,y)!=mb) x2++;
line(x1,y,x2,y);
while(getpixel(x1,y+i)==mb)x1++;
x=x1; y=y+i;
delay(5);
} while (x1<=x2); }
void tomau_bien(int x, int y, int mb, int mt)
{
tomau_biennua(x,y,mb,mt,1);
tomau_biennua(x,y,mb,mt,-1); }
int main() { initwindow(640, 480); setcolor(4); circle(300,200,100); tomau_bien(300,200,4,2); getch(); closegra

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?