專利名稱:基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種三維直線生成方法,特別是基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法。
背景技術(shù):
三維直線作為計(jì)算機(jī)圖形學(xué)中基本的幾何元素,其生成方法是計(jì)算機(jī)圖形學(xué)的重要基礎(chǔ),是計(jì)算機(jī)圖形學(xué)及CAD最基本的方法之一,是數(shù)控機(jī)床和快速成型機(jī)控制系統(tǒng)中直線插補(bǔ)方法的數(shù)學(xué)基礎(chǔ)。三維直線生成方法的應(yīng)用領(lǐng)域包括物體的真實(shí)感顯示,光線追蹤,醫(yī)學(xué)圖像的三維重建,體元素繪制,計(jì)算機(jī)視覺(jué)以及立體幾何造型。直線生成方法的好壞不僅直接影響圖形生成與顯示的效率,而且與數(shù)控加工和快速原型制造的速度和精度有直接的關(guān)系,因此,研究高效、高精度的直線生成方法,對(duì)于開(kāi)發(fā)高性能的計(jì)算機(jī)數(shù)控系統(tǒng)具有十分重要的意義。
體素為菱形十二面體構(gòu)成的三維網(wǎng)格稱為面心立方(face-centeredcubic,簡(jiǎn)稱FCC)網(wǎng)格,面心立方網(wǎng)格是二維六角網(wǎng)格在三維的推廣。與六角網(wǎng)格類似,面心立方網(wǎng)格上的體素分布比方形網(wǎng)格更加緊湊和合理,在三維空間具有更好的采樣性質(zhì)。
面心立方網(wǎng)格是二維六角網(wǎng)格在三維的一種推廣,它與方形網(wǎng)格相比具有如下優(yōu)點(diǎn) 1)在面心立方網(wǎng)格上,每個(gè)體素只有點(diǎn)相鄰和面相鄰兩種相鄰關(guān)系,而方形網(wǎng)格除了點(diǎn)相鄰和面相鄰?fù)猓€有邊相鄰,因此,在面心立方網(wǎng)格上,為許多圖像處理算法提供了更加簡(jiǎn)便的實(shí)現(xiàn)途徑,并提高了算法的效率。
2)面心立方網(wǎng)格的誤差小于方形網(wǎng)格,從而具有更好的近似效果。
3)面心立方網(wǎng)格的體素點(diǎn)分布更加合理和緊湊。面心立方網(wǎng)格在3D空間比方形網(wǎng)格具有更好的采樣性質(zhì)。也就是說(shuō),對(duì)于三維信號(hào),需要較少的采樣點(diǎn)就可以完全重構(gòu)信號(hào)。從而可以節(jié)約內(nèi)存空間,提高體繪制速度。
4)面心立方網(wǎng)格的體素更接近球面,從而面心立方網(wǎng)格上曲線或曲面更平滑。
5)面心立方網(wǎng)格更經(jīng)濟(jì)。即在體積相同的條件下,面心立方網(wǎng)格的表面積要小于方形網(wǎng)格。
6)在不影響體數(shù)據(jù)質(zhì)量的前提下,面心立方網(wǎng)格將采樣數(shù)據(jù)密度變?yōu)榱⒎骄W(wǎng)格的即面心立方網(wǎng)格能比立方網(wǎng)格減少23.02%的體數(shù)據(jù)量。
面心立方網(wǎng)格因其良好的采樣性質(zhì)將在三維計(jì)算機(jī)圖形學(xué)及CAD中具有較好的應(yīng)用前景。
目前,國(guó)內(nèi)外文獻(xiàn)對(duì)三維直線生成方法大多集中在方形網(wǎng)格,主要將二維直線生成中有代表性的方法等推廣到三維方形網(wǎng)格。2001年屠曉明等人發(fā)表于計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào)的論文《直線Bresenham生成算法的三維推廣》,在二維直線Bresenham生成方法的基礎(chǔ)上,利用三維直線在坐標(biāo)平面內(nèi)的投影,將二維直線Bresenham方法推廣到三維方形網(wǎng)格。2007年在鄧衛(wèi)燕等人在浙江大學(xué)學(xué)報(bào)(工學(xué)版)發(fā)表的論文《基于直線特性和投影原理的三維直線生成算法》,通過(guò)對(duì)三維方形網(wǎng)格直線特性的分析,充分利用直線的方向性和對(duì)稱性,結(jié)合投影原理,提出了一種基于直線特性和投影原理的三維方形網(wǎng)格直線生成方法。2004年王志喜等人在論文《中點(diǎn)畫(huà)線算法的三維推廣》(發(fā)表于計(jì)算機(jī)仿真)中,利用直線在兩個(gè)坐標(biāo)平面內(nèi)的投影,將二維中點(diǎn)畫(huà)線方法推廣到三維方形網(wǎng)格。
上述這些直線生成方法都是針對(duì)三維方形網(wǎng)格,而對(duì)于具有更好采樣性質(zhì)的面心立方網(wǎng)格,缺乏相應(yīng)的直線生成方法。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,以提高圖形系統(tǒng)中直線的生成效率。
為了解決上述技術(shù)問(wèn)題,本發(fā)明在三維方形網(wǎng)格的Bresenham方法的基礎(chǔ)上,利用附屬平行六面體空間的平行六面體與面心立方網(wǎng)格空間的體素之間的一一對(duì)應(yīng)關(guān)系生成面心立方網(wǎng)格直線。
本發(fā)明提供一種在三維面心立方網(wǎng)格中生成直線的方法,其步驟為 首先,建立離散面心立方網(wǎng)格空間的附屬平行六面體空間; 然后,分析面心立方網(wǎng)格空間體素及其對(duì)應(yīng)的附屬平行六面體之間的鄰接關(guān)系; 再次,以直線起點(diǎn)為當(dāng)前平行六面體,利用三維方形網(wǎng)格直線生成Bresenham方法,在平行六面體空間決定下一步所選取的平行六面體; 接著,根據(jù)當(dāng)前平行六面體和選取的下一個(gè)平行六面體的相鄰關(guān)系和對(duì)應(yīng)體素的相鄰關(guān)系,決定是否需要增加體素并選取合適的體素; 最后,若還沒(méi)到達(dá)終點(diǎn),則繼續(xù)選取下一個(gè)平行六面體和相應(yīng)體素以及是否需要增加體素,直到到達(dá)終點(diǎn)。
本方法應(yīng)用簡(jiǎn)單的判斷公式只涉及到整數(shù)運(yùn)算;除了在一步生成三個(gè)體素的時(shí)候需要2次整數(shù)乘法運(yùn)算外,其余的只用到整數(shù)加法、減法、移位、比較運(yùn)算,因而沒(méi)有累計(jì)誤差,本方法的時(shí)間復(fù)雜度為O(N),這里N為體素個(gè)數(shù)。
面心立方網(wǎng)格生成的直線與方形網(wǎng)格生成的直線比較,在相同質(zhì)量的條件下,體素?cái)?shù)量更少,生成的直線更平滑。該方法為基于面心立方網(wǎng)格的真實(shí)感顯示,體繪制,光線追蹤,消除隱藏線面及三維重建等技術(shù)提供了基礎(chǔ)。
四
圖1面心立方坐標(biāo)系統(tǒng)的坐標(biāo)軸圖 圖2菱形十二面體和其相應(yīng)的平行六面體圖 圖3面心立方網(wǎng)格直線生成流程圖 圖4三維平行六面體空間的Bresenham方法示意圖 五具體實(shí)施例方式 1、建立離散面心立方網(wǎng)格空間的附屬平行六面體空間 由菱形十二面體為體素構(gòu)成的三維網(wǎng)格與傳統(tǒng)的方形網(wǎng)格不同,菱形十二面體構(gòu)成的離散空間N中只存在點(diǎn)相鄰和面相鄰,不存在邊相鄰的情形。在離散空間N中,如圖1所示,我們按如下方法構(gòu)造面心立方坐標(biāo)系統(tǒng)選取一個(gè)體素中心定義為坐標(biāo)原點(diǎn)O,坐標(biāo)原點(diǎn)O的所有坐標(biāo)值為0,即O=(0,0,0)。然后確定三個(gè)坐標(biāo)軸,考慮坐標(biāo)原點(diǎn)體素(菱形十二面體)的一個(gè)有三個(gè)相鄰面的頂點(diǎn)(即度為3的頂點(diǎn)),過(guò)原點(diǎn)且分別垂直于這三個(gè)相鄰面的直線為坐標(biāo)軸Ox,Oy和Oz。
我們可以為離散面心立方空間N定義相應(yīng)的附屬平行六面體空間N1。N中的每個(gè)體素h(x,y,z)都對(duì)應(yīng)一個(gè)N1的平行六面體p(x,y,z)。p(x,y,z)稱為h(x,y,z)的附屬平行六面體,它們具有相同的中心,并且平行六面體p(x,y,z)的邊為空間N的基向量u,v和w,如見(jiàn)圖2所示。按這種方法定義的N1和N具有相同的中心和基向量。2、面心立方網(wǎng)格空間體素及其對(duì)應(yīng)的附屬平行六面體之間的鄰接關(guān)系 下面分析構(gòu)成空間N和N1的體素之間的關(guān)系。記h(x,y,z)為N的體素且p(x,y,z)為與之對(duì)應(yīng)的N1中的平行六面體??梢缘贸鋈缦陆Y(jié)論平行六面體p(x,y,z)有26個(gè)相鄰平行六面體,其中6個(gè)與p(x,y,z)面相鄰,12個(gè)與p(x,y,z)邊相鄰,其余8個(gè)與p(x,y,z)點(diǎn)相鄰。根據(jù)對(duì)稱性,相鄰的兩個(gè)平行六面體有13種不同的坐標(biāo)對(duì),分別對(duì)應(yīng)于表1的13行,由表中可以看出,面相鄰的體素坐標(biāo)對(duì)有6種(由于對(duì)稱性,對(duì)應(yīng)于12個(gè)面相鄰體素),點(diǎn)相鄰體素坐標(biāo)對(duì)有3中(由于對(duì)稱性,對(duì)應(yīng)于6個(gè)點(diǎn)相鄰體素),不相鄰的體素坐標(biāo)對(duì)有4種,其中對(duì)應(yīng)于邊相鄰的平行六面體3種(由于對(duì)稱性,對(duì)應(yīng)于6個(gè)邊相鄰平行六面體),點(diǎn)相鄰的平行六面體1種(由于對(duì)稱性,對(duì)應(yīng)于2個(gè)點(diǎn)相鄰平行六面體)。
表1面心立方網(wǎng)格體素及其對(duì)應(yīng)的平行六面體空間平行六面體之間的鄰接關(guān)系
對(duì)于體素不相鄰的情形,需要增加體素來(lái)連接這兩個(gè)不相鄰的體素。若相應(yīng)的兩個(gè)平行六面體為邊相鄰的情形,需要增加1個(gè)體素來(lái)連接體素。若相應(yīng)的兩個(gè)平行六面體為點(diǎn)相鄰的情形,需要增加2個(gè)體素來(lái)連接體素,此時(shí)坐標(biāo)對(duì)為(x,y,z)和(x+1,y+1,z+1)。
注意到有三種選擇h(x+1,y,z),h(x,y+1,z)和h(x,y,z+1),分別對(duì)應(yīng)三個(gè)平行六面體p(x+1,y,z),p(x,y+1,z)和p(x,y,z+1)。要在這三個(gè)平行六面體中選取一個(gè)使其與直線的距離最小。我們根據(jù)判斷變量eyx和ezx的大小來(lái)選擇,eyx和ezx的初始化和遞增公式詳見(jiàn)“面心立方網(wǎng)格上的直線生成方法”的步驟B。首先在xy平面由eyx<Δy是否成立決定y是否先變化,然后在xz平面由ezx<Δz是否成立決定z是否先變化。根據(jù)eyx和ezx的大小有以下四種情形 1)若eyx<Δy且ezx<Δz,則選取平行六面體p(x+1,y,z)(體素h(x+1,y,z))。
2)若eyx<Δy且ezx>=Δz,則選取平行六面體p(x,y,z+1)(體素h(x,y,z+1))。
3)若eyx>=Δy且ezx<Δz,則選取平行六面體p(x,y+1,z)(體素h(x,y+1,z))。
4)若eyx>=Δy且ezx>=Δz,則選取平行六面體p(x,y+1,z)或p(x,y,z+1)(體素h(x,y+1,z)或h(x,y,z+1))。
首先考慮情形1),eyx<Δy且ezx<Δz,則選取的體素h(x+1,y,z)與h(x+1,y+1,z+1)還不相鄰,連接它們的體素可能為h(x+1,y,z+1)或h(x+1,y+1,z)。通過(guò)分析,我們發(fā)現(xiàn)變量ezy=ezxΔy-eyxΔz的符號(hào)決定了該選取哪個(gè)連接體素若ezy為正,則應(yīng)選取h(x+1,y,z+1),即體素h(x,y,z)的緊接著的三個(gè)體素為h(x+1,y,z),h(x+1,y,z+1),h(x+1,y+1,z+1);否則體素h(x,y,z)的緊接著的三個(gè)體素為h(x+1,y,z),h(x+1,y+1,z),h(x+1,y+1,z+1)。
現(xiàn)在考慮情形2),eyx<Δy且ezx>=Δz,則選取的體素h(x,y,z+1)與h(x+1,y+1,z+1)還不相鄰,連接它們的體素可能為h(x+1,y,z+1)或h(x,y+1,z+1),但由于eyx<Δy,只能選取h(x+1,y,z+1)。于是體素h(x,y,z)的緊接著的三個(gè)體素為h(x,y,z+1),h(x+1,y,z+1),h(x+1,y+1,z+1)。
現(xiàn)在考慮情形3),eyx>=Δy且ezx<Δz,則選取的體素h(x,y+1,z)與h(x+1,y+1,z+1)還不相鄰,連接它們的體素可能為h(x+1,y+1,z)或h(x,y+1,z+1),但由于ezx<Δz,只能選取h(x+1,y+1,z)。于是體素h(x,y,z)的緊接著的三個(gè)體素為h(x,y+1,z),h(x+1,y+1,z),h(x+1,y+1,z+1)。
最后考慮情形4),eyx>=Δy且ezx>=Δz,則可能選取的體素為h(x,y+1,z)或h(x,y,z+1),與情形1)的分析類似,我們可以在yz平面由ezy=ezxΔy-eyxΔz的符號(hào)決定應(yīng)該選取哪個(gè)體素。若ezy<0,則應(yīng)該選取h(x,y+1,z)和h(x,y+1,z+1),于是體素h(x,y,z)的緊接著的三個(gè)體素為h(x,y+1,z),h(x,y+1,z+1),h(x+1,y+1,z+1)。否則若eyx>=0體素h(x,y,z)的緊接著的三個(gè)體素為h(x,y,z+1),h(x,y+1,z+1),h(x+1,y+1,z+1)。
3、面心立方網(wǎng)格上的直線生成方法 假設(shè)直線的起點(diǎn)和終點(diǎn)的面心立方坐標(biāo)分別為(x1,y1,z1)和(x2,y2,z2),則(x1,y1,z1)和(x2,y2,z2)同時(shí)也是相應(yīng)點(diǎn)的平行六面體坐標(biāo)。令Δx=|x2-x1|,Δy=|y2-y1|和Δz=|z2-z1|,xsign=SIGN(x2-x1),ysign=SIGN(y2-y1)和ysign=SIGN(z2-z1)。為簡(jiǎn)便起見(jiàn),我們這里假設(shè)Δx>Δy且Δx>Δz(即x軸為主坐標(biāo)軸),則x值每一步都遞增(或遞減)。定義判斷變量eyx和ezx的初始值如下eyx=2Δy-Δx,ezx=2Δz-Δx。如圖3所示,面心立方網(wǎng)格上,兩點(diǎn)(x1,y1,z1)和(x2,y2,z2)之間的直線生成方法包括如下步驟 步驟A選取起點(diǎn)(x1,y1,z1)為當(dāng)前體素(也是當(dāng)前平行六面體)。
步驟B與三維方形網(wǎng)格直線生成Bresenham方法類似,在平行六面體空間決定下一步所選取的平行六面體。如圖4所示,下面將說(shuō)明其詳細(xì)過(guò)程。由于方法在平行六面體空間x值每一步都遞增(或遞減),因此只要決定下一平行六面體的y和z坐標(biāo)是否變化即可。假設(shè)當(dāng)前平行六面體為E=p(x,y,z),則下一平行六面體的取法只有四種可能的選擇,即A=p(x+xsign,y,z),B=p(x+xsign,y+ysign,z),C=p(x+xsign,y,z+zsign)和D=p(x+xsign,y+ysign,z+zsign)。要在這四個(gè)平行六面體中選取一個(gè)使其與直線的距離最小,我們根據(jù)判斷變量eyx和ezx的符號(hào)來(lái)選擇。我們分兩步進(jìn)行,首先在xy平面由eyx的符號(hào)決定y是否變化,然后在xz平面由ezx的符號(hào)決定z是否變化。根據(jù)eyx和ezx的符號(hào)有以下四種情形 若eyx<0且ezx<0,則下一平行六面體為p(x+xsign,y,z),同時(shí)變量eyx遞增為eyx=eyx+2Δy,ezx遞增為ezx=ezx+2Δz。
若eyx<0且ezx>=0,則下一平行六面體為p(x+xsign,y,z+zsign),同時(shí)變量eyx遞增為eyx=eyx+2Δy,ezx遞增為ezx=ezx+2(Δz-Δx)。
若eyx>=0且ezx<0,則下一平行六面體為p(x+xsign,y+ysign,z),同時(shí)變量eyx遞增為eyx=eyx+2(Δy-Δx),ezx遞增為ezx=ezx+2Δz。
若eyx>=0且ezx>=0,則下一平行六面體為p(x+xsign,y+ysign,z+zsign),同時(shí)變量eyx遞增為eyx=eyx+2(Δy-Δx),ezx遞增為ezx=ezx+2(Δz-Δx)。
步驟C根據(jù)當(dāng)前體素和下一個(gè)體素的相鄰關(guān)系,決定是否需要增加體素,若需要增加體素,根據(jù)判斷變量eyx,ezx和ezy=ezxΔy-eyxΔz的值選取合適的體素。
步驟D若還沒(méi)到達(dá)終點(diǎn)(x2,y2,z2),則轉(zhuǎn)向步驟B,否則方法結(jié)束。
運(yùn)算量主要集中在步驟B和步驟C,這兩步需要重復(fù)N=Max(Δx,Δy,Δz)次,在方法步驟B,需要2次比較和2次加法操作,在方法步驟C,若不需要增加體素,即一次僅生成一個(gè)體素則沒(méi)有任何操作;若需要增加1個(gè)體素,即一步生成2個(gè)體素,則步驟C需要1次比較操作;若需要增加2個(gè)體素,即一步生成3個(gè)體素,則步驟C最多需要2次比較、2次乘法和1次加法運(yùn)算共5次操作。因此,本方法的時(shí)間復(fù)雜度為O(N)。
我們用VC6.0在Intel 2.53GHz微機(jī)上編程實(shí)現(xiàn)了本發(fā)明的直線生成方法。為了測(cè)試其生成速度,我們?cè)诿嫘牧⒎骄W(wǎng)格中嵌入一個(gè)球面,隨機(jī)取球面上的點(diǎn),連接其和球心得到一條直線,則該直線即為球面的半徑,通過(guò)生成這些直線得到方法的執(zhí)行時(shí)間。我們通過(guò)改變球面半徑大小(直線長(zhǎng)度)和直線數(shù)目得到不同組數(shù)據(jù)。表2列出了對(duì)于不同長(zhǎng)度和數(shù)目的直線,本文方法的執(zhí)行時(shí)間比較,表中所列的時(shí)間是執(zhí)行完整的方法所需的時(shí)間,即包括主循環(huán)體外對(duì)判斷變量等的初值和增量的計(jì)算。從表2可以看出,隨著直線長(zhǎng)度的加大和直線數(shù)目的增加,方法執(zhí)行時(shí)間逐步增加。
表2生成不同長(zhǎng)度直線所需要的時(shí)間(單位秒)
權(quán)利要求
1.一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,該方法包括,
以菱形十二面體為體素的面心立方網(wǎng)格三維空間中,在三維方形網(wǎng)格的Bresenham方法的基礎(chǔ)上,利用附屬平行六面體空間的平行六面體與面心立方網(wǎng)格空間的體素之間的一一對(duì)應(yīng)關(guān)系生成面心立方網(wǎng)格直線,其步驟為
a.建立離散面心立方網(wǎng)格空間的附屬平行六面體空間;
b.分析面心立方網(wǎng)格空間體素及其對(duì)應(yīng)的附屬平行六面體之間的鄰接關(guān)系;
c.選取平行六面體起點(diǎn)(x1,y1,z1)為當(dāng)前體素;
d.三維方形網(wǎng)格直線生成方法采用Bresenham方法,在平行六面體空間決定下一步所選取的平行六面體;
e.根據(jù)當(dāng)前平行六面體和選取的下一個(gè)平行六面體的相鄰關(guān)系和對(duì)應(yīng)體素的相鄰關(guān)系,決定是否需要增加體素并選取合適的體素;
f.若還沒(méi)到達(dá)終點(diǎn)(x2,y2,z2),則返回d,否則方法結(jié)束。
2.根據(jù)權(quán)利要求1一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,
其特征是離散面心立方空間的附屬平行六面體空間
離散面心立方空間N定義相應(yīng)的附屬平行六面體空間N1,N中的每個(gè)體素h(x,y,z)都對(duì)應(yīng)一個(gè)N1的平行六面體p(x,y,z)具有相同的中心,并且平行六面體p(x,y,z)的邊為空間N的基向量u,v和w,按這種方法定義的N1和N具有相同的中心和基向量。
3.根據(jù)權(quán)利要1所述的一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,其特征在于Bresenham方法只采用整數(shù)運(yùn)算。
4.根據(jù)權(quán)利要1所述的一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,其特征在于面心立方網(wǎng)格體素及其對(duì)應(yīng)平行六面體之間的鄰接關(guān)系。
全文摘要
本發(fā)明提供一種基于附屬平行六面體空間的面心立方網(wǎng)格直線生成方法,以提高圖形系統(tǒng)中直線的生成效率。本方法在三維方形網(wǎng)格Bresenham方法的基礎(chǔ)上,利用附屬平行六面體空間的平行六面體與面心立方網(wǎng)格空間的體素之間的一一對(duì)應(yīng)關(guān)系生成直線。本方法應(yīng)用簡(jiǎn)單的判斷公式只涉及到整數(shù)運(yùn)算;除了在一步生成三個(gè)體素的時(shí)候需要2次整數(shù)乘法運(yùn)算外,其余的只用到整數(shù)加法、減法、移位、比較運(yùn)算,因而沒(méi)有累計(jì)誤差,本方法的時(shí)間復(fù)雜度為O(N)。面心立方網(wǎng)格生成的直線與方形網(wǎng)格生成的直線比較,在相同質(zhì)量的條件下,體素?cái)?shù)量更少,生成的直線更平滑。該方法為基于面心立方網(wǎng)格的真實(shí)感顯示,體繪制,光線追蹤,消除隱藏線面及三維重建等技術(shù)提供。
文檔編號(hào)G06T17/00GK101763653SQ201010010050
公開(kāi)日2010年6月30日 申請(qǐng)日期2010年1月6日 優(yōu)先權(quán)日2010年1月6日
發(fā)明者何麗君, 王德高, 云健, 劉勇奎 申請(qǐng)人:大連民族學(xué)院