資源描述:
《實驗三圖形裁剪算法實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學術(shù)論文-天天文庫。
1、實驗三圖形裁剪算法實現(xiàn)實驗學時:2學時實驗類型:驗證型實驗要求:必修在使用計算機處理圖形信息吋,計算機內(nèi)部存儲的圖形往往比較大,而屏幕顯示的只是閣的一部分。因此需要確定閣形中哪些部分落在顯示區(qū)之(Al,哪些落在顯示區(qū)之外,以使只顯示落在顯示區(qū)內(nèi)的那部分圖形。這個選擇過程稱為裁剪。最簡單的裁剪方法是把各種圖形掃描轉(zhuǎn)換為點之盾,再判斷各點是否在窗內(nèi)。但那樣太費時,一般不可取。這是因為冇些閣形紺成部分全部在窗UI外,可以完全排除,不必進行掃描轉(zhuǎn)換。所以一般采川先裁剪再掃描轉(zhuǎn)換的方法,多邊形裁剪示意圖,如圖1-1所示。(a)裁剪前(b)裁剪后圖1-1多邊形裁剪示意圖直線裁剪1.直線和窗口的
2、關(guān)系直線和窗U的關(guān)系如圖1-2所示,可以分為如卜*3類:(1)整條直線在窗口內(nèi)。此時,不需剪裁,顯示整條直線。(2)整條且線在窗口外,此時,不需剪裁,不顯示整條K線。(3)部分直線在窗口內(nèi),部分直線在窗U外。此吋,需耍求出直線與窗框的交點,并將窗口外的直線部分剪裁棹,顯示窗口內(nèi)的直線部分。直線剪裁算法冇兩個主要步驟。首先將不需剪裁的且線挑出,即刪去在窗外的直線。然后,對其余宜線,逐條與窗框求交點,并將窗口外的部分刪去。2.Cohen-Sutherland直線剪裁算法以區(qū)域編碼為基礎(chǔ),將窗口及其周圍的8個方向以4bit的二進制數(shù)進行編碼。如圖1-3所示的編碼方法將窗UI及其鄰域分為5
3、個區(qū)域。(1)內(nèi)域:區(qū)域(0000)。(2)上域:區(qū)域(1001,1000,1010)。(3)下域:區(qū)域(0101,0100,0110)。(4)左域:區(qū)域(1001,0001,0101)。100110001010000100000010010101000110P,圖1-3WlI及M鄰域的5個區(qū)域及與肖線的關(guān)系(5)心域:區(qū)域(1010,0010,0110)。當線段的兩個端點的編碼的邏輯“與”非零時,線段妯然為不可見的。對某線段的兩各端點的區(qū)號進行位與運算,可知這兩個端點是否同在視區(qū)的上、下、左、右。算法的主要思想是,對每條直線,如P,P2利用以下步驟進行判斷:①對直線兩端點編碼分別
4、記為C,(P,)={6/,,Z?hChJ,},C2(P2)={6Z2,b2,c2,么}其中,at、bi、d、式取值范圍為{l,0},/e{l,2}o②如果則顯示整條直線,取出下一條直線,返回步驟①;否則,進入步驟③。③如果
5、1=1,則求直線與窗上邊的交點,并刪去交點以上部分。如果
6、Z?2I=1?ICi—C*2
7、=1,丨d—d2
8、=1>進什類似處理。④返回步驟①判斷K一條直線。多邊形裁剪多邊形裁剪算法的關(guān)鍵在于,通過剪裁,要保持窗uA多邊形的邊界部分,而且要將窗框的冇關(guān)部分按一定次序插入多邊形的保貿(mào)邊界之間,從而使剪裁后的多邊形的邊仍然保持封閉狀態(tài),以便填色算法得以正確實現(xiàn),多邊形
9、裁剪原理示意閣,如閣1-4所示。(b)按直線剪裁的多邊形圖1-4多邊形裁剪原理示意圖I(c)按多邊形剪裁后的多邊形(1)Sutherland-Hodgman算法思路:將多邊形的各邊先相對于窗U的某一條邊界進行裁剪,然后將裁剪結(jié)果再與另一條邊界進行裁剪,如此重復(fù)多次,便可得到最終結(jié)果。(2)實現(xiàn)方法:①設(shè)置兩個表。輸入頂點表(向量)——用于存放被裁剪多邊形的頂點輸出頂點表(線性鏈表)——用于存放裁剪過程中叫結(jié)果的頂點②輸入頂點表中各頂點要求按一定順序排列,一般可采用順時針或逆時針方向。③相對于裁剪窗口的各條邊界,按頂點表中的順序,逐邊進行裁剪。(3)具體操作步驟如下:①P,?若位于邊
10、界線的可見一側(cè),則P,?送給輸出頂點表。②P,?若位于邊界線的不對見一側(cè),則將其舍棄。③除第一個頂點外,還要檢查每一個P,?和前一?頂點Py是否位于窗口邊界的同一?側(cè),若不在同一側(cè),則需計算出交點送給輸出頂點表。④最后一個頂點則還要與A—起進行同樣的檢杏。如下閣1-6所示,是上述多邊形裁剪的原理示意閣。圖1-6多邊形裁剪原現(xiàn)示意圖2似q3Q圖形裁剪編程1.程序設(shè)計功能說明如圖1-7所示為圖形裁剪的實用程序運行時的主界Iftf,首先根裾界側(cè)提示,在用戶區(qū)雙擊,出現(xiàn)所需要裁剪的各種線段,再單擊菜單中“閣形裁剪”,可選擇其下拉菜單的各閣形裁剪選項完成各種圖形裁剪(在窗U中紅矩形框外的線
11、段或多邊形被裁減掉)。圖1-7“圖形裁剪”程序主界面1.程序設(shè)計步驟程序“閣形裁剪”的設(shè)計步驟如不:(1)創(chuàng)建工程名稱為“圖形裁剪”單文檔應(yīng)用程序框梁(參看上面單文檔應(yīng)用程序框架的建立)。(2)編輯菜單資源。圖1-8圖形裁剪切界面設(shè)計如圖1-8所示的菜雄項。在工作區(qū)的ResourceView標簽屮,單擊Menu項左邊“+”,然后雙擊其子項IDR.MAINFRAME,并根裾表1-9中的定義編輯菜單資源。表1-9菜單資源表菜單標題菜單項標題標示符ID圖形裁剪線段裁剪ID.