30/09/2018, 16:56

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;

qBước 2: Vẽ đoạn (x1,y) và (x2,y) bằng màu tô (mt)

qBướ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.

PTA viết 19:06 ngày 30/09/2018

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

   
 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
Nguyentan viết 18:59 ngày 30/09/2018

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

Phùng Văn Độ viết 19:10 ngày 30/09/2018

@@ 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

Bài liên quan
0