版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
關(guān)于掃描線多邊形填充算法第一頁,共三十頁,2022年,8月28日1.區(qū)域內(nèi)部點(diǎn)判斷準(zhǔn)則
區(qū)域填充首先判斷一個像素點(diǎn)是否處于多邊形區(qū)域內(nèi),其判斷準(zhǔn)則如下:從該點(diǎn)向無窮遠(yuǎn)處引出一條射線(也稱掃描線),若射線與區(qū)域邊界交點(diǎn)目標(biāo)數(shù)目為奇數(shù),則此點(diǎn)在區(qū)域內(nèi)。若射線與區(qū)域邊界交點(diǎn)目標(biāo)數(shù)目為偶數(shù),則此點(diǎn)為區(qū)域外點(diǎn)。例如:A點(diǎn)向右引射線與區(qū)域邊界共3個交點(diǎn),為內(nèi)點(diǎn)B點(diǎn)向右引射線與區(qū)域邊界共2個交點(diǎn),為外點(diǎn)AB第二頁,共三十頁,2022年,8月28日此時應(yīng)注意兩點(diǎn):(1)當(dāng)掃描線與多邊形相交如下情況時:YXAIBEDCF①若兩相鄰邊與掃描線相交于同一點(diǎn),且兩邊位于掃描線同側(cè),則視為兩個交點(diǎn)。如yb:1點(diǎn)向右交點(diǎn)為3個(奇數(shù))是內(nèi)點(diǎn)
3點(diǎn)向右交點(diǎn)為4個(偶數(shù))是外點(diǎn)②若兩相鄰邊與掃描線相交于同一點(diǎn),且兩邊位于掃描線異側(cè),則視為一個交點(diǎn)。如yayb31ya第三頁,共三十頁,2022年,8月28日(2)當(dāng)掃描線重合多邊形某條邊界水平線時,如該水平邊線前后兩條邊線是一上一下的,則該水平邊線兩個端點(diǎn)作為一個交點(diǎn),即掃描線與該水平邊界線相交了一次。如下圖yCBXYDCBAE如該水平邊線前后兩條邊線是同為上或同為下的,則將該水平邊線兩個端點(diǎn)作為交點(diǎn),即掃描線與該水平邊界線相交了兩次。如yDEyCByDE第四頁,共三十頁,2022年,8月28日
2.邊相關(guān)性及邊記錄
很顯然,不能利用區(qū)域內(nèi)部點(diǎn)判別準(zhǔn)則對顯示平面上每個點(diǎn)逐個判別,這樣計算量太大。事實(shí)上,相對于一個給定多邊形區(qū)域來說,顯示平面上每個像素點(diǎn)內(nèi)外特性是互相關(guān)聯(lián)的。相鄰像素間具有相關(guān)屬性。在實(shí)施多邊形填充時,利用掃描線相關(guān)性,就無需對掃描線上所有像素點(diǎn)逐個地進(jìn)行內(nèi)外特性判斷,只需對一條掃描線從左到右求出該掃描線與區(qū)域邊界交點(diǎn),這些交點(diǎn)必將掃描線分成內(nèi)外交替線段,這些交點(diǎn)x值大小依次排列。
第五頁,共三十頁,2022年,8月28日XYABCD如上圖,按x從小到大排列為ABCD交點(diǎn)AB間線段上像素點(diǎn)必在區(qū)域內(nèi)。所以關(guān)鍵是求交點(diǎn)。第六頁,共三十頁,2022年,8月28日(1)交點(diǎn)計算
多邊形填充首先需要求出掃描線與邊界的交點(diǎn),利用邊的相關(guān)性可以簡單有效地解決這個問題。當(dāng)一條掃描線yi
與多邊形的某一邊線有交點(diǎn)時,其相鄰掃描線yi+1一般也與該邊線相交(除非yi+1超出了該邊線所在區(qū)間),而且掃描線yi+1與該邊線的交點(diǎn),很容易從前一條掃描線yi與該邊的交點(diǎn)遞推求得。設(shè)某條直線邊的方程為y=mx+b
該邊兩個端點(diǎn)坐標(biāo)為(x1,y1)、(x2,y2)
且x1≠x2
則該邊斜率為m=(y2-y1)/(x2-x1)令掃描線yi與該邊交點(diǎn)為(xi,yi)
掃描線yi+1與該邊交點(diǎn)(xi+1,yi+1)第七頁,共三十頁,2022年,8月28日
A(8,2)C(8,8)B(3,7)yi(xi,yi)邊線AB第yi條掃描線與某邊線AB的交點(diǎn)是(xi,yi)
第yi+1條掃描線與AB的交點(diǎn)為(xi+1,yi+1)則第yi+1條掃描線與AB的交點(diǎn)為yi+1=yi+1,xi+1=xi+1/m即由前一條掃描線交點(diǎn)Xi,Yi求下一條掃描線交點(diǎn)Xi+1,Yi+1,式中,m是這條邊的斜率。(xi+1,yi+1)邊線AC1/myi+1第八頁,共三十頁,2022年,8月28日(2)邊記錄利用邊的這種相關(guān)性,不必算出邊線與各條掃描線的全部交點(diǎn),只需以邊線為單位,對每條邊建立一個邊記錄,其內(nèi)容包括:該邊y的最大值ymax,該邊底端的x坐標(biāo)xi,從一條掃描線到下一條掃描線間的x增量1/m,以及指示下一個邊記錄地址的指針
7
8
-18
8
0ABACymaxxi1/m
ymaxxi1/m
A(8,2)C(8,8)B(3,7)第九頁,共三十頁,2022年,8月28日3.邊表ET和活動邊表AET(1)邊表ET(Edge
Table)邊表是一個包含多邊形全部邊記錄的表,它按y坐標(biāo)(與掃描線一一對應(yīng))遞增(或遞減)的順序存放區(qū)域邊界的所有邊。每個y坐標(biāo)值存放一個或者說幾個邊記錄。當(dāng)某條掃描線yi碰到多邊形邊界的新邊時(以邊線底端為準(zhǔn)),則在ET表中相應(yīng)的y坐標(biāo)值處寫入一個邊記錄。當(dāng)同時有多條邊進(jìn)入時,則在ET表中按鏈表結(jié)構(gòu)寫入相應(yīng)數(shù)目的多個記錄,這些記錄是按邊線較低端點(diǎn)的x值增加的順序排列。當(dāng)沒有新邊加入時,表中對應(yīng)的y坐標(biāo)值處存儲內(nèi)容為空白。ymaxxi1/m第十頁,共三十頁,2022年,8月28日注意:在ET表中:①與x軸平行的邊不計入。②多邊形的頂點(diǎn)分為兩大類:一類是局部極值點(diǎn),如下圖中的P1、P3;另一類是非極值點(diǎn),如下圖中的P2、P4、P5。當(dāng)掃描線與第一類頂點(diǎn)相遇時,應(yīng)看作兩個點(diǎn);當(dāng)掃描線與第二類頂點(diǎn)相遇時,應(yīng)視為一個點(diǎn)。多邊形邊表多邊形邊表邊表ymaxxi1/m
第十一頁,共三十頁,2022年,8月28日⑵活動邊表AET(ActivitiesEdge
Table)
活動邊表AET是一個只與當(dāng)前掃描線相交的邊記錄鏈表。隨著掃描線從一條到另一條的轉(zhuǎn)換,AET表也應(yīng)隨之變動,利用
yi+1=yi+1,xi+1=xi+1/m
可以算出AET表中x域中的新值xi。凡是與這一條掃描線相交的任何新邊都加到AET表中,而與之不相交的邊又被從AET表中刪除掉了。下圖列出了多邊形圖在掃描線為4、5、6時的AET表。AET表中的記錄順序仍是按x增大排序的。第十二頁,共三十頁,2022年,8月28日4.多邊形區(qū)域填充算法過程(1)根據(jù)給出的頂點(diǎn)坐標(biāo)數(shù)據(jù),按y遞增順序建立ET表(2)根據(jù)AET指針,使之為空。(3)使y=Ymin(Ymin為頂點(diǎn)坐標(biāo)中最小y值)。(4)反復(fù)做下述各步,直至y=Ymax(頂點(diǎn)坐標(biāo)中y的最大值)或ET與AET為空:①將ET表加入到AET中,并保持AET鏈中的記錄按x值增大排序。②對掃描線yi依次成對取出AET中xi值,并在每對xi
之間填上所要求的顏色或圖案。③從AET表中刪去yi=ymax的記錄。④對保留下來的AET中的每個記錄,用xi+1/m代替xi
,并重新按x遞增排序。⑤使yi+1,以便進(jìn)入下一輪循環(huán)。第十三頁,共三十頁,2022年,8月28日①開始y=1,將ET表中y=1結(jié)點(diǎn)加入至AET表,同時保持AET鏈中記錄按x增大排序36
-2560.5^AET②由于上例中是6-6,是頂點(diǎn),所以中間不填像素顏色。③上例由于Ymax=3和5,所以不必刪去,當(dāng)yi=3時,此時就得將第一個結(jié)點(diǎn)即(3,6,-2)刪去。④對保留下來的AET中的每個記錄,用xi+1/m代替xi,并重新按x遞增排序。如上例變成(實(shí)際求出y=2時新的交點(diǎn)x坐標(biāo)):34
-256.50.5^AET第十四頁,共三十頁,2022年,8月28日⑤使yi+1,以便進(jìn)入下一輪循環(huán)。即y=2再進(jìn)入以上循環(huán)繼續(xù):①由y=2,ET表中是空,所以不需ET表加入AET表②取x=4和x=6.5,將4-6.5之間填上像素顏色。③由于y=2,不必刪去結(jié)點(diǎn)。④再改變xi的值為
⑤使yi=3,重復(fù)繼續(xù)。繼續(xù):①由y=3,將ET表中y=3結(jié)點(diǎn)加入,即②將2-7之間填上像素顏色。③刪去結(jié)點(diǎn)Ymax=3結(jié)點(diǎn)。32
-2
570.5^AET32
-2570.5^AET62
062
0570.5^AET34
-256.50.5^AET第十五頁,共三十頁,2022年,8月28日④再改變xi的值為⑤使yi=4,重復(fù)繼續(xù)。
62
057.50.5^AET第十六頁,共三十頁,2022年,8月28日P0P1P2P3P4P5舉例演示第十七頁,共三十頁,2022年,8月28日二、邊填充邊填充算法的基本原理是:(1)對多邊形的每條邊進(jìn)行直線掃描轉(zhuǎn)換,即對多邊形邊界經(jīng)過的像素打上邊標(biāo)志;(2)對多邊形內(nèi)部進(jìn)行填充。填充時,對每條掃描線,依從左到右的順序,逐個訪問掃描線上的像素,用一個布爾量來標(biāo)志當(dāng)前點(diǎn)是在多邊形內(nèi)部還是外部(一開始設(shè)布爾量的值為假,當(dāng)碰到設(shè)有邊標(biāo)志的點(diǎn)時,就把其值取反;對沒有邊標(biāo)志的點(diǎn),則其值保持不變)(3)將其布爾量值為“真”的內(nèi)部置為圖形色,把其布爾量的值為“假”的外部點(diǎn)置為底色即可。第十八頁,共三十頁,2022年,8月28日三、種子填充
1、種子填充基本思路首先假設(shè)在多邊形區(qū)域的內(nèi)部,至少有一個像素點(diǎn)(稱為種子)是已知的,然后算法開始搜索與種子點(diǎn)相鄰且位于區(qū)域內(nèi)的其它像素。如果相鄰點(diǎn)不在區(qū)域內(nèi),那么到達(dá)區(qū)域的邊界;如果相鄰點(diǎn)位于區(qū)域內(nèi),那么這一點(diǎn)就成為新的種子點(diǎn),然后繼續(xù)遞歸地搜索下去。
區(qū)域的連通情況可以分為四連通和八連通兩種四連通區(qū)域:各像素在水平和垂直四個方向上是連通的.八連通區(qū)域:各像素在水平、垂直以及四個對角線方向上都是連通的。第十九頁,共三十頁,2022年,8月28日在種子填充算法中,如果允許從四個方向搜尋下一個像素點(diǎn),則該算法稱為四向算法;如果允許從八個方法搜尋下一個像素點(diǎn),則該算法稱為八向算法。一個八向算法可以用在四連通區(qū)域的填充上,也可用在八連通區(qū)域的填充上;而一個四向算法只能用于填充四連通區(qū)域。無論是四向算法還是八向算法,它們的填充算法基本思想是相同的。為簡單起見,下面只討論四向種子填充算法。
第二十頁,共三十頁,2022年,8月28日2.種子填充算法
基本思想:假設(shè)在多邊形區(qū)域內(nèi)部至少有一個像素是已知的(此像素稱為種子像素),由此出發(fā)找到區(qū)域內(nèi)所有其他像素,并對其進(jìn)行填充。 由于區(qū)域可采用邊界定義和內(nèi)點(diǎn)定義兩種方式,區(qū)域按連通性又可分為四連通區(qū)域和八連通區(qū)域兩類,所以常用的種子填充算法有:邊界表示的四連通區(qū)域種子填充算法內(nèi)點(diǎn)表示的四連通區(qū)域種子填充算法邊界表示的八連通區(qū)域種子填充算法內(nèi)點(diǎn)表示的八連通區(qū)域種子填充算法第二十一頁,共三十頁,2022年,8月28日(1)邊界表示的四連通區(qū)域種子填充算法 基本思想:從多邊形內(nèi)部任一點(diǎn)(像素)出發(fā),依“左上右下”順序判斷相鄰像素,若其不是邊界像素且沒有被填充過,對其填充,并重復(fù)上述過程,直到所有像素填充完畢。 可以使用棧結(jié)構(gòu)來實(shí)現(xiàn)該算法,算法的執(zhí)行步驟如下: 種子像素入棧,當(dāng)棧非空時,重復(fù)執(zhí)行如下三步操作:
1)棧頂像素出棧;
2)將出棧像素置成多邊形填充的顏色;
3)按左、上、右、下的順序檢查與出棧像素相鄰的四個像素,若其中某個像素不在邊界上且未置成多邊形色,則把該像素入棧。第二十二頁,共三十頁,2022年,8月28日邊界填充算法(四連通域)在區(qū)域有一個像素是已知(種子像素),由此像素從四個方向遍歷區(qū)域內(nèi)所有像素。(適用于交互繪圖)0123454321用什么方法實(shí)現(xiàn)?注意:棧中種子的次序,當(dāng)前棧頂元素是哪個?依“左上右下”第二十三頁,共三十頁,2022年,8月28日以邊界表示的四連通區(qū)域種子填充算法(基于遞歸)取(x,y)為種子點(diǎn)VoidBoundaryFill4(intx,inty,intboundarycolor,intnewcolor){if(getpixel(x,y)!=boundarycolor
&&getpixel(x,y)!=newcolor){/*getpixel(x,y)取屏幕上像素(x,y)的顏色*/putpixel(x,y,newcolor);//著色
BoundaryFill4(x-1,y,boundarycolor,newcolor);BoundaryFill4(x,y+1,boundarycolor,newcolor);BoundaryFill4(x+1,y,boundarycolor,newcolor);BoundaryFill4(x,y-1,boundarycolor,newcolor);}}
基本思想:從多邊形內(nèi)部任一點(diǎn)(像素)出發(fā),依“左上右下”順序判斷相鄰像素,若其不是邊界像素且沒有被填充過,對其填充,并重復(fù)上述過程,直到所有像素填充完畢。第二十四頁,共三十頁,2022年,8月28日例:填充如下區(qū)域:堆棧的變化如圖所示。邊界表示的四連通區(qū)域種子填充算法 基本思想:從多邊形內(nèi)部任一點(diǎn)(像素)出發(fā),依“左上右下”順序判斷相鄰像素,若其不是邊界像素且沒有被填充過,對其填充,并重復(fù)上述過程,直到所有像素填充完畢。 可以使用棧結(jié)構(gòu)來實(shí)現(xiàn)該算法,算法的執(zhí)行步驟如下: 種子像素入棧,當(dāng)棧非空時,重復(fù)執(zhí)行如下三步操作:
1)棧頂像素出棧;
2)將出棧像素置成多邊形填充的顏色;
3)按左、上、右、下的順序檢查與出棧像素相鄰的四個像素,若其中某個像素不在邊界上且未置成多邊形色,則把該像素入棧。第二十五頁,共三十頁,2022年,8月28日(2)內(nèi)點(diǎn)表示的四連通區(qū)域種子填充算法 基本思想:從多邊形內(nèi)部任一點(diǎn)(像素)出發(fā),依“左上右下”順序判斷相鄰像素,如果是區(qū)域內(nèi)的像素,則對其填充,并重復(fù)上述過程,直到所有像素填充完畢。它也常稱為漫水法。 可以使用棧結(jié)構(gòu)來實(shí)現(xiàn)該算法,算法的執(zhí)行步驟如下: 種子像素入棧,當(dāng)棧非空時,重復(fù)執(zhí)行如下三步操作:
1)棧頂像素出棧;
2)將出棧像素置成多邊形填充的顏色;
3)按左、上、右、下的順序檢查與出棧像素相鄰的四個像素,若其中某個像素是區(qū)域內(nèi)的像素,則把該像素入棧。第二十六頁,共三十頁,2022年,8月28日VoidFloodFill4(intx,inty,intoldcolor,intnewcolor){if(getpixel(x,y)==oldcolor){/*getpixel(x,y)取屏幕上像素(x,y)的顏色,oldcolor為區(qū)域的原色*/putpixel(x,y,newcolor);//著色
FloodFill4(x-1,y,oldcolor,newcolor);FloodFill4(x,y+1,oldcolor,newcolor);FloodFill4(x+1,y,oldcolor,newcolor);FloodFill4(x,y-1,oldcolor,newcolor);}}
內(nèi)點(diǎn)表示的四連通區(qū)域種子填充算法(基于遞歸)取(x,y)為種子點(diǎn)基本思想:從多邊形內(nèi)部任一點(diǎn)(像素)出發(fā),依“左上右下”順序判斷相鄰像素,如果是區(qū)域內(nèi)的像素,則對其填充,并重復(fù)上述過程,直到所有像素填充完畢第二十七頁,共三十頁,2022年,8月28日特點(diǎn):(1)有些像素會入棧多次,降低算法效率;棧結(jié)構(gòu)占空間。(2)遞歸執(zhí)行,算法簡單,但效率不高,區(qū)域內(nèi)每一像
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《國際物流管理 第4版》 課件 第8章 國際物流海洋運(yùn)輸管理
- 植物夏季護(hù)理指南
- 2026年生物科技服務(wù)公司消防管理制度
- 掌握成本核算的一般原理基本要求
- 易遨mse系統(tǒng)培訓(xùn)課件
- 把握職位管理要點(diǎn) 提升服務(wù)工作水平
- 引流培訓(xùn)課件方向及內(nèi)容
- 六項(xiàng)精進(jìn)培訓(xùn)課件
- 腹瀉培訓(xùn)課件教學(xué)
- 住院患者飲食健康宣教全員培訓(xùn)
- 狼和鴨子兒童故事課件
- 駁回再審裁定書申請抗訴范文
- 2025北京高三二模語文匯編:微寫作
- DB6301∕T 4-2023 住宅物業(yè)星級服務(wù)規(guī)范
- 護(hù)理查房與病例討論區(qū)別
- 土建資料管理課件
- 公司安全大講堂活動方案
- GB/T 42186-2022醫(yī)學(xué)檢驗(yàn)生物樣本冷鏈物流運(yùn)作規(guī)范
- T/CA 105-2019手機(jī)殼套通用規(guī)范
- 重癥胰腺炎的中醫(yī)護(hù)理
- 部編版語文六年級上冊第一單元綜合素質(zhì)測評B卷含答案
評論
0/150
提交評論