?

基于端點區域分布的圓形窗口線裁剪算法

2012-06-11 03:35任洪海
大連交通大學學報 2012年1期
關鍵詞:角區外切端點

任洪海

(大連交通大學 軟件學院,遼寧 大連 116052)

0 引言

圓形窗口線裁剪擁有很強的實用價值,人們一直努力尋求高效的裁剪算法[1-6].確定線段是否與圓形窗口相交是該類算法的關鍵.很多算法都引入窗口圓的外切正方形與內接正方形作為預處理操作.一般外切正方形指四邊分別平行于坐標軸且與圓相切的正方形;而內接正方形指四邊分別平行于坐標軸且包含在圓內部的最大正方形.這樣定義往往只能獨立確定一部分完全在外切正方形之外和完全在內接正方形之內的特殊線段,后續還需進一步判斷剩余的線段.多數算法為此都應用了較為煩瑣的輔助操作.例如,文獻[3]中的旋轉矢量法、文獻[4]中制備規范化交點表、文獻[5]需要進行多重編碼、文獻[6]中幾何變換和逆變換等都需要花費很大精力.本文通過巧妙地定義外切正方形與內接正方形使圓心為坐標原點的圓形窗口在四個象限的圓弧分別位于四個三角區域,將其定義為角區.由此,將裁剪窗口所在平面劃分為內接正方形之內、外切正方形之外和角區三部分.根據線段兩端點在不同區域的分布情況完成裁剪過程.在裁剪過程中很多較復雜的判斷都轉化為線段所在直線與角區外界的相交情況進行處理,通過簡單判別快速確定線段是否與圓形窗口相交,從而顯著提高裁剪效率.

1 理論基礎

不失一般性,假設裁剪算法中圓形窗口的圓心為坐標原點,半徑為r;被裁剪線段的兩個端點為 p1(x1,y1)和 p2(x2,y2).

定義1 本文中的“外切正方形”指四邊平行于坐標軸,且與圓相切的正方形.

點在外切正方形之內(或上)的判斷條件為:︱x︱≤r且 ︱y︱≤r;

點在外切正方形之外的判斷條件為:︱x︱ >r或 ︱y︱ > r.

定義2 本文中的“內接正方形”指順序連接外切正方形與圓的四個切點所形成的正方形.

點在內接正方形之內(或上)的判斷條件為:︱x︱ +︱y︱≤r;

點在內接正方形之外的判斷條件為:︱x︱ +︱y︱ > r.

定義3 在外切正方形之內(或上)且內接正方形之外的四個等腰直角三角形區域分別定義為角區,并根據所在象限區分為:第Ⅰ角區、第Ⅱ角區、第Ⅲ角區、第Ⅳ角區,如圖1.

定義4 每個角區的兩條直角邊稱為角區外界.角區外界根據各自所屬角區進行區分,四個角區所有的角區外界構成整個外切正方形.如果有直線相交于角區外界,可以根據交點坐標的符號確定是相交于相同角區外界還是相異角區外界.

圖1 線段裁剪部分示例圖

定義5 如果端點在某角區內,進一步判斷端點與圓形窗口的位置關系:如果端點在圓形窗口之內(或上),稱該點在內角區;如果端點在圓形窗口之外,稱該點在外角區.

定理1 如果一條直線相交于兩相異角區外界,則該直線一定與圓形窗口相交.

證明:不失一般性,假設直線相交于第一角區水平角區外界,設交點為I1(如圖1中線段a所在直線),過該點向圓形窗口作切線.其中一條是與外切正方形部分水平邊重合,而另一條切線一定與第一角區垂直外界相交,設交點為I2.如果過I1點的直線與圓外切正方形相交于兩相異角區外界,則該直線一定在兩切線之間,因而與圓形窗口相交.

由定理1可推導出以下結論:

結論1 如果線段兩端點分別在兩相異外角區,可得線段一定與圓形窗口相交(如圖1中線段b).

結論2 如果線段一端點在外角區,另一端點在外切正方形之外,且線段相交于端點所在角區的相異角區外界,可得線段一定與圓形窗口相交(如圖1中線段c).

結論3 如果線段兩端點都在外切正方形之外,且線段相交于兩相異角區外界,可得線段一定與圓形窗口相交(如圖1中線段a).

結論4 如果線段一端點在外角區,另一端點在外切正方形之外,線段相交于本角區外界但延長外角區內端點后延長線相交于相異角區外界,可得線段一定不與圓形窗口相交(如圖1中線段d).

結論5 如果線段兩端點分別在同一外角區內,并且線段所在直線相交于不同角區外界,可得該線段一定不與圓形窗口相交(如圖1中線段e).

結論1~3由定理1很容易推出,結論4與結論5證明過程為:兩種情況都是線段所在直線相交于不同角區外界,根據定理1,線段延長后的直線與圓形窗口相交,而線段兩端點都在兩交點的同側,因而該線段本身一定不與圓形窗口相交.

以上結論所涉及的線段可以歸納為線段所在直線相交于不同角區外界的各種情況.當線段所在直線與某角區兩角區外界相交時,可根據該角區外界上兩個交點坐標判斷線段所在直線是否與圓形窗口相交.下面以線段相交于第Ⅰ角區兩角區外界為例討論該線段與圓形窗口的位置關系.

對于任意相交于第Ⅰ角區外界的線段f,兩交點為I1(xT,r),I3(r,yR).可以取兩個交點任意一個,過該點作圓形窗口的切線.假設取I1,作圓形窗口的切線,與第Ⅰ角區垂直方向角區外界的交點設為I2(r,y'R)(如圖1),根據切線長定理有:

由于相交于第Ⅰ角區外界,將上面兩個公式整理可得:xT×y'R=r2-(xT+y'R)r,由此求出:

比較yR與y'R的大小可得線段f與圓形窗口的位置關系:

如果yR>y'R,可得線段f與圓形窗口相離;

如果yR=y'R,可得線段f與圓形窗口相切;

如果yR<y'R,可得線段f與圓形窗口相交;

對于相交其它兩角區外界的線段,同樣可進行類似推導,并得出相應結論,在此不再描述.

2 算法描述

根據被裁剪線段兩端點區域分布情況裁剪過程討論如下:

(一)如果線段兩端點都在內接正方形之內,可得線段完全在圓形窗口之內,保留該線段作為裁剪結果,如圖2中線段a.

圖2 線段裁剪部分示例圖

(二)如果線段一端點在內接正方形之內,而另一端點在外切正方形之外,可得線段與圓形窗口相交,求交點.內接正方形之內的端點到交點間線段為裁剪結果,如圖2中線段b.

(三)如果線段一端點在內接正方形之內,而另一端點在角區內,進一步判斷角區內的端點在內角區還是外角區.

(1)如果端點在內角區,可得線段完全在圓形窗口之內,保留該線段作為裁剪結果,如圖2中線段c.

(2)如果端點在外角區,可得線段與圓形窗口相交,求交點.內接正方形之內的端點到交點間線段為裁剪結果,如圖2中線段d.

(四)如果線段一端點在角區,而另一端點在切正方形之外,進一步判斷角區內的端點在內角區還是外角區.

(1)如果端點在內角區,可得線段與圓形窗口相交,求交點.角區內端點到交點間線段為裁剪結果,如圖2中線段e.

(2)如果端點在外角區,線段一定與某角區外界相交,判斷是否相交于內端點所在角區外界.

①如果線段相交于相異角區外界,根據結論2可得線段一定與圓形窗口相交,兩交點間線段為裁剪結果,如圖1中線段c.

②如果線段相交于本角區外界但延長線相交于其它角區外界,根據結論4可得線段一定不與圓形窗口相交,如圖1中線段d.

③如果線段所在直線相交于內端點所在角區外界,求線段所在直線與該角區兩角區外界的交點,設交點為I1、I2,判斷線段I1I2與圓形窗口的位置關系:

a.如果I1I2與圓形窗口相離,可得線段不與圓形窗口相交,無裁剪結果輸出,如圖2中線段f.

b.如果I1I2與圓形窗口相交或相切,判斷兩端點p1、p2與線段p1p2主射線的位置關系.

如果兩端點p1、p2分別在線段p1p2主射線的兩側,方法為:

如果min(y1/x1,y2/x2)< (x1-x2)/(y2-y1)<max(y1/x1,y2/x2),線段與圓形窗口有交點,交點間線段為裁剪結果,如圖2中線段g.

否則線段與圓形窗口無交點,無裁剪結果輸出,如圖2中線段h.

(五)如果線段兩端點都在角區,進一步判斷兩端點在內角區還是外角區.

(1)如果兩端點都在內角區,則線段完全在圓形窗口內,保留該線段作為裁剪結果,如圖2中線段 i.

(2)如果一個端點在內角區,另一個端點在外角區,則線段與圓形窗口有一交點,內角區內端點到交點間線段為裁剪結果,如圖2中線段j.

(3)如果兩個端點都在外角區,根據端點所在象限區分是否在相同外角區:

①如果兩端點分別在不同外角區,根據結論1可得線段與圓形窗口有兩個交點,交點間線段為裁剪結果,圖1中線段b.

②如果兩端點在同一外角區,測試線段所在直線與外切正方形的相交情況:

a.如果相交于不同角區外界,根據結論5可得線段不與圓形窗口相交,無裁剪結果輸出,如圖1中線段e.

b.如果相交于同一角區外界,設交點為I1、I2,判斷線段I1I2與圓形窗口的位置關系:

c.如果I1I2與圓形窗口相離,可得線段不與圓形窗口相交,無裁剪結果輸出,如圖2中線段k.

d.如果I1I2與圓形窗口相交或相切,判斷兩端點p1、p2與線段p1p2主射線的位置關系:

如果兩端點p1、p2分別在線段p1p2主射線的兩側,方法為:

如果min(y1/x1,y2/x2)< (x1-x2)/(y2-y1)<max(y1/x1,y2/x2),線段與圓形窗口有交點,交點間線段為裁剪結果,如圖2中線段l.

否則線段與圓形窗口無交點,無裁剪結果輸出,如圖2中,在線段h上取角區內一小線段.

(六)如果兩個端點都在外切正方形之外.進一步判斷線段與外切正方形的相交情況.

(1)如果線段不與外切正方形相交,可得線段一定不與圓形窗口相交,即無裁剪結果輸出,如圖2中線段m.

(2)如果線段與外切正方形相交于兩不同角區外界,可得線段一定與圓形窗口相交,兩交點間線段為裁剪結果,如圖1中線段a.

(3)如果線段與外切正方形相交于同一角區外界,設兩交點為I1、I2,判斷線段I1I2與圓形窗口的位置關系:

①如果I1I2與圓形窗口相離,可得線段不與圓形窗口相交,無裁剪結果輸出,如圖1中線段f.

②如果I1I2與圓形窗口相交或相切,可得線段與圓形窗口有交點,交點間線段為裁剪結果,如圖1中線段g.

3 結論

作為圓形窗口線裁剪算法,快速確定線段與圓形窗口的相交情況是提高效率的關鍵.本文提出的新算法在未增加其它復雜輔助操作前提下,通過判斷被裁剪線段兩端點相對于外切正方形與內接正方形所劃分的不同區域情況完成裁剪過程.在算法中通過角區及角區外界等概念的引入,首次提出根據被裁剪線段相交于外切正方形及內接正方形的情況直接確定是否與圓形窗口相交,避免大量不必要的求交運算及其它輔助操作.同時,新算法設計簡單,容易實現.應用C++編程實現文獻[4-6]及本文算法,附表列出四個裁剪算法對于不同半徑圓形窗口裁剪300萬條隨機線段所需的時間比較.

附表 種裁剪算法裁剪300萬條線段所需時間比較 s

由附表可以看出新算法的裁剪效率都高于現有的三個典型算法.

[1]姚涵珍,宋鵬,張國安.圓形窗口裁剪算法的研究與實踐[J].計算機輔助設計與圖形學學報,1992,4(3):14-20.

[2]劉勇奎.圓形及橢圓形裁剪窗口[J].計算機工程與設計,1994,15(4):33-37.

[3]沈慶云,周來水,周儒榮.一種圓形窗口裁剪的新方法[J].計算機輔助設計與圖形學學報,1997,9(6):538-542.

[4]蔡敏,袁春風,宋繼強,等.一種快速的圓形窗口裁剪算法[J].計算機輔助設計與圖形學學報,2001,13(12):1063-1067.

[5]陸國棟,邢軍偉,譚建榮.基于多重編碼技術的圓形窗口線裁剪算法[J].計算機輔助設計與圖形學學報,2002,14(12):1133-1137.

[6]唐棣,單會秋.一種基于坐標變換的圓形窗口線裁剪算法[J].計算機應用與軟件,2006,23(5):116-118.

猜你喜歡
角區外切端點
關于橢圓外切平行四邊形的一個幾何不變量
非特征端點條件下PM函數的迭代根
基于Faster-RCNN和Level-Set的橋小腦角區腫瘤自動精準分割
壓氣機角區分離流動機理及控制方法研究
不等式求解過程中端點的確定
探究拋物線內接、外切三角形的性質
橢圓內接外切六邊形的幾何特性研討
圓外切三角形與圓的關系
腦橋小腦角區病變CT與MRI的診斷對比分析
基丁能雖匹配延拓法LMD端點效應處理
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合