摘 要:計(jì)算機(jī)圖形學(xué)在計(jì)算機(jī)技術(shù)的發(fā)展中不斷被拓展,而且對(duì)于圖形的使用是越來(lái)越多,使得怎么樣更好的讓計(jì)算機(jī)圖形技術(shù)為我們工作和生活服務(wù),就顯得更加重要了,本文將研究計(jì)算機(jī)圖形學(xué)中的二維裁剪算法。
關(guān)鍵詞:計(jì)算機(jī)圖形學(xué);二維裁剪算法;研究
1 計(jì)算機(jī)圖形學(xué)中的二維裁剪算法認(rèn)識(shí)
裁剪算法分為點(diǎn)裁剪、直線段裁剪、區(qū)域多邊形裁剪、曲線裁剪和文字裁剪,所以簡(jiǎn)稱又叫裁剪,從數(shù)據(jù)集合中識(shí)別指定區(qū)域內(nèi)或指定區(qū)域外圖形部分的過(guò)程。裁剪有多方面應(yīng)用,主要應(yīng)用的方面有使用實(shí)體造型創(chuàng)建對(duì)象、在三維視圖中標(biāo)示出可見(jiàn)面、對(duì)圖形的一部分進(jìn)行刪除、復(fù)制或移動(dòng)操作、防止圖形邊界混淆、從特定場(chǎng)景中抽取指定部分等。本文主要討論二維裁剪算法是對(duì)二維線段的裁剪和對(duì)二維多邊形的裁剪,對(duì)二維線段的裁剪以及對(duì)二維多邊形的裁剪,在這兩方面,國(guó)內(nèi)外許多專家學(xué)者都進(jìn)行了深入的研究,出現(xiàn)了很多經(jīng)典算法。對(duì)于前者,比較經(jīng)典的算法有便于硬件實(shí)現(xiàn)的中點(diǎn)分割算法,基于編碼技術(shù)的Cyrus-Berk裁剪算法,Nicholl等提出的基于幾何變換技術(shù)的NLN算法,通過(guò)法向點(diǎn)積判別的Cyrus-Ber k裁剪算法,在NLN算法基礎(chǔ)上發(fā)展的ELC算法,以及Liang-Bars ky算法等。另外,還有一種比較高效的只用整數(shù)運(yùn)算來(lái)計(jì)算整數(shù)交點(diǎn)的線裁剪算法,是由M.Dorr綜合了直線參數(shù)表示方法和Cohen-Suthcrland的編碼方法而得到的。裁剪就是確定哪些多邊形等幾何體位于裁剪窗口內(nèi)。然后在一個(gè)矩形內(nèi),對(duì)組成的四條邊中指定的區(qū)域內(nèi)進(jìn)行裁剪口。四條邊分別從上、下(Xl,Yb),、左、右(Xr,Yt)。而裁剪的確定是確定哪些多邊形等幾何體位于裁剪窗口內(nèi)。對(duì)于點(diǎn)(X,Y),只要判斷兩對(duì)不等式:Xl≤X≤Xr,Yb≤Y≤Yt即可。如果四個(gè)點(diǎn)坐標(biāo)的不等式都不成立,則這個(gè)點(diǎn)在矩形窗口外,否則,在窗口內(nèi)。
2 橢圓形裁剪窗口
在實(shí)際應(yīng)用中經(jīng)常要用到圓形或橢圓形裁剪窗口。關(guān)于橢圓窗口對(duì)線段的裁剪,由于計(jì)算更為復(fù)雜,計(jì)算量更大而難以找到一種快速的裁剪算法,橢圓有一條基本性質(zhì),即圓周上任意一點(diǎn)到兩個(gè)定點(diǎn)的距離和等于特定常數(shù),又由橢圓方程可得,a為橢圓的長(zhǎng)半軸長(zhǎng)度,因此可以根據(jù)線段的兩端點(diǎn)到橢圓兩焦點(diǎn)的距離之和是否小于2a的方法,來(lái)確定線段的端點(diǎn)是否位于橢圓內(nèi)。因?yàn)闄E圓上任意一點(diǎn)到兩焦點(diǎn)的距離之和等于2a,在橢圓外部的點(diǎn),到兩焦點(diǎn)的距離之和大于2a,而在橢圓內(nèi)部的點(diǎn),到兩焦點(diǎn)的距離之和大于2a。設(shè)標(biāo)準(zhǔn)橢圓的方程為:x2/a2+y2/b2=1,其中,標(biāo)準(zhǔn)橢圓的中心點(diǎn)為坐標(biāo)軸的原點(diǎn)O,假設(shè)A(Xa,Ya)、B(Xb,Yb)(Xa≤Xb)為被裁剪線段的兩個(gè)端點(diǎn),當(dāng)Xa=Xb時(shí),即坐標(biāo)軸的縱軸與被裁減的線段平行,這時(shí)分為兩種情況,線段完全位于橢圓外部,即Xa>a;否則,則需求取橢圓和線段的交點(diǎn),其橫坐標(biāo)設(shè)為Xa。當(dāng)Ya=Yb時(shí),即坐標(biāo)軸的橫軸與被裁剪線段平行,這時(shí)也有兩種情況,線段完全位于橢圓外部;即Ya>b;否則,求需要求橢圓與線段的交點(diǎn),其縱坐標(biāo)均為Ya。另一種情況就是線段與橢圓有一個(gè)交點(diǎn),即線段的一個(gè)端點(diǎn)在橢圓內(nèi),一個(gè)在橢圓外,此時(shí)要通過(guò)聯(lián)立線段與橢圓的方程求出交點(diǎn),進(jìn)而得到交點(diǎn)和位于橢圓內(nèi)的端點(diǎn)之間的線段,即為所求。假設(shè)兩個(gè)端點(diǎn)均位于橢圓外,就會(huì)出現(xiàn)線段完全位于橢圓窗口外,二者無(wú)交點(diǎn),則可判定裁剪結(jié)束。或者是橢圓與線段有兩個(gè)交點(diǎn),就需要看過(guò)原點(diǎn)位置,和距離大小。
3 橢圓形窗口線裁剪算法操作
橢圓形窗口裁剪后所得線段的兩個(gè)端點(diǎn)設(shè)為(X1,Y1)、(X2,Y2),線段兩端點(diǎn)到橢圓焦點(diǎn)的距離之和為Da、Db,原點(diǎn)O到AB 的垂足為P(Xp,Yp),平行于線段AB且和橢圓相切的線段CD到中心點(diǎn)的距離為L(zhǎng)t。
if(Xa==Xb)
{if(Xa>a)
break;//被裁剪線段完全位于橢圓窗口外的情況
else
X1=X2=Xa;
else if(Ya==Yb)
{if(Ya>b)
break;//被裁剪線段完全位于橢圓窗口外的情況
else
Y1=Y2=Ya;
}
else if(min{Xa,Xb}≥a或max{Xa,Xb}≤-a或min(Ya,Yb)≥b或max{Ya,Yb}≤-b)
break;//被裁剪線段完全位于橢圓窗口外的情況
else i
Y1=Y2=Ya;
}
else if(min{Xa,Xb}≥a或max{Xa,Xb}≤-a或min(Ya,Yb)≥b或max{Ya,Yb}≤-b)
break;//線段完全位于橢圓窗口外部的情況
else if (Xa
break;//被裁剪線段完全位于橢圓外部的情況
else求出(X1,Y1)、(X2,Y2);
} }else
break;//線段與橢圓無(wú)交點(diǎn),完全位于橢圓外部的情況},這就使得橢圓形窗口線裁剪算法得以實(shí)現(xiàn)。
[參考文獻(xiàn)]
[1]王浩朋.二維圖形的裁剪算法研究與改進(jìn)[D].西安電子科技大學(xué),2011.
[2]易飛.次橢圓方程在圖像處理中的應(yīng)用[D].南京理工大學(xué),2013.
[3]陳超.圓與橢圓對(duì)多邊形裁剪算法研究[D].哈爾濱工程大學(xué),2008.
[4]李海姣.任意多邊形的裁剪算法及其在土建工程中的應(yīng)用[D].華東交通大學(xué),2005.
[5]閻雙.計(jì)算機(jī)圖形學(xué)算法可視化教學(xué)研究與實(shí)現(xiàn)[D].遼寧師范大學(xué),2007.