亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法

文檔序號(hào):6129985閱讀:738來源:國知局
專利名稱:Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)圖形學(xué)領(lǐng)域、GDI(Graphics Device Interface,圖形設(shè)備接口)基礎(chǔ)圖形生成算法,尤其涉及一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法,其能夠快速實(shí)現(xiàn)直線裁剪顯示,尤其適用于例如嵌入式地理信息系統(tǒng)、導(dǎo)航系統(tǒng)中地理圖形在窗口中的快速裁剪顯示。
背景技術(shù)
本發(fā)明來源于“LBS(Location Based Service,基于位置的服務(wù))軟件平臺(tái)”項(xiàng)目,可以通過無線定位技術(shù)和GIS(GeographicInformation System,地理信息系統(tǒng))技術(shù)的結(jié)合,通過嵌入式用戶終端(手機(jī)等)的圖形顯示系統(tǒng)來告訴用戶需要的地理位置圖形信息。
在顯示基于目標(biāo)地理位置的信息時(shí),需要頻繁地調(diào)用基礎(chǔ)圖形生成算法來進(jìn)行地理圖形描畫,因此,高效的圖形描畫算法,即計(jì)算機(jī)圖形學(xué)基礎(chǔ)算法研究是該軟件平臺(tái)研究的關(guān)鍵之一。市場上的嵌入GIS設(shè)備幾乎都存在地理圖形描畫速度慢的問題,快速高效的圖形生成算法無疑會(huì)極大地改善地理信息服務(wù)的系統(tǒng)性能和效率,提高用戶滿意度和產(chǎn)品競爭力。
當(dāng)需要顯示地圖的某一部分時(shí),要設(shè)定一個(gè)裁剪窗口,使用裁剪算法,使窗口內(nèi)的圖形得以顯示,而窗外的圖形部分則被裁剪掉。圖形裁剪是計(jì)算機(jī)圖形學(xué)的最基本內(nèi)容之一,它在消除隱藏線、隱藏面、及真實(shí)感顯示等算法中也是有用的工具。在顯示地圖窗口時(shí),矩形窗口的直線裁剪使用的最為頻繁,因此,矩形窗口直線裁剪算法的效率是嵌入式地理圖形系統(tǒng)性能的關(guān)鍵。
矩形窗口的直線裁剪算法是研究最為深入的一類算法,其中,經(jīng)典的算法有Sutherland-Cohen算法、中點(diǎn)分割算法、Liang-Barsky算法、及Nicholl-Lee-Nicholl算法等,這些算法幾乎都用到了浮點(diǎn)運(yùn)算。M.Dorr對(duì)現(xiàn)有的一些直線裁剪算法進(jìn)行了整數(shù)化實(shí)現(xiàn),這樣可以不使用浮點(diǎn)運(yùn)算,從而提高了算法的執(zhí)行速度。其中,Liang-Barsky的算法比較快速,還可以方便的擴(kuò)展到三維、四維裁剪。但是,該算法對(duì)我們的應(yīng)用來說存在兩個(gè)問題,首先,在低檔的嵌入系統(tǒng)中浮點(diǎn)運(yùn)算會(huì)使裁剪速度變慢,另外,浮點(diǎn)運(yùn)算求出的直線端點(diǎn)坐標(biāo)在取整時(shí)有誤差,該誤差會(huì)使被裁剪線段端點(diǎn)的某個(gè)像素畫到裁剪窗口之外。
雖然計(jì)算機(jī)圖形學(xué)基礎(chǔ)算法的研究已經(jīng)有40余年的歷史,其發(fā)展已經(jīng)相當(dāng)成熟,很難再做出創(chuàng)新性的成果,但是基礎(chǔ)算法的微小進(jìn)步就會(huì)可觀的改善圖形系統(tǒng)效率。研究、改善和優(yōu)化基礎(chǔ)圖形生成算法有著很重要的意義。因此,如果能夠?qū)iang-Barsky算法整數(shù)化進(jìn)行改造,并解決其出界誤差的問題無疑是理想的,然而,目前還沒有實(shí)現(xiàn)與此相關(guān)的技術(shù)。

發(fā)明內(nèi)容
考慮到現(xiàn)有技術(shù)中存在的上述問題而提出本發(fā)明,為此,本發(fā)明旨在提供一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法,其在對(duì)Liang-Barsky算法整數(shù)化進(jìn)行改造的同時(shí),還提出了出界誤差的解決辦法,可以在裁剪后圖塊拼接時(shí)體現(xiàn)出無縫連續(xù)性。
根據(jù)本發(fā)明,提供了一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法。
該方法包括以下處理根據(jù)顯示器物理分辨率和預(yù)定原則,確定裁剪參數(shù)的數(shù)據(jù)長度l,其中,整數(shù)部分長度為m,小數(shù)部分長度為n,l=m+n;使用預(yù)定算法,將浮點(diǎn)數(shù)變?yōu)檎麛?shù),并通過預(yù)定處理消除裁剪邊界取值誤差。
其中,上述的預(yù)定原則為在顯示器的分辨率為h行r列個(gè)像素的情況下,2m>r+h,2n-1>r+h。另外,r可以為需要繪圖的最大區(qū)域邊界的寬度像素,h可以為需要繪圖的最大區(qū)域邊界的高度像素。上述的預(yù)定算法為x=x1+(U×Δx)×2-n,其中,Δx=x2-x1,U∈
y=y(tǒng)1+(U×Δy)×2-n,其中,Δy=y(tǒng)2-y1,U∈
,其中,(x,y)為直線上的坐標(biāo)值,U是直線參數(shù)方程的參數(shù),(x1,y1)、(x2,y2)為直線端點(diǎn)。
進(jìn)一步地,上述預(yù)定算法為x=x1+U×Δx×2-n,其中,Δx=x2-x1,U∈[-2m·2n,2m·2n]y=y(tǒng)1+U×Δy×2-n,其中,Δy=y(tǒng)2-y1,U∈[-2m·2n,2m·2n]且m+n=31;其中,(x,y)為直線上的坐標(biāo)值,U是直線參數(shù)方程的參數(shù),(x1,y1)、(x2,y2)為直線端點(diǎn)。
另外,上述的預(yù)定處理為在屏幕坐標(biāo)系的右邊界和上邊界,當(dāng)直線出矩形區(qū)域時(shí),在右邊界和上邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量向下取整,從而消除裁剪邊界取值誤差;當(dāng)直線進(jìn)入矩形區(qū)域時(shí),在右邊界和上邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量向上取整,從而消除裁剪邊界取值誤差;判斷屏幕坐標(biāo)系的左邊界和上邊界,如果直線出界,則將窗口邊界值賦給裁剪端點(diǎn)坐標(biāo),從而消除裁剪邊界取值誤差。
通過本發(fā)明,實(shí)現(xiàn)了簡單實(shí)用的Liang-Barsky算法的整數(shù)化處理方法,提高了矩形窗口直線裁剪的速度、效率、以及精確度,同時(shí)有效地解決了現(xiàn)有技術(shù)中像素出界的問題。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。


附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中圖1是根據(jù)本發(fā)明實(shí)施例的Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法的流程圖;圖2-a和圖2-b是使用根據(jù)現(xiàn)有技術(shù)的Liang-Barsky算法對(duì)隨機(jī)產(chǎn)生的1000條線段進(jìn)行矩形窗口裁剪的效果圖,其中,圖2-a為四舍五入的效果圖,圖2-b為向下取整的效果圖;
圖3是使用根據(jù)本發(fā)明實(shí)施例的整數(shù)化改造的Liang-Barsky算法對(duì)隨機(jī)產(chǎn)生的1000條線段進(jìn)行矩形窗口裁剪的效果圖;以及圖4-a和圖4-b是使用根據(jù)本發(fā)明實(shí)施例的整數(shù)化改造的Liang-Barsky算法進(jìn)行圖案拼接的效果圖。
具體實(shí)施例方式
以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
根據(jù)本發(fā)明實(shí)施例,提供了一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法。
如圖1所示,該方法主要通過以下兩個(gè)步驟來實(shí)現(xiàn)步驟S102,根據(jù)顯示器物理分辨率和預(yù)定原則,確定裁剪參數(shù)的數(shù)據(jù)長度l,其中,整數(shù)部分長度為m,小數(shù)部分長度為n,l=m+n;步驟S104,使用預(yù)定算法,將浮點(diǎn)數(shù)變?yōu)檎麛?shù),并通過預(yù)定處理消除裁剪邊界取值誤差。
以下將進(jìn)一步描述上述處理的具體實(shí)現(xiàn)過程和各個(gè)細(xì)節(jié)。
(一)關(guān)于m、n的選取以及公式的設(shè)置直線矩形裁剪的過程主要是判斷被裁剪線段與裁剪窗口的位置關(guān)系,如果被裁剪線段在裁剪窗口內(nèi)有可視部分,那么截取這一部分,主要是計(jì)算可視部分及與窗口邊界的交點(diǎn)。在Liang-Barsky裁剪算法中,被裁剪的線段以參數(shù)化(浮點(diǎn)數(shù))的形式表示,這樣,可以推導(dǎo)出一組表示剪切區(qū)域內(nèi)外的條件表達(dá)式。這些表達(dá)式有相同的形式,可以重寫它們,把裁剪問題簡化為最大/最小問題。該算法的一個(gè)優(yōu)點(diǎn)是可以快速的舍棄可視區(qū)域之外的線段。該算法中如果P1和P2的坐標(biāo)分別為(x1,y1)、(x2,y2),則線段P1->P2的參數(shù)方程形式為x=x1+uΔx,其中,Δx=x2-x1,u∈
y=y(tǒng)1+uΔy,其中,Δy=y(tǒng)2-y1,u∈
(公式1)當(dāng)上式中的參數(shù)u<0或u>1時(shí),參數(shù)方程確定的點(diǎn)(x,y)在該直線段的延長線上。
在本發(fā)明中,對(duì)該參數(shù)方程進(jìn)行整數(shù)化的方法為對(duì)于一條被裁剪線段來說,其參數(shù)方程中的參數(shù)取值范圍為u∈
,假設(shè)將這個(gè)區(qū)間量化為
,只要n夠大,某種程度的精度就可以用
之間的一個(gè)整數(shù)來表示
之間的一個(gè)浮點(diǎn)數(shù)。假設(shè)n=16,這樣0.4就可以用0.4×216=26214表示,而0.334可以用21889表示,最大量化誤差為0.00001526。此時(shí)(公式1)的參數(shù)方程可以這樣表示x=x1+(U×Δx)×2-16,其中,Δx=x2-x1,U∈
y=y(tǒng)1+(U×Δy)×2-16,其中,Δy=y(tǒng)2-y1,U∈
(公式2)其中,(x1,y1)(x2,y2)為被裁剪的線段的端點(diǎn)坐標(biāo)。
即,本發(fā)明用U/216這個(gè)分?jǐn)?shù)值來代替了(公式1)中的浮點(diǎn)參數(shù)u,這樣處理造成的量化誤差為Δx×2-16=0.00001526×Δx個(gè)像素值,當(dāng)Δx的值等于0.5/0.00001526=32765個(gè)像素時(shí),這個(gè)量化誤差為0.5個(gè)像素。(U×Δx)×2-16的最大值表示了公式2的參數(shù)方程所能表示的最大線段長度,為215=32768個(gè)像素。這其實(shí)提出了對(duì)顯示屏幕分辨率的要求,如果顯示屏的最大線性尺度(像素值)超過這個(gè)值,那么就可能會(huì)出現(xiàn)錯(cuò)誤的裁剪結(jié)果。相反如果顯示屏的最大線性尺度遠(yuǎn)小于這個(gè)值,(公式2)的計(jì)算誤差就可以忽略。
下面,本發(fā)明考慮用一個(gè)32位整型數(shù)的高m位來表示浮點(diǎn)參數(shù)的整數(shù)部分,而余下的n=31-m位來表示浮點(diǎn)數(shù)的小數(shù)部分,這樣方程(公式1)的參數(shù)范圍由
放大為
,算法中使用放大后的參數(shù)來裁剪判斷并計(jì)算交點(diǎn)參數(shù),最后在計(jì)算裁剪后線段的端點(diǎn)坐標(biāo)時(shí)再將參數(shù)乘dx或dy后再縮小2n倍,那么,在表示被裁剪線段本身時(shí)有一個(gè)大小為2-ndx或2-ndy像素的誤差,在表示延長線上的點(diǎn)時(shí)會(huì)有2m×2-ndx像素的誤差。并且被裁剪線段的延長線與被裁剪線段的長度的比值不應(yīng)大于2m,否則會(huì)計(jì)算溢出,在嵌入式圖形應(yīng)用中,這種情形不會(huì)發(fā)生。對(duì)計(jì)算機(jī)來說,參與運(yùn)算的是一個(gè)整數(shù),對(duì)編程者來說,這個(gè)整數(shù)包含了整數(shù)部分和小數(shù)部分,可以用軟件的方法來控制這個(gè)整數(shù)部分和小數(shù)部分,從而達(dá)到用整數(shù)運(yùn)算來代替浮點(diǎn)運(yùn)算的效果。
基于上述方法,本發(fā)明考慮如何用參數(shù)方程表示被裁剪線段延長線上的點(diǎn),此時(shí)(公式1)的參數(shù)方程可以這樣表示x=x1+U×Δx×2-n,其中,Δx=x2-x1,U∈[-2m·2n,2m·2n]y=y(tǒng)1+U×Δy×2-n,其中,Δy=y(tǒng)2-y1,U∈[-2m·2n,2m·2n](公式3)其中,m+n=31;(x1,y1)(x2,y2)為被裁剪的線段的端點(diǎn)坐標(biāo)。
該方程可以表示出2m倍長度的延長線。在線長為一個(gè)像素時(shí),方程可以表示的延長線最大長度為正負(fù)2m個(gè)像素,m取合適的值時(shí)就可以覆蓋顯示器要求的延長線上的所有像素點(diǎn)??梢愿鶕?jù)應(yīng)用情況調(diào)整m、n的值,m、n的值要考慮顯示器的分辨率和具體的應(yīng)用情況,下面詳細(xì)說明了m、n的選取原則。
假定顯示器的分辨率為h行r列個(gè)像素,被裁剪線長為L個(gè)像素,則下面不等式成立,
由于1<r2+h2Lmin<r2+h2<r+h,]]>因此,如果使2m>r2+h2Lmin,]]>則需要2m>r+h,而如果使(r+h)*2-n<0.5(Pixel),,則需要2n-1>r+h。
即,上文中提到的預(yù)定原則為在顯示器的分辨率為h行r列個(gè)像素的情況下,2m>r+h,2n-1>r+h。另外,r可以為需要繪圖的最大區(qū)域邊界的寬度像素,h可以為需要繪圖的最大區(qū)域邊界的高度像素。
(r,h)也可表示為應(yīng)用中需要繪圖的最大區(qū)域邊界的寬度和高度象素?cái)?shù)。如果取m=15、n=16,則用(公式3)的參數(shù)方程就可以表達(dá)215×215像素顯示區(qū)域上的所有線段及其延長線上的點(diǎn)。當(dāng)然普通的嵌入圖形系統(tǒng)顯示器一般不超過210×210像素,只要對(duì)輸入裁剪函數(shù)的點(diǎn)坐標(biāo)值的上限加以限制,比如做一個(gè)輸入越界判斷,或者直接定義為16位整型數(shù),就解決了輸入?yún)?shù)越界造成的麻煩。本方法設(shè)計(jì)的算法中m=15,n=16。
在具體實(shí)現(xiàn)裁剪算法(liang-barsky算法)時(shí)對(duì)參數(shù)適時(shí)地放大、縮小即可。
(二)關(guān)于裁剪邊界取值誤差的消除在本發(fā)明中,通過預(yù)定處理解決了使用浮點(diǎn)數(shù)取整運(yùn)算造成的“出界誤差”問題。
在本發(fā)明中,在處理邊界誤差時(shí),采用“內(nèi)斂取整”的原則。在屏幕坐標(biāo)系的右邊界和上邊界,當(dāng)直線出矩形區(qū)域的時(shí)候,在該邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量(從線段的起始點(diǎn)偏移量,為正數(shù))向下取整,從而消除裁剪邊界取值誤差,當(dāng)直線進(jìn)入矩形區(qū)域的時(shí)候,在該邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量(從線段的起始點(diǎn)偏移量,為負(fù)數(shù))向上取整,從而消除裁剪邊界取值誤差。然后,判斷左邊界和上邊界,如果出界,則把窗口邊界值賦給裁剪端點(diǎn)坐標(biāo),從而消除裁剪邊界取值誤差。因此,在圖案拼接時(shí),亦表現(xiàn)出了較好的拼接效果(詳見圖4)。
圖4示出了采用本發(fā)明時(shí)的圖案拼接效果,該圖形是由四個(gè)上下左右相鄰的矩形窗口((50,50),(150,150))、((50,150),(150,250))、((150,50),(250,150))、((150,150),(250,250))對(duì)隨機(jī)產(chǎn)生的3000條(圖4-b)和500條(圖4-a)直線進(jìn)行裁剪后得效果(沒有畫出窗口的內(nèi)部邊界)。其中的某條看起來連續(xù)的線段其實(shí)是一條直線被四個(gè)窗口裁剪成為小線段,然后分段畫出來的??梢钥闯鲈趯?duì)同一組直線裁剪后,再把它們拼起來,拼接效果比較好。
以下通過具體算法實(shí)現(xiàn)了描述本發(fā)明。在以下描述的步驟1和步驟2中,實(shí)際上,本發(fā)明的技術(shù)方案的具體實(shí)施的整個(gè)過程在步驟2中已經(jīng)完全體現(xiàn),步驟1是步驟2中的一個(gè)子過程。
步驟1,使用宏定義來內(nèi)嵌裁剪判斷,并計(jì)算出剪切點(diǎn)的參數(shù),這樣避免了函數(shù)調(diào)用帶來的局部變量壓棧出棧時(shí)間損失。其中的直線參數(shù)用的是32位int型整數(shù),這個(gè)步驟會(huì)在步驟2中不斷被使用。
/*返回值為0時(shí)線段在可視區(qū)域之外,被舍棄。返回值為1,需要在可視窗口內(nèi)描畫出裁剪后的線段*/#define CLIPTEST(p,q,u1,u2) \{\register int_r; \_clip=1; \if(p)<0) \{ /*直線參數(shù)放大了216倍,這里也要放大一下,左移16位*/_r=(q<<16)/(p); \if(_r>(u2)) clip=0; /*u1>u2,reject the line*/ \
else if(_r>(u1)) /*u1<u2,refresh u1 with r*/\(u1)=_r; /*得到u1=MAX(rk,0),k=0,1,2,3*/ \} \else if((p)>0) \{ \_r=((q)<<16)/(p); \if(_r<(u1))_clip=0; /*u1>u2,舍棄被裁剪線段 */ \else if(_r<(u2)) /*u1<u2,用參數(shù)r更新參數(shù)u2*/\(u2)=_r; /*得到u2=MIN(rk,1),k=0,1,2,3*/ \} \else if((q)<0)_clip=0; \}步驟2,整數(shù)化改造后的算法(C語言)實(shí)現(xiàn)步驟,其中的關(guān)鍵步驟如下所述int clip Line(REC*rec,int*x0,int*y0,int*x1,int*y1){/*u1、u2的值初始化為u1=0L,u2=65536L,u2在浮點(diǎn)算法中為1,這里放大了216倍*/int u1=0L,u2=65536;int dx=*x1-*x0,dy;int_clip;/*用來存放裁剪測試結(jié)果,1表示在可視區(qū)域內(nèi),0表示在可視區(qū)域外*//*計(jì)算左邊界交點(diǎn)參數(shù),更新u1、u2。參數(shù)p1=-dx,q1=x0-x_Wmin*/CLIPTEST(-dx,((*x0)-(rec->x0)),u1,u2);if(_clip){ /*計(jì)算右邊界交點(diǎn)參數(shù),更新u1、u2。參數(shù)p2=dx,q2=x_Wmax-x0*/CLIPTEST(dx, ((rec->x0)+(rec->w)-1-(*x0)),u1,u2);if(_clip){dy=*y1-*y0;/*計(jì)算下邊界交點(diǎn)參數(shù),更新u1、u2。參數(shù)p3=-dy,q3=y(tǒng)0-y_Wmin */CLIPTEST(-dy,((*y0)-(rec->y0)),u1,u2);if(_clip){/*計(jì)算上邊界交點(diǎn)參數(shù),更新u1、u2。參數(shù)p4=dy,q4=y(tǒng)_Wmax-y0*/CLIPTEST(dy,((rec->y0-1+rec->h-*y0)),u1,u2);if(_clip){if(u2<65536){*x1=*x0+(u2*dx>>16);/*直線從內(nèi)向外離開可視區(qū)域,向下取整*/*y1=*y0+(u2*dy>>16);/*這樣解決了上邊界和右邊界出界問題*//*判斷左邊界和下邊界,如果出界把邊界值賦給裁剪端點(diǎn)坐標(biāo)*/if(*x1<rec->x0)*x1=rec->x0;if(*y1<rec->y0)*y1=rec->y0;}if(u1>0L)
{*x0+=((u1*dx)+32768)>>16;/*直線從外向內(nèi)進(jìn)入可視區(qū)域,向上取整*/*y0+=((u1*dy)+32768)>>16;/*這樣解決了上邊界和右邊界出界問題*//*判斷左邊界和下邊界,如果出界把邊界值賦給裁剪端點(diǎn)坐標(biāo)*/if(*x0<rec->x0)*x0=rec->x0;if(*y0<rec->y0)*y0=rec->y0;}}else return 0;}else return 0;}else return 0;}else return 0;return 1;}圖2示出了使用根據(jù)現(xiàn)有技術(shù)的Liang-Barsky算法對(duì)隨機(jī)產(chǎn)生的1000條線段進(jìn)行矩形窗口裁剪的效果圖,而圖3示出了使用根據(jù)本發(fā)明實(shí)施例的整數(shù)化改造的Liang-Barsky算法對(duì)隨機(jī)產(chǎn)生的1000條線段進(jìn)行矩形窗口裁剪的效果圖。通過對(duì)圖2和圖3的對(duì)比可以看出,在使用現(xiàn)有技術(shù)的Liang-Barsky算法時(shí),如果定義邊界取整函數(shù)為#define ROUND(a) ((int)(a+0.5)),即四舍五入,則運(yùn)行結(jié)果如圖2-a所示,如果自然取整,#define ROUND(a),即向下取整,則運(yùn)行結(jié)果如圖2-b所示。可見裁剪的浮點(diǎn)運(yùn)算結(jié)果在轉(zhuǎn)化為整數(shù)時(shí),會(huì)出現(xiàn)取整誤差,造成了裁剪出界。而在采用本發(fā)明時(shí),像素出界的問題得到了解決(多次對(duì)500萬條隨機(jī)直線裁剪后,未發(fā)現(xiàn)像素出界的情況)。
以下的表1示出了對(duì)浮點(diǎn)數(shù)實(shí)現(xiàn)的算法和整數(shù)化改造后的算法進(jìn)行了裁剪效果和裁剪速度測試。測試程序隨機(jī)產(chǎn)生100萬條直線的兩個(gè)端點(diǎn),然后被一個(gè)設(shè)定的矩形窗口裁剪,求出裁剪后的線段端點(diǎn)(不生成裁剪后的可見直線段)。首先,測量了產(chǎn)生隨機(jī)直線端點(diǎn)的時(shí)間,然后測量產(chǎn)生隨機(jī)直線端點(diǎn)并且剪切計(jì)算出窗口內(nèi)可視線段端點(diǎn)的總時(shí)間。用10次測量的平均值作為結(jié)果。表1列出了測試的結(jié)果??梢?,使用浮點(diǎn)裁剪算法對(duì)100萬條隨機(jī)直線裁剪所用的時(shí)間是1849-721=1128ms,而同樣使用整數(shù)參數(shù)并內(nèi)嵌裁剪判斷后的裁剪算法僅使用1221-721=500ms,時(shí)間縮短到了原來的44.3%,可以節(jié)省近一半時(shí)間,加速比為2.256。測試環(huán)境為Pentium 4,x86Family 6 Model 8 Stepping 3,GenuineIntel,Win2000。
表1

以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法,其特征在于,包括以下處理根據(jù)顯示器物理分辨率和預(yù)定原則,確定裁剪參數(shù)的數(shù)據(jù)長度1,其中,整數(shù)部分長度為m,小數(shù)部分長度為n,1=m+n;以及使用預(yù)定算法,將浮點(diǎn)數(shù)變?yōu)檎麛?shù),并通過預(yù)定處理消除裁剪邊界取值誤差。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)定原則為在顯示器的分辨率為h行r列個(gè)像素的情況下,2m>r+h,2n-1>r+h,其中,r為需要繪圖的最大區(qū)域邊界的寬度像素,h為需要繪圖的最大區(qū)域邊界的高度像素。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述預(yù)定算法為x=x1+(U×Δx)×2-n,其中,Δx=x2-x1,U∈
y=y(tǒng)1+(U×Δy)×2-n,其中,Δy=y(tǒng)2-y1,U∈
其中,(x,y)為直線上的坐標(biāo)值,U是直線參數(shù)方程的參數(shù),(x1,y1)、(x2,y2)為直線端點(diǎn)。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述預(yù)定算法為x=x1+U×Δx×2-n,其中,Δx=x2-x1,U∈[-2m·2n,2m·2n]y=y(tǒng)1+U×Δy×2-n,其中,Δy=y(tǒng)2-y1,U∈[-2m·2n,2m·2n]且m+n=31;其中,(x,y)為直線上的坐標(biāo)值,U是直線參數(shù)方程的參數(shù),(x1,y1)、(x2,y2)為直線端點(diǎn)。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)定處理為在屏幕坐標(biāo)系的右邊界和上邊界,當(dāng)直線出矩形區(qū)域時(shí),在所述右邊界和上邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量向下取整,從而消除裁剪邊界取值誤差;當(dāng)所述直線進(jìn)入所述矩形區(qū)域時(shí),在所述右邊界和上邊界上的裁剪坐標(biāo)所對(duì)應(yīng)的坐標(biāo)偏移量向上取整,從而消除裁剪邊界取值誤差;以及判斷所述屏幕坐標(biāo)系的左邊界和上邊界,如果所述直線出界,則將窗口邊界值賦給裁剪端點(diǎn)坐標(biāo),從而消除裁剪邊界取值誤差。
全文摘要
本發(fā)明實(shí)施例提供了一種Liang-Barsky參數(shù)化裁剪算法的整數(shù)化處理方法,包括步驟S102,根據(jù)顯示器物理分辨率和預(yù)定原則,確定裁剪參數(shù)的數(shù)據(jù)長度l,其中,整數(shù)部分長度為m,小數(shù)部分長度為n,l=m+n;步驟S104,使用預(yù)定算法,將浮點(diǎn)數(shù)變?yōu)檎麛?shù),并通過預(yù)定處理消除裁剪邊界取值誤差。
文檔編號(hào)G01C21/36GK101093585SQ20071013805
公開日2007年12月26日 申請(qǐng)日期2007年8月2日 優(yōu)先權(quán)日2007年8月2日
發(fā)明者黨茂昌 申請(qǐng)人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1