亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于L-Rep模型的三維實體布爾運算方法

文檔序號:6481559閱讀:329來源:國知局
專利名稱:基于L-Rep模型的三維實體布爾運算方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機圖形學、計算幾何、CAD、 GIS領(lǐng)域,具體涉及B-R印模型及其在計 算機內(nèi)存中的組織方式、L-R印模型、B-R印模型與L-R印模型的相互轉(zhuǎn)化算法、L-R印 模型的實體布爾運算奪內(nèi)容。
背景技術(shù)
長期以來,空間實體的表達以集合論、拓撲數(shù)學為理論基礎(chǔ),其中兩個空間實體通過 布爾代數(shù)算子(如交、并、差)構(gòu)建出一個新的空間實體被稱為空間實體的布爾運算。在 實際應用中,Rhind將三維空間實體布爾運算列為三維GIS可能包括的IO項功能,并分 析了切割斷面、開挖隧道(tunneling)、建筑(building)等現(xiàn)實應用,指出這類應用均 可以歸結(jié)為三維空間實體間的布爾運算。
田宜平等采用B-R印模型進行三維地質(zhì)建模,將三維交互式分析操作歸結(jié)為三維矢量 剪切的組合,以線條、填充多邊形、曲面和注釋四種圖元的剪切為基礎(chǔ),建立了盆地三維 數(shù)字構(gòu)造-地層體的矢量剪切模型。Muuss和Butler在CAD幾何造型理論研究中將三維實 體間布爾運算歸結(jié)為求交、分類和歸并三個步驟,給出了三維實體間布爾運算的理論與算 法框架。
這類方法需要進行大量的幾何計算與拓撲重構(gòu)操作,因此在計算速度與算法的健^:性 上一直存在很大的問題。這也是基于矢量模型的三維空間分析方法所面臨的共性問題。

發(fā)明內(nèi)容
本發(fā)明的目的在于解決目前基于B-R印模型的實體布爾運算方法存在著算法復雜、計 算量大與穩(wěn)定性難以保障等問題,實現(xiàn)一種能夠滿足實際應用精度需求的三維快速實體布 爾運算方法。本發(fā)明的核心是將基于B-R印模型表達的三維實體對象轉(zhuǎn)化一種以采樣線段 為基本構(gòu)成元素的L-R印模型,將三維的實體間布爾運算轉(zhuǎn)化為一維的采樣線段間的布爾 運算,并將實體布爾運算結(jié)果L-R印模型轉(zhuǎn)化為B-R印模型。
本發(fā)明的技術(shù)方案是基于L-R印模型的三維實體布爾運算方法,該方法包括以下四 個部分
步驟1讀入兩個實體模型數(shù)據(jù)并構(gòu)建基于B-R印模型的內(nèi)部數(shù)據(jù)組織; 步驟2將B-R印模型轉(zhuǎn)化為以X、 Y、 Z三個軸向的采樣線(Sample Line, SL)為基 本要素的L-R印模型;步驟3實現(xiàn)兩個L-R印模型中采樣線間的一維布爾運算;
步驟4將基于L-R印模型表達的結(jié)果實體對象轉(zhuǎn)化為B-R印模型。'
所述步驟1是指將存儲于外部文件中的實體模型描述數(shù)據(jù)讀入內(nèi)存中,重建其表面幾
何與拓撲鄰接關(guān)系,并以基于B-R印模型的內(nèi)部數(shù)據(jù)組織方式加以組織,作為算法后續(xù)步
驟實施的基礎(chǔ)。
所述步驟2中L-R印模型是以X、 Y、 Z三個軸向上按一定間距排列的采樣線組成,每 條采樣線中記錄其起點坐標(x、 y、 z)及其與三維實體對象外部邊界、內(nèi)部邊界及內(nèi)部 斷裂面的交點相對于起點坐標的深度信息。
所述步驟2是在步驟1的基礎(chǔ)上,根據(jù)應用精度需要及實體模型的軸對稱包圍盒等基 本信息,計算L-R印模型的基本參數(shù);通過轉(zhuǎn)化算法,逐個處理B-R印模型中每個外部邊 界多邊形、內(nèi)部邊界多邊形和內(nèi)部斷裂面多邊形,構(gòu)建L-R印模型中X、 Y、 Z三個軸向 的采樣線,將基于B-R印模型表達的三維實體對象轉(zhuǎn)化為基于L-R印模型表達。
所述步驟3是在步驟2的基礎(chǔ)上,對于兩個L-R印模型中處于同一軸線,相同投影坐 標的采樣線進行一維布爾運算。以兩個L-R印模型中的所有采樣線的一維布爾運算結(jié)果, 作為兩個L-R印模型的布爾運算結(jié)果。
所述步驟4是指將步驟3中所獲得的L-R印模型間布爾運算結(jié)果,提取三維實體對象 的外部邊界、內(nèi)部邊界及內(nèi)部斷裂信息,重建出基于B-R印模型表達的三維實體對象,并 將結(jié)果以原文件格式保存在外部文件中。
本發(fā)明旨在解決現(xiàn)階段基于B-R印模型三維實體布爾運算中存在的算法復雜、計算量 大與穩(wěn)定性難以保障等問題,提出了面向地理空間實體對象的L-R印模型。該模型可以很 好地表達實體的外部邊界與內(nèi)部裂縫、接觸面等復雜幾何信息,同時可以完整地表達實體 內(nèi)部的屬性信息,熊夠滿足地理空間對象的建模需求,并給出了從B-R印模型構(gòu)建L-R印 模型的快速構(gòu)建算法。在此基礎(chǔ)上,提出了基于L-R印模型的布爾運算方法,該方法將三 維實體的布爾運算轉(zhuǎn)化為L-R印模型中線段與線段的一維布爾運算,極大地降低了算法的 復雜性、提高了算法效率與數(shù)值穩(wěn)定性,實現(xiàn)了針對三維實體的快速布爾運算。最后給出 了從L-R印模型的表面重建算法,將L-R印模型重新轉(zhuǎn)化為B-R印模型,以此滿足其fll應 用的需求。


圖1是本發(fā)明實施例1的流程2a是本發(fā)明實施例1L-Rep模型中的第一種采樣點
圖2b是本發(fā)明實施例1L-R印模型中的第二種采樣點
圖2c是本發(fā)明實施例1L-R印模型中的第三種采樣點
圖3a是本發(fā)明實施例1采樣線與三角形棱邊一種相交情況
圖3b是本發(fā)明實施例1采樣線與三角形棱邊另一種相交情況
圖4a是本發(fā)明實施例1采樣線與三角形頂點相交情況
圖4b是本發(fā)明實施例1采樣線與三角形頂點相交情況
圖5是本發(fā)明實施例1選擇4條采樣線
圖6是本發(fā)明實施例1虛擬體素的創(chuàng)建示意圖
圖7a是本發(fā)明實施例1采樣線之間的交布爾運算示意圖
圖7b是本發(fā)明實施例1釆樣線之間的并布爾運算示意圖
圖7c是本發(fā)明實施例1采樣線之間的差布爾運算示意圖
圖8a是本發(fā)明實施例1帶內(nèi)部接觸點的采樣線之間的交布爾運算示意圖
圖8b是本發(fā)明實施例1帶內(nèi)部接觸點的釆樣線之間的并布爾運算示意圖
圖8c是本發(fā)明實施例1帶內(nèi)部接觸點的采樣線之間的差布爾運算示意圖
圖9a是本發(fā)明實施例1基于L-Rep模型的實體布爾運算示意圖之一
圖9b是本發(fā)明實施例1基于L-R印模型的實體布爾運算示意圖之二
圖9c是本發(fā)明實施例1基于L-R印模型的實體布爾運算示意圖之三
圖10是本發(fā)明實施例1球體與立方體的B-R印模型
圖11是本發(fā)明實施例1立方體減去球體的差對象的B-R印模型
具體實施例方式
下面結(jié)合附圖和實施例做進一步詳細說明。 實施例l
如圖1所示,基于L-R印模型的三維實體布爾運算方法,該方法包括以下四個部分: 步驟1讀入兩個實體模型數(shù)據(jù)并構(gòu)建基于B-R印模型的內(nèi)部數(shù)據(jù)組織; 步驟2將兩個B-R印模型轉(zhuǎn)化為以X、 Y、 Z三個軸向的采樣線(Sample Line, SL) 為基本要素的L-R印模型;
步驟3實現(xiàn)兩個L-R印模型中釆樣線間的一維布爾運算;步驟4將基于L-R印模型表達的結(jié)果實體對象轉(zhuǎn)化為B-R印模型。
本實例以Windows XP SP3為操作系統(tǒng)環(huán)境,Visual Studio 2008 SP1為開發(fā)環(huán)境,
C+十為開發(fā)語言,以斯坦福大學提出的PLY文件格式為三維實體對象B-R印模型外部文件格式。
具體實施步驟如下
步驟1讀入兩個實體模型數(shù)據(jù)并構(gòu)建基于B-R印模型的內(nèi)部數(shù)據(jù)組織。 基于B-R印模型的三維實體在計算機內(nèi)存中的數(shù)據(jù)組織方式是指利用計算機編程語言 所實現(xiàn)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),組織與管理基于B-R印模型的三維空間實體對象,描述實體^t象
的幾何及拓撲鄰接信息。
在Windows XP SP3平臺下,Visual Studio 2008 SP1建立C+十語言的Win32動態(tài)鏈 接庫,命名為LR印Boolean。本實施例LR印Boolean中采用的數(shù)據(jù)結(jié)構(gòu)為半邊結(jié)構(gòu),包括 CHalfEdgeVertex、 CHalfEdgeEdge、 CHalfEdgeCell、 CHalfEdgeSolid四部分,詳細定義 如下
Vertex的數(shù)據(jù)結(jié)構(gòu)包括點的ID號、點的坐標和法向量坐標,以及從這個頂點出發(fā) 的任意一條半邊。 class CHalfEdgeVertex
public:
int id;〃存放點的ID號
float x;〃點的x坐標
float y;〃點的y坐標
float z;〃點的z坐標
float nx;〃 (M,W,"力是點的法向量坐標
float ny;
float nz;
CHalfEdgeEdge* edge; 〃從頂點出發(fā)的一條半邊
Edge的數(shù)據(jù)結(jié)構(gòu)半邊數(shù)據(jù)結(jié)構(gòu)以"邊"為核心。 一條邊表示成拓撲意義上方向相反 的兩條"半邊"。由該半邊的終點、鄰接面、下一條半邊和該半邊的對邊組成。通過這樣
7的設(shè)計,可以很容易地找到該半邊所屬的Cell,對邊的Cell以及下一半邊的Cell。 class CHalfEdgeEdge
public:
CHalfEdgeVertex *endPoint; 〃該條半邊的終點
CHalfEdgeEdge *pair; 〃該條半邊的對邊,如果是邊界邊,則對邊為NULL CHalfEdgeCell *cell; 〃該邊的鄰接面 CHalfEdgeEdge *next; //該邊的下一條邊
Cell的數(shù)據(jù)結(jié)構(gòu)以半邊為基礎(chǔ)構(gòu)成的環(huán)(Lo叩)。由Cell的ID號,任意一條鄰接 邊和它的法向量構(gòu)成。 class CHalfEdgeCell
public:
int id; CHalfEdgeEdge
float nx; float ny; float nz;
Solid的數(shù)據(jù)結(jié)構(gòu)由兩部分組成,public部分包括Vertex坐標排序列表和ID排序 列表,采用0++語言標準模板庫STL中的M鄰數(shù)據(jù)結(jié)構(gòu)進行管理;Edge的列表和Cell的 列表,采用STL中的Vector數(shù)據(jù)結(jié)構(gòu)進行管理。private部分包括Vextex到其發(fā)射半邊 的坐標排序列表、Vextex到其發(fā)射半邊的ID號排序列表,由STL中的Map管理。
其中,Vertex列表采用Map通過自定義嚴格弱排序來實現(xiàn)二叉平衡樹,目的是為了 在生成線狀緩沖區(qū)細分圓面的時候,列表中點的坐標值從小到大的順序排序,ID號和坐 標值排序相對應,這樣在構(gòu)建三角形的時候就可以按序取出所需的點。
Private部分的兩個map管理, 一個是為了添加三角形的各點坐標, 一個是為了添加 三角形各點的ID號。class CHalfEdgeSolid public:
m鄰〈ChalfEdgeVertex, HalfEdgeVertex氺,vertexLessEqual〉
vertexMapByCoordList; 〃頂點的坐標祠夂序列表 map〈int, CHalfEdgeVertex水〉vertexM鄰ByldList;
〃頂點的ID排序列表 vector〈CHalfEdgeEdge *> edgeList; //邊列表 vector〈CHalfEdgeCe11 *〉 cellList; //面列表 private:
map〈CHalfEdgeVertex氺,vector〈CHalfEdgeEdge承〉〉vertexMap2Edges—Coord; map〈CHalfEdgeVertex水,vector〈CHalfEdgeEdge水〉〉vertexMap2Edges—Index;
步驟2將B-R印模型轉(zhuǎn)化為以X、 Y、 Z三個軸向的采樣線為基本要素的L-R印模型。 L-R印模型及其在計算機內(nèi)存中的數(shù)據(jù)組織方式是指在Dexel模型基礎(chǔ)上提出的一種
能夠描述三維實體對象外部邊界、內(nèi)部邊界及內(nèi)部斷裂的三維空間數(shù)據(jù)模型及其在內(nèi)存中
的數(shù)據(jù)組織方式。
L-R印模型建立的基本方法是在X0Y、 X0Z、 Y0Z三個平面上,分別沿Z軸方向、Y軸 方向和X軸方向,按一定采樣間距向三維空間實體對象發(fā)射采樣線段(SampleLine, SL), 每條采樣線段記錄其與三維空間實體相交的交點,三個軸向上所有的采樣線段的集合構(gòu)成 的L-R印模型。
采樣線是組成L-R印模型的核心,而釆樣線中記錄的是其對三維空間實體的采樣點信 息。為了完整表達空間對象的集合及屬性信息,采樣線中記錄三種類型的采樣點,分別是 邊界點(Boundary Point)、接觸點(Touch Point)和內(nèi)部點(Interior Point),如附 圖2a-2c所示。
附圖2a中為邊界點,用于記錄射線與實體對象外表面(Shell)的交點。在一個射線 中邊界點的個數(shù)必然是成對出現(xiàn)的;附圖2b中為接觸點,用于記錄射線與實體內(nèi)部斷裂 面、接觸面的交點;附圖2c中為內(nèi)部點,用于記錄實體內(nèi)部的屬性信息,可以根據(jù)需要錄該點的空間坐標、采樣點的類型及采樣點的屬性信息。由于同屬于一條采樣線的采樣點 的三個坐標值中有兩個是相同的,因此僅記錄該采樣點相對于采樣線上第一個采樣點的相 對深度信息。
對采樣點創(chuàng)建〔++類CSamplePoint、 CSampleLine、 CLineR印,采樣點0++類定義如
下所示-
<formula>formula see original document page 10</formula>其中id為該采樣點的唯一標示,可以根據(jù)該標示在屬性表中查詢該點的屬性信息; pointType為該采樣點的類型;d印th為該采樣點相對于采樣線起點的相對深度,用于記 錄該點的空間位置。
L-R印模型中的采樣線是模型的核心部分,其中記錄了其軸向、起點坐標(x、 y、 z) 以及其上的所有采樣點信息,其0++類定義如下 class CSampleLine
<formula>formula see original document page 10</formula>
其中LineOriented用于標示采樣線的軸向信息;m一x、 m—y、 m—z用于記錄該采樣線與 三維實體第一個交點的三維空間坐標,也是其上所有采樣點的基準坐標信息;spList為 存放所有采樣點信息的STL容器list,其中所有的采樣點按照其深度值d印th進行排序。 用于描述一個三維實體對象的L-R印模型除了采樣點和采樣線信息外,還需要記錄實 體對象的包圍盒信息以及采樣線的采樣步長等基本參數(shù)。其〔++類定義如下class ClineR印 public:
double m一xMin, m—xMax, m一yMin, m一yMax, m一zMin, m一zMax; double m一xStep, m一yStep, m—zSt?。?int ra_xDim, m一yDim, m一zDim:
CSampleLine氺水m—lineGroupXY; CSampleLine氺承m—lineGroupXZ,' CS柳pleLine林ra—lineGroupYZ;
其中m—xMin、 m一xMax、 m—yMin、 m一yMax、 m一zMin、 m_zMax為三維實體對象的軸X寸稱 包圍盒參數(shù);m—xSt印、m—ySt印、m—zSt印為X、 Y、 Z三個方向上的采樣步長;m—xDim、 m—yDim、 m一zDim為X、 Y、 Z三個方向的采樣線個數(shù);m—lineGro叩XY、 m一lineGro叩XZ、 m—lineGroupYZ用于存放X、 Y、 Z三個軸向的采樣線信息。
在實現(xiàn)CsamplePoint、 Csa卿leLine及CUneR印基礎(chǔ)上,實現(xiàn)B-R印模型到L-R印 模型的轉(zhuǎn)換函數(shù)CLRep木BR印2LR印(CHalfEdge* br印Model, int xDim, int yDim, int zDim)及函數(shù)CHlafEdge* LR印2BR印(CLR印承l(wèi)r印Model)。使用者調(diào)用該函數(shù)實現(xiàn)從B-R印 模型轉(zhuǎn)化為L-R印模型。
從B-R印模型到L-R印模型的轉(zhuǎn)化算法包括
構(gòu)成L-R印模型的采樣線的個數(shù)與對實體描述的精度成反比,所以在滿足實體布爾運 算的精度的前提下,L-R印模型中的采樣線數(shù)目會非常大。假設(shè)三維實體對象B-R印模型 是由n個三角形組成,L-R印模型在X、 Y、 Z軸上分別采樣mx、 my、 mz條采樣線。那么 最直觀的構(gòu)建方法是逐個采樣線與B-R印模型中的每個三角形進行相交計算,得到每條采
樣線上交點的信息。此時的算法復雜度為^(^x, + ^x, + ,x —x")。當處理真實
的復雜地理空間實體對象時,計算速度難以滿足實際應用的需求。以某礦體數(shù)據(jù)為例,表 面三角形個數(shù)為3520,如果按照X、 Y、 Z軸分別采樣100次,則最終的L-R印模型構(gòu)成 需要計算的線段與三角形相交次數(shù)維 (100xl00 +兩x兩+ 100x湖)x3520"05600000a108 。因此研究快速的L-R印模型構(gòu)建
11算法是實現(xiàn)基于L-R印模型的三維實體布爾運算的前提。
為了加快從B-R印模型構(gòu)建L-R印模型的速度,采用將B-R印邊界面元向X0Y、 XOZ、 YOZ三個平面投影的方法來計算L-R印模型中的采樣線信息。以三角形面元的B-R印模型 為例闡述算法。
首先,確定L-R印模型的基本參數(shù),包括三維實體的軸對稱包圍盒信息(m—xMin, m一xMax, m一yMin, m—yMax, m一zMin, m_zMax);根據(jù)布爾運算所需的計算精度確定的X、 Y、 Z三個軸向的釆樣線采樣間距(m—xSt印,m—ySt印,m—zSt印);從包圍盒信息及釆樣間距 計算出X、 Y、 Z方向的采樣線個數(shù)(m—xDim, m—yDim, m—zDim);創(chuàng)建三個二維數(shù)組,用 于記錄X、 Y、 Z三個軸向的采樣線(m—lineGro叩XY, m—lineGroupXZ, mjineGro叩YZ)。 其次,將B-R印模型中逐個面元(以三角形為例)T3向X0Y、 Y0Z、 XOZ三個軸向進行 投影,計算該方向的采樣線中交點信息。算法流程如下
1) 計算T3的平面方程
設(shè)三角形T3的的三個頂點分別為v0 (x0, y0, z0), vl (xl, yl, zl), v2 (x2, y2, z2)。三角形平面方程為Ax + By + Cz + D = 0。根據(jù)以下公式,獲得A、 B、 C、 D參數(shù)。 m0 = xl - x0 ml = yl _ y0 m2 = zl - z0 m3 = x2 - x0 m4 = y2 - y0 m5 = z2 - z0 A = ml水m5 一 m2水m4 B = -(m0 * m5 - m2 * m3) C = m0水m4 一 ml水m3 D = _A * x0 - B承y0 - C * z0
2) 將T3投影倒指定的平面上,獲得投影三角形T2
根據(jù)指定的軸向,將T3投影到相應的平面上,獲得一個二維的投影三角形T2;
3) 計算T2范圍內(nèi)的采樣線信息
根據(jù)投影三角形T2計算其二維軸對稱包圍盒(triXMin, triXMax, triYMin, triYMax), 將包圍盒坐標轉(zhuǎn)化為對應的采樣線二維數(shù)組的下標(xStart, xEnd, yStart, yEnd),xStart = (int) ((triXMin - this-〉m一xMin) / this-〉m—xSt印); xEnd 二 (int)((triXMax - this-〉m一xMin) / this-〉m一xStep); yStart = (irvt) ((triYMn - this-〉m_yMin) / this-〉m—yStep); yEnd = (int)((triYMax - this-〉m—yMin) / this-〉m—yStep);
對在投影三角形T2的二維軸對稱包圍盒內(nèi)的采樣線,依次計算其與T2的關(guān)系。求出采 樣線的起點的空間坐標(x, y)。
x = this-〉m一xMin + this-〉m—xSt印氺xi; y = this-〉m—yMin + this->m—yStep氺yi;
判斷該起點與投影三角形T2的空間關(guān)系,分為三種情況1、該點在T2夕卜,則直接 忽略該采樣線;2、該點在T2內(nèi),則該采樣線需要中需要加入關(guān)鍵點;3、該點在T2的邊 上或頂點上,此時需要特殊處理,后續(xù)將專門闡述。
對于需要加入關(guān)鍵點的情況,首先計算出關(guān)鍵點的空間坐標
z = (0 _ D — A木x — B氺y) / C
根據(jù)該采樣線的下標,在采樣線數(shù)組中獲得采樣線
CSampleLine* sLine = this-〉m一lineGroupXY[xi + yi * this-〉m一xDim];
將該關(guān)鍵點加入采樣線中-
sLine-〉 spListaddKeyPoint(z)
當采樣線與三角形的棱邊或頂點相交時,如果出現(xiàn)附圖3 a或附圖4 a的情況,則該 采樣線與三角形的交點需要計算,如果出現(xiàn)附圖3(b)或附圖4 b則該采樣線是和實體對 象的邊界(內(nèi)部或外部)相切而過,此時不需要將該交點加入采樣線中。
當采樣線與三角形棱邊或頂點相交時,此時可能會出現(xiàn)該采樣線和實體對象的邊界 (內(nèi)部或外部)相切而過,因此需要進行專門的判斷。這類特殊情況的判斷是L-R印模型 生成中的關(guān)鍵。
采樣線與三角形的棱邊相交會有兩種情況,如附圖3a、 3b所示。附圖3a中,采樣線 與三維實體為相交情況,此時該點需要加入采樣線中;附圖3b中,采樣線與三維實體為 相切情況,此時該點忽略。由此可以看出, 一個交點是否需要加入采樣線中取決與該點的 鄰域與采樣線是否為相交狀態(tài),可以通過分析棱邊兩側(cè)三角形T1、 T2與該棱邊L相對的 頂點VI、 V2的空間關(guān)系來判斷。將VI、 V2及棱邊L按照當前采樣線的軸向投影至相應平 面上獲得投影點V1' , V2'及L',如果V1' , V2'位于L'的兩側(cè),則說明該采樣線穿
13面上獲得投影點V1' , V2'及L',如果V1' , V2'位于L'的兩側(cè),則說明該采樣線穿 越了交點的鄰域,需要將該交點加入采樣線中,反之則忽略。
采樣線與三角形的頂點相交會有兩種情況,如附圖4a、 4b所示。附圖4a中,采樣線 與三維實體為相交情況,此時該點需要加入釆樣線中;附圖4b中,采樣線與三維實體為 相切情況,此時該點忽略。與交點位于三角形棱邊的情況相同, 一個交點是否需要加入采 樣線中取決與該點的鄰域與采樣線是否為相交狀態(tài)??梢酝ㄟ^將該問題轉(zhuǎn)化為判斷采樣線 與該交點周圍所有棱邊相交的情況來分別判斷,只要有一個棱邊與采樣線的交點可以忽 略,則該采樣線與此三角形的頂點的相交即為忽略,反之則需將該交點加入采樣線中。
L-R印模型的實體布爾運算算法中基于L-R印模型的三維實體表達是以采樣線為基 本單位,因此實體間的布爾運算被簡化為掃描線與掃描線間的一維布爾運算,因此運算速 度快,精度高。運算原理如附圖7所示。
對于內(nèi)部存在裂縫、斷裂面等內(nèi)部邊界的實體對象,進行布爾運算時,可以將原采樣 線按照接觸點分為若干子部分,分別進行采樣線間的布爾運算。如附圖8a-8c所示。
基于L-R印模型進行三維實體布爾運算被分為兩部分第一部分是構(gòu)建實體A和實體 B的L-R印模型,第二部分是在實體A、 B的L-R印模型中的采樣線進行一維的布爾運算。 構(gòu)建實體A和實體B的L-R印模型算法流程如下
1) 獲取實體A、 B的共同最大包圍盒(cxMin, cxMax, cyMin, cyMax, czMin, czMax);
2) 以同樣的步長與共同最大包圍盒分別構(gòu)建實體A、 B的L-R印模型。
步驟3實現(xiàn)兩個L-R印模型中采樣線間的一維布爾運算
對于兩個L-R印模型中處于同一軸線,相同投影坐標的采樣線進行一維布爾運算;以 兩個L-R印模型中的所有采樣線的一維布爾運算結(jié)果,作為兩個L-R印模型的布爾運算結(jié) 果。
由于采用了共同最大包圍盒以及相同的步長,因此實體A、 B的L-R印模型的采樣線 在相同軸向上、相同位置上是相互重疊的,對于所有重疊的采樣線,使用前文所描述的采 樣線布爾運算方法進行一維線段與線段間的布爾運算。附圖9a-9c中,第一部分為實體A、 第二部分為實體B,構(gòu)建其L-R印模型,圖中邊框包圍部分為對實體A、 B進行布爾運算 的結(jié)果部分C。
14L-R印模型與基于柵格模型的三維數(shù)據(jù)場不同,在各個軸向上可以明確地限定出邊界 的位置,因此可以避免從柵格模型的三維數(shù)據(jù)場中重建表面的MC (Marching Cubes)算 法需要遍歷所有單元的缺陷,提高了算法的效率。算法的基本方法是從L-R印模型中采樣 線上的邊界點和接觸點構(gòu)建位于實體對象邊界的虛擬體元,然后采用經(jīng)典的MC算法從虛 擬體元中構(gòu)建實體對象幾何表面。算法流程如下
1) 以L-R印模型基本參數(shù)構(gòu)建一個虛擬的三維規(guī)則數(shù)據(jù)場(Virtual DataSet),建 立一個空隊列用于存放描述對象幾何信息的虛擬體元;
2) 按照逐行逐個的順序處理XOY、 X0Z、 YOZ三個平面中采樣線數(shù)組內(nèi)的采樣線SP。 每條采樣線在數(shù)組中的下標為(i, j),獲取其相鄰采樣線(i+l, j)、 (i+l, j+1)及(i, j+l),如附圖5所示;
3) 對于選中的采樣線SP,取其邊界點及內(nèi)部接觸點,根據(jù)幾何坐標轉(zhuǎn)化為虛擬三維 規(guī)則數(shù)據(jù)場中體素的坐標,建立一個虛擬體素單元,將對應邊界點及內(nèi)部接觸點的幾何坐 標信息記錄在虛擬體素單元的棱邊上,如附圖6所示;
4) 當處理完X0Y、 X0Z、 YOZ三個采樣線數(shù)值后,按照傳統(tǒng)MC算法處理保存下的描述 對象邊界幾何信息的所有虛擬體元,即可獲得對象外部與內(nèi)部的邊界幾何信息,重建實體 對象的B-R印模型。
步驟5:創(chuàng)建€++類0^印800^&11,實現(xiàn)函數(shù)CLineR印爾bool0p(Boolean0pType opType, char* sourceBrepFileName, char* toolBrepFileName, int xDim, int yDim, int zDim), 其中opType描述了布爾運算類型(交、并、差),sourceBr印與toolBr印為需要進行布 爾運算的兩個三維實體對象的B-R印模型外部文件名及路徑,xDira、 yDim、 zDim描述了 布爾運算的精度要求,精度越高則值取的越大,精度要求低則值取的越小。該函數(shù)中,首 先以步驟l中所描述的半邊數(shù)據(jù)結(jié)構(gòu)存儲從外部文件中讀取的B-R印模型數(shù)據(jù);其次使用 步驟2中所描述的方法,實現(xiàn)B-R印模型到L-R印模型的轉(zhuǎn)化;再使用步驟3所描述方法 實現(xiàn)L-R印模型間的布爾運算;最后使用步驟4所描述的方法實現(xiàn)步驟3中獲得的布爾運 算結(jié)果對象的L-R印模型向B-R印模型的轉(zhuǎn)化。
附圖10為球體與立方體的B-R印模型,附圖11為立方體減去球體后的差對象的B-R印 模型。在本實例中,xDim、 yDim、 zDim均取值為100。
權(quán)利要求
1、基于L-Rep模型的三維實體布爾運算方法,該方法包括以下四個部分步驟1讀入兩個實體模型數(shù)據(jù)并構(gòu)建基于B-Rep模型的內(nèi)部數(shù)據(jù)組織;步驟2將B-Rep模型轉(zhuǎn)化為以X、Y、Z三個軸向的采樣線為基本要素的L-Rep模型;步驟3實現(xiàn)兩個L-Rep模型中采樣線間的一維布爾運算;步驟4將基于L-Rep模型表達的結(jié)果實體對象轉(zhuǎn)化為B-Rep模型。
2、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是,—所述步驟1是指將存儲于外部文件中的實體模型描述數(shù)據(jù)讀入內(nèi)存中,重建其表面幾 何與拓撲鄰接關(guān)系,并以基于B-R印模型的內(nèi)部數(shù)據(jù)組織方式加以組織,.作為算法后續(xù)步 驟實施的基礎(chǔ);所述步驟2是指在步驟1的基礎(chǔ)上,根據(jù)應用精度需要及實體模型的軸對稱包圍盒等 基本信息,計算L-R印模型的基本參數(shù);通過轉(zhuǎn)化算法,逐個處理B-R印模型中每個外部 邊界多邊形、內(nèi)部邊界多邊形和內(nèi)部斷裂面多邊形,構(gòu)建L-R印模型中X、 Y、 Z三個軸 向的采樣線,將基于B-R印模型表達的三維實體對象轉(zhuǎn)化為基于L-R印模型表達;所述步驟3是指在步驟2的基礎(chǔ)上,對于兩個L-R印模型中處于同一軸線,相同投影 坐標的采樣線進行一維布爾運算;以兩個L-R印模型中的所有采樣線的一維布爾運算結(jié) 果,作為兩個L-R印模型的布爾運算結(jié)果;所述步驟4是指將步驟3中所獲得的L-R印模型間布爾運算結(jié)果,提取三維實體^J"象 的外部邊界、內(nèi)部邊界及內(nèi)部斷裂信息,重建出基于B-R印模型表達的三維實體對象,并 將結(jié)果以原文件格式保存在外部文件中。
3、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是所述步驟1中,所述L-Rep模 型建立的方法是在X0Y、 X0Z、 Y0Z三個平面上,分別沿Z軸方向、Y軸方向和X軸方向, 按一定采樣間距向三維空間實體對象發(fā)射采樣線段,每條采樣線段記錄其與三維空間實體 相交的交點,三個軸向上所有的采樣線段的集合構(gòu)成的L-R印模型。
4、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是所述步驟3中,兩個L-Rep模 型中采樣線間的一維布爾運算是對于兩個L-R印模型中處于相同軸向,并在相應的平面 上投影坐標相同的釆樣線,進行一維布爾運算,將布爾運算的結(jié)果作為兩個L-R印模型布 爾運算結(jié)果的一部分。
5、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是所述B-R印模型到L-R印模型 的轉(zhuǎn)化按照以下算法進行:根據(jù)包括應用精度需要及實體模型的軸對稱包圍盒在內(nèi)的基本 信息,計算出L-R印模型的基本參數(shù),包括軸對稱包圍盒參數(shù)(xMin, xMax, yMin, yMax,zMin, zMax)、采樣線間距(xSt印,ySt印,zSt印)和X、 Y、 Z三個軸向采樣線個數(shù)(xDim, yDim, zDim),創(chuàng)建Y0Z平面、X0Z平面、XOY平面中空白采樣線段數(shù)組;依次處理B-R印 模型所表達的實體對象的外部邊界多邊形、內(nèi)部邊界多邊形與內(nèi)部裂縫多邊形,將每個多 邊形分別投影至XOY、 X0Z、 Y0Z平面,計算出與其相交的Z、 Y、 X三個軸向的采樣線,并 將交點加入采樣線中,最終實現(xiàn)將B-R印模型轉(zhuǎn)化為L-R印模型。
6、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是所述步驟4包括以下步驟以 L-R印模型基本參數(shù)構(gòu)建一個虛擬的三維規(guī)則數(shù)據(jù)場;按照逐行逐個的順序處理X0Y、X0Z、 YOZ三個平面中采樣線數(shù)組內(nèi)的采樣線SP;每條采樣線在數(shù)組中的下標為(i, j),獲取 其相鄰采樣線(i+l, j)、 (i+l, j+l)及(i, j+l);對于選中的采樣線.SP,取其邊界點 及內(nèi)部接觸點,根據(jù)幾何坐標轉(zhuǎn)化為虛擬三維規(guī)則數(shù)據(jù)場中體素的坐標,建立一個虛ftl體 素單元,將對應邊界點及內(nèi)部接觸點的幾何坐標信息記錄在虛擬體素單元的棱邊上;當處 理完X0Y、 X0Z、 YOZ三個采樣線數(shù)值后,按照傳統(tǒng)MC (Marching Cubes)算法處理保存 下的描述對象邊界幾何信息的所有虛擬體元,即可獲得對象外部與內(nèi)部的邊界幾何信息, 重建出實體對象的B-R印模型,并保存至外部數(shù)據(jù)文件中。
7、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是所述從L-R印模型到B-R印模 型的轉(zhuǎn)化算法是:從L-R印模型中采樣線上的邊界點和接觸點構(gòu)建位于實體對象邊界的虛 擬體元,然后采用經(jīng)典的MC算法從虛擬體元中構(gòu)建實體對象幾何表面。
8、 根據(jù)權(quán)利要求1所述的布爾運算方法,其特征是從L-R印模型到B-R印模型的 轉(zhuǎn)化算法流程如下1) 以L-R印模型基本參數(shù)構(gòu)建一個虛擬的三維規(guī)則數(shù)據(jù)場,建立一個空隊列用于存 放描述對象幾何信息的虛擬體元;2) 按照逐行逐個的順序處理XOY、 X0Z、 YOZ三個平面中采樣線數(shù)組內(nèi)的采樣線SP。 每條采樣線在數(shù)組中的下標為(i, j),獲取其相鄰采樣線(i+l, j)、 (i+l, j+l)及(i, j+l);3) 對于選中的采樣線SP,取其邊界點及內(nèi)部接觸點,根據(jù)幾何坐標轉(zhuǎn)化為虛擬三維 規(guī)則數(shù)據(jù)場中體素的坐標,建立一個虛擬體素單元,將對應邊界點及內(nèi)部接觸點的幾何坐 標信息記錄在虛擬體素單元的棱邊上;4) 當處理完X0Y、 X0Z、 YOZ三個采樣線數(shù)值后,按照傳統(tǒng)MC算法處理保存下的描述對象邊界幾何信息的所有虛擬體元,即可獲得對象外部與內(nèi)部的邊界幾何信息,重建實體 對象的B-R印模型。
全文摘要
本發(fā)明公布了一種基于L-Rep模型的三維實體布爾運算方法根據(jù)實際應用所需的精度要求,將基于B-Rep模型的三維實體轉(zhuǎn)化為基于采樣線的L-Rep模型,以X、Y、Z三個軸向的采樣線來表達三維實體對象包括外部邊界、內(nèi)部邊界以及內(nèi)部斷裂在內(nèi)的幾何信息;將兩個三維實體間的三維布爾運算轉(zhuǎn)化為L-Rep模型中采樣線間的一維布爾運算,求出基于L-Rep模型表達的三維實體間布爾運算結(jié)果對象;再將基于L-Rep模型表達的三維實體間布爾運算結(jié)果轉(zhuǎn)化為B-Rep模型,作為最終計算結(jié)果,以便為其他應用所使用。本發(fā)明可以在滿足實際應用精度需要的前提下,實現(xiàn)三維實體間快速、穩(wěn)定、健壯的實體布爾運算。
文檔編號G06T17/10GK101609565SQ20091002712
公開日2009年12月23日 申請日期2009年5月22日 優(yōu)先權(quán)日2009年5月22日
發(fā)明者周良辰, 盛業(yè)華, 閭國年 申請人:南京師范大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1