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