#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...