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