C語言實現的掃瞄線種子填充演算法

2021-06-15 20:14:55 字數 2724 閱讀 8289

#include 

<

graphics.h

>

#include 

<

stdio.h

>

#include 

<

alloc.h

>

#include 

<

dos.h

>

#include 

<

conio.h

>

//creat a stack

struct stack_node

;typedef stack_node stack_list;

typedef stack_list 

*link;

link stack =0

;//push an element

void

push(

intxx,

intyy)

//pop an element

void

pop(

int&

xx,int

&yy)

//fill the plot

void

fill(

intx,

inty)xr=

x0-1;

//記錄最右值

xrold

=xr;

//再記錄一次最右值,以備後用x0=

x-1;

while

(getpixel(x0,y)!=4

)//fill right 填充左邊xl=

x0+1;

//記錄最左值

xlold

=xl;

//再記錄一次最左值,以備後用y0=

y+1;

//go up 向上移一條掃瞄線

go2=0;

//go2 也只是乙個用來標記的變數

while

(xr>

xl&&

go==0)

//查詢上一條線的最右值,並記錄為xr

else

}while

(xl<

xr&&

go2==0)

//查詢上一條線的最左值,並記錄為xl

if(go==1

&&go2==1

)//如果找到了最左值各最右值,則執行下面的語句

else

if(getpixel(i-1

,y0)!=4

)//如果是邊界點,則看它左邊的點是不是邊界點,如果不是,則入棧}}

y0=y-

1;//go down;//向下移一條掃瞄線go=

0;go2=0;

xl=xlold;

//還原最左,最右xr=

xrold;

while

(xr>

xl&&

go==0)

//找下一條線的最右

else

}while

(xl<

xr&&

go2==0)

//找下一條線的最左

if(go==1

&&go2==1

)//如果找到最左和最右,則執行

else

if(getpixel(i-1

,y0)!=4

)}}}

}void

main()

detectgraph(

&gdriver,

&gmode);

initgraph(

&gdriver,

&gmode,

"c:/bc31/bgi");

setbkcolor(0);

cleardevice();

setcolor(4);

pop(px0,py0);

//輸入的最後乙個頂點出棧px=

px0;py=

py0;

//記錄最後乙個頂點

//draw the plot

while

(stack !=0

)line(px0,py0,px,py);

//依次畫線,畫出多邊形

//畫完多邊形後,棧為空

//find the y valuej=

(ya+

yi)/2;

//找y的中間值,就是第乙個種子點的y值i=

0;n=

0;//記錄入棧個數

//find the seed element

while

(i<

getmaxx()&&n

!=2)//

按x值從0到x最大值依次查詢,並在入棧個數為2的時候退出i=

i+1;

//i是記錄當前的x值

}pop(i,j);

//第二個交點出棧

pop(n,j);

//第乙個交點出棧,雖然覆蓋了y值,但這不重要,我們要的是x值i=

(i+n)/

2;//現在i是我們要找的種子點的x值

//fill the plot

fill(i,j);

//將種子點作為引數傳入fill()方法

delay(

1000

);outtextxy(

100,

410,

"the red line was drawing,fill over");

getch();

closegraph();}

c 實現掃瞄線種子填充演算法

今天來介紹一種利用堆疊實現的填充演算法,這種演算法相比於直接使用遞迴實現的填充演算法 如內點表示的四連通種子填充演算法 來說,它需要的堆疊大小不需要那麼龐大,下面是在mfc中實現方法。在任意不間斷區間 一條掃瞄線上的一組相鄰畫素 中,只取乙個種子畫素,填充當前掃瞄線上的該段區間,然後確定與這一段相鄰...

多邊形區域填充演算法 掃瞄線種子填充演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!1.3掃瞄線種子填充演算法 1.1和1.2節介紹的兩種種子填充演算法的優點是非常簡單,缺點是使用了遞迴演算法,這不但需要大量棧空間來儲存相鄰的點,而且效率不高。為了減少演算法中的遞迴呼叫,節省棧空間的使用,人們提出了很多改進演算法,其中一種就是掃瞄...

二維區域掃瞄線填充演算法的實現

下面是乙個簡單的填充效果 include include define filling 1 define reset 2 typedef struct line,pline line lines 100 line line static int j 0 point draw refresh 1000...