專利名稱:基于空間掃描策略的三維相交檢測算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)圖形學(xué)、計算幾何、CAD/CAM、GIS、VLSI布局、線性規(guī)劃、模式識 別領(lǐng)域,具體涉及基于紅藍(lán)思想的空間對象分組、事件點的創(chuàng)建、事件點列表的構(gòu)建、空間 掃描面的建立與移動、激活態(tài)空間對象的相交測試等內(nèi)容。
背景技術(shù):
近年來,國內(nèi)外學(xué)者對如何提高相交檢測效率進(jìn)行了大量的研究,提出了 諸如空 間劃分法和層次包圍盒法等有效的檢測方法。在實際應(yīng)用中,Ganter和Isarankura提出 了一種空間分解的方法,將包含幾何對象的空間劃分成一系列子空間,只在兩個幾何對象 的重疊子空間進(jìn)行相交檢測,這樣減少了幾何對象兩兩相交計算的數(shù)目,進(jìn)一步減少了測 試的時間。Gottschalk提出了基于OBB的相交檢測算法,基于此開發(fā)了當(dāng)時最快的相交檢 測系統(tǒng)一RAPID。平面掃描(Swe印Line)技術(shù)是計算幾何領(lǐng)域一個通用的技術(shù),Bentley和 Ottmarm將平面掃描技術(shù)引入到平面線段交點算法中,提出了 BO算法,該算法把效率和實 際線段相交個數(shù)聯(lián)系起來,極大的提高了平面線段交點算法的效率,屬于“輸出敏感型”算 法。Domiter and Zalik對二維散亂點集進(jìn)行帶邊界約束的Delaunay三角剖分時,應(yīng)用平 面掃描技術(shù)將研究區(qū)域劃分成已經(jīng)三角剖分的區(qū)域與未進(jìn)行三角剖分的區(qū)域,大大提高了 Delaunay三角剖分算法的效率。Krista等將平面掃描技術(shù)應(yīng)用于空間數(shù)據(jù)的空間聚類分 析中,提出了一種可以處理大數(shù)據(jù)量空間數(shù)據(jù)庫的空間聚類方法。
發(fā)明內(nèi)容
為了克服現(xiàn)有的相交檢測算法在處理海量三維GIS空間數(shù)據(jù)時效率低下的缺點, 借鑒二維平面掃描技術(shù),提出了一種空間掃描策略,進(jìn)而提出了一種基于空間掃描策略的 三維相交檢測算法-Swe印Plane,該算法在大大提高了算法效率同時,也解決了大數(shù)據(jù)量復(fù) 雜場景內(nèi)相交檢測的實時性問題。本發(fā)明的技術(shù)方案是基于空間掃描策略的三維相交檢測算法,根據(jù)空間掃描的 分區(qū)特性,在掃描的過程中,將場景內(nèi)空間對象的狀態(tài)劃分為死亡態(tài),激活態(tài)和休眠態(tài),通 過只對處于激活態(tài)的空間對象進(jìn)行相交計算。該算法充分利用了檢測過程中位于虛擬掃描 軌跡前后分區(qū)內(nèi)空間對象之間的聯(lián)系,對檢測過程進(jìn)行了優(yōu)化,減少了場景內(nèi)各個空間對 象間大量不必要的相交檢測,在大大提高了算法效率同時,也解決了大數(shù)據(jù)量復(fù)雜場景內(nèi) 相交檢測的實時性問題。上述技術(shù)方案進(jìn)一步包括以下四個部分步驟1 讀入空間對象實體模型數(shù)據(jù)和基于紅藍(lán)思想對空間對象分組;步驟2 創(chuàng)建事件點并構(gòu)建和事件點列表;步驟3 確定自適應(yīng)三維空間掃描面;步驟4 空間掃描面的移動與事件點觸發(fā)的動作。
所述步驟1中,在計算機(jī)內(nèi)存中建立空間實體對象的數(shù)據(jù)模型的方式是通過用 計算機(jī)編程語言實現(xiàn)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),組織和管理空間實體對象,描述實體對象的幾何關(guān) 系和拓?fù)溧徑有畔?。在此基礎(chǔ)上,按照用戶預(yù)定義分類標(biāo)準(zhǔn),作為紅藍(lán)分組的標(biāo)準(zhǔn),分別構(gòu) 建紅藍(lán)要素分組列表。所述步驟2具體包括在讀取每個空間對象到內(nèi)存的同時,創(chuàng)建與之相對應(yīng)的事 件點,并將其X最大值xMAX、Y最大值yMAX、Z最大值zMAX,作為事件點的值,分別放入順 序表xTable、yTable、zTable中。當(dāng)所有對象都讀取完畢后,選擇順序表xTable、yTable、 zTable中記錄最多的作為事件點列表(EventTable),并對事件點列表中記錄按照從大到 小順序進(jìn)行排列。所述步驟3具體包括根據(jù)空間對象的空間分布特征,并結(jié)合步驟2中事件點列表 選取方法,自適應(yīng)地完成空間掃描面的構(gòu)建。所述步驟4具體包括在空間掃描面按照事件點列表中事件點的順序,從表頭逐 步向表尾移動的過程中,在事件點位置觸發(fā)相應(yīng)的動作,即更新空間對象的狀態(tài),實時更新 激活態(tài)空間對象集合以及對處于激活態(tài)的空間對象間的進(jìn)行相交計算。本發(fā)明旨在解決大規(guī)模數(shù)據(jù)量的虛擬場景環(huán)境中空間對象間實時相交檢測的問 題,以往的檢測算法多是針對兩個幾何對象發(fā)生碰撞的情況,當(dāng)場景中存在大量幾何對象 時,需要反復(fù)調(diào)用以上算法進(jìn)行幾何對象間的兩兩相交檢測,會浪費大量檢測的時間。這種 做法沒有綜合利用檢測過程中幾何對象相互之間的聯(lián)系,以減少不必要的檢測。
圖1是本發(fā)明實施例1的流程2是本發(fā)明實施例1空間掃描策略的示意3是本發(fā)明實施例1空間對象類結(jié)構(gòu)4是本發(fā)明實施例1紅藍(lán)對象分組列表類結(jié)構(gòu)圖
具體實施例方式下面結(jié)合附圖和實施例作進(jìn)一步詳細(xì)說明。實施例1如圖1所示,基于空間掃描策略的三維相交檢測算法,該方法包括以下四個部分步驟1讀入空間對象實體模型數(shù)據(jù)和基于紅藍(lán)思想的空間對象分組;步驟2創(chuàng)建事件點并構(gòu)建和事件點列表;步驟3確定自適應(yīng)三維空間掃描面;步驟4空間掃描面的移動與事件點觸發(fā)的動作。具體實施步驟如下步驟1讀入空間對象數(shù)據(jù)和基于紅藍(lán)思想的空間對象分組;空間實體對象在計算機(jī)內(nèi)存中的數(shù)據(jù)組織方式是通過用計算機(jī)編程語言實現(xiàn)的 內(nèi)存數(shù)據(jù)結(jié)構(gòu),組織和管理空間實體對象,描述實體對象的幾何關(guān)系和拓?fù)溧徑有畔?。在Windows XP SP3 系統(tǒng)下,利用 Visual Studio 2008SP1 平臺建立 C++i吾言 的Win32動態(tài)鏈接庫,命名為Swe印Plane。本實施例Swe印Plane中采用的數(shù)據(jù)結(jié)構(gòu)包括CFeature、CFeatureTable、CActiveFeatureSet 三部分,詳細(xì)定義如下 CFeature類的結(jié)構(gòu)如附圖3所示,詳細(xì)結(jié)構(gòu)包括要素的ID號、要素頂點列表和
要素的包圍盒,以及要素的屬性特征值,代碼如下
class CFeature{public://具有的操作CFeature(int id, List<CVertex>vertexList, Feature_Type featureType);
II實例對象丨丨判斷是否與另外的空間對象相交bool intersect (CFeature*other);public://具有的屬性int ID ;// 要素的 id 號Feature_Type featureType ;// 要素的屬性特征值List<CVertex>vertexList ;// ^"MM^M^CBoundingBox bBox ;//要素空間對象包圍盒};注意上述偽代碼中CVertex為頂點類,其包括了頂點的ID,以及頂點的X、Y和Z
坐標(biāo)值。算法首先從外存中讀取一系列空間對象到內(nèi)存中,并按照上述數(shù)據(jù)結(jié)構(gòu)進(jìn)行組織 和管理。然后,按照用戶預(yù)定義的要素的屬性特征值(或空間對象本身具有的分類特性), 作為紅藍(lán)分組的標(biāo)準(zhǔn),分別構(gòu)建紅藍(lán)要素分組列表(FeatureTable)。紅藍(lán)對象分組列表類的組織結(jié)構(gòu)如附圖4所示,詳細(xì)代碼如下class CFeatureTable{public://具有的操作II向要素表中添加一個要素void addFeature (CFeature氺feature);II從要素表中需找事件點為指定event值的所有要素CFeature氺getFeatures(CEvent event);丨丨確定Feature的索引取值void setupFeatureTable(ScanPlaneDirection spDirection);private://具有的屬性//事件點到空間對象的映射表mu 11imap<CEvent, CFeature*>eventsMap2Features ;//空間掃描面的方向ScanPlaneDirection_spDirection ;};步驟2創(chuàng)建事件點并構(gòu)建和事件點列表;所謂事件點是指,在掃描的過程中空間掃描面(一個假想的平面)會在某些特殊的點停住,進(jìn)行一些分析操作,這些點被稱為事件點。事件點可以是任何分析算法感興趣的 空間要素,包括對象之間的交點和特征點等。事件點依照算法確定的空間排序關(guān)系進(jìn)行存 儲,從而構(gòu)成的事件點集合,記為事件點列表。事先能夠確定的事件點列表在掃描過程中不 在變化,稱為靜態(tài)事件點列表;需要在掃描過程中計算更性的事件點列表稱為動態(tài)事件點 列表。在讀取每個空間對象到內(nèi)存的同時,創(chuàng)建與之相對應(yīng)的事件點,并將其X最大值 xMAX、Y最大值yMAX、Z最大值zMAX,作為事件點的值,分別放入順序表xTable、yTable、 zTable中。利用C++標(biāo)準(zhǔn)模板庫STL中的集合模板類(set),將三個順序表定義為set集 合,在完成事件點存儲和管理同時,可以避免事件點的重復(fù)存儲。當(dāng)所有對象都讀取完畢 后,選擇順序表xTab 1 e、yTab 1 e、zTab 1 e中記錄最多的作為事件點列表(EventTab 1 e),并對 事件點列表中記錄按照坐標(biāo)值從大到小順序進(jìn)行排列。步驟3確定自適應(yīng)三維空間掃描面;所采用的空間掃描策略是假設(shè)空間中有一個空間對象的集合S,并假想有一個 垂直于坐標(biāo)軸(X軸、Y軸或Z軸)的掃描面(Swe印Plane,以下簡稱SP)從S的左端向右 端掃描。在SP掃描的過程中,動態(tài)維護(hù)S n SP的空間對象集合,同時要滿足兩個不變式 a)位于SP左端的空間對象已經(jīng)參與了分析操作,將不再參與以后的分析操作;b)位于SP 右端或與SP相交的空間對象是我們要進(jìn)行分析操作的對象,需要對這些空間對象的集合 進(jìn)行實時的更新。與二維平面掃描技術(shù)相似,在SP掃描過程中,根據(jù)每個空間對象與掃描面SP的關(guān) 系,可以將空間對象集合S分為以下三種狀態(tài)的空間對象(如圖2所示)a)死亡態(tài)(Dead State)空間對象,位于掃描面SP左側(cè)的空間對象,它們是已經(jīng)進(jìn) 行過相交測試的空間對象,將不再參與求交計算;b)激活態(tài)(Active State)空間對象,與掃描面SP相交的空間對象,它們是正在進(jìn) 行相交測試的空間對象;c)休眠態(tài)(Slewing State)空間對象,位于掃描面SP右側(cè)的空間對象,它們是暫 時不參與相交測試的空間對象,只有當(dāng)掃描面到達(dá)它們所處的事件點時,才觸發(fā)相應(yīng)的求 交計算?;诳臻g掃描策略的三維相交檢測算法核心在于通過空間掃描面將空間對象分 為死亡、活動、休眠三個狀態(tài),僅對處于活動狀態(tài)的對象進(jìn)行實際相交計算,從而減少相交 計算的數(shù)量,加快檢測的速度。因此,有效的對空間對象進(jìn)行劃分,減少處于激活態(tài)的空間 對象個數(shù),是算法效率提高的關(guān)鍵。本文所提出的算法,根據(jù)X、Y、Z方向空間對象分布的特征,選擇空間對象分布最 長的軸向為空間掃描面的移動方向。結(jié)合步驟2中事件點列表選取方法的內(nèi)容,如果以X軸 向作為事件點列表,則空間掃描面平行于YZ平面;如果以Y軸向作為事件點表,則空間掃描 面平行于XZ平面,如果以Z軸向作為事件表,則掃描面平行于XY平面。如此即根據(jù)空間對 象的空間分布特征,自適應(yīng)的確定了空間掃描面的構(gòu)建。這種自適應(yīng)的決定空間掃描面的 構(gòu)建,使得對空間對象的狀態(tài)劃分更加合理,能夠有效的減少同時處于激活態(tài)的對象個數(shù), 進(jìn)而減少了實際相交計算次數(shù),有效的提高算法效率。步驟4空間掃描面的移動與事件點觸發(fā)的動作。
算法在事件點位置對空間對象進(jìn)行的所有分析和操作,稱為事件點觸發(fā)的動作, 在相交檢測的算法中,主要是空間對象間的相交測試??臻g掃描面按照事件點列表中事件點的順序,從表頭逐步向表尾移動,并在事件 點位置觸發(fā)相應(yīng)的動作。在本文的算法中,事件點觸發(fā)的動作包括更新空間對象的狀態(tài)、實 時更新激活態(tài)空間對象集合以及對處于激活態(tài)的空間對象間的進(jìn)行相交計算。以Z軸向事件列表和平行于XY平面的空間掃描面為例進(jìn)行闡述,當(dāng)空間掃描 面從前一個事件點(PreviousEvent)移動到當(dāng)前事件點(CurrentEvent)時,分別從紅 藍(lán)對象列表(RedFeatureTable 和 BlueFeatureTable)中查找 CurrentEvent 事件點所 對應(yīng)的空間對象,即所有ZMax等于CurrentEvent值的空間對象;從激活態(tài)對象集合 (ActiveFeatureSet)中查找與CurrentEvent事件點滿足某種邏輯關(guān)系的空間對象,即所 有ZMin大于CurrentEvent值的空間對象。將CurrentEvent所對應(yīng)的空間對象的狀態(tài)從 休眠態(tài)改為激活態(tài),并將其添加到激活態(tài)對象集合中;將與CurrentEvent滿足邏輯關(guān)系的 空間對象的狀態(tài)從激活態(tài)改為死亡態(tài),并將其從激活態(tài)空間對象集合中刪除。在每次往激活態(tài)空間對象集合中添加空間對象時,將其與集合內(nèi)其他空間對象進(jìn) 行相交計算操作。為了加快計算的速度,先利用包圍盒技術(shù),判斷參與相交計算的空間對象 的包圍盒之間的空間關(guān)系,如果兩個包圍盒不相交,那么這兩個空間對象也不會相交,這樣 可以進(jìn)一步減少不必要的相交計算操作。如果兩個空間對象相交,則將其添加到計算結(jié)果 集中。算法實現(xiàn)中空間掃描面從事件點列表頭逐步移動到表尾部,代碼如下foreach (CEvent CurrentEvent in eventSet) {II更新激活態(tài)對象集合中對象狀態(tài)activeFeatures- > moveToNextPosition(currentEvent);//從紅對象分組列表中獲取currentEvent事件點對應(yīng)的空間對象集合CFeatureSet 氺 redFeatures = redFeatureTable- > getFeatures(currentEvent);foreach(CFeature redFeature in redFeatures){activeFeatures- > addFeature (redFeature, RED_FEATURE);}II對藍(lán)對象分組列表做的操作,與紅對象分組列表相似..........}注上面的代碼中,activeFeatures是激活態(tài)空間對象集合類 CActiveFeatureSet 的一個實例。
權(quán)利要求
基于空間掃描策略的三維相交檢測算法,其特征是,基于空間掃描策略的三維相交檢測算法,根據(jù)空間掃描的分區(qū)特性,在掃描的過程中,將場景內(nèi)空間對象的狀態(tài)劃分為死亡態(tài),激活態(tài)和休眠態(tài),通過只對處于激活態(tài)的空間對象進(jìn)行相交計算。
2.根據(jù)權(quán)利要求1所述的檢測算法,其特征是,該方法包括以下四個部分步驟1讀入空間對象實體模型數(shù)據(jù)和基于紅藍(lán)思想的空間對象分組;步驟2創(chuàng)建事件點并構(gòu)建和事件點列表;所述事件點是指,在掃描的過程中空間掃描 面會在某些特殊的點停住,進(jìn)行一些分析操作,這些點被稱為事件點;事件點依照算法確定 的空間排序關(guān)系進(jìn)行存儲,從而構(gòu)成的事件點集合,記為事件點列表;步驟3確定自適應(yīng)三維空間掃描面;步驟4空間掃描面的移動與事件點觸發(fā)的動作。
3.根據(jù)權(quán)利要求2所述的相交檢測算法,其特征是,所述步驟1中,在計算機(jī)內(nèi)存中建立空間實體對象的數(shù)據(jù)模型的方式是通過用計算 機(jī)編程語言實現(xiàn)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),組織和管理空間實體對象,描述實體對象的幾何關(guān)系和 拓?fù)溧徑有畔?;在此基礎(chǔ)上,按照用戶預(yù)定義分類標(biāo)準(zhǔn),作為紅藍(lán)分組的標(biāo)準(zhǔn),分別構(gòu)建紅 藍(lán)要素分組列表;所述步驟2具體包括在讀取每個空間對象到內(nèi)存的同時,創(chuàng)建與之相對應(yīng)的事件點, 并將其X最大值(xMAX)、Y最大值(yMAX)、Z最大值(zMAX),作為事件點的值,分別放入順序 表(XTable、yTable、ZTable)中;當(dāng)所有對象都讀取完畢后,選擇順序表(xTable、yTable、 zTable)中記錄最多的作為事件點列表(EventTable),并對事件點列表中記錄按照從大到 小順序進(jìn)行排列;所述步驟3具體包括實時更新激活態(tài)空間對象集合以及對處于激活態(tài)的空間對象間 的進(jìn)行相交計算。
4.根據(jù)權(quán)利要求2所述的相交檢測算法,其特征是所述步驟3中采用的空間掃描策 略是假設(shè)空間中有一個空間對象的集合S,并假想有一個垂直于坐標(biāo)軸的掃描面從S的左 端向右端掃描;在SP掃描的過程中,動態(tài)維護(hù)S n SP的空間對象集合,同時要滿足兩個不 變式a)位于SP左端的空間對象已經(jīng)參與了分析操作,將不再參與以后的分析操作;b)位 于SP右端或與SP相交的空間對象是要進(jìn)行分析操作的對象,需要對這些空間對象的集合 進(jìn)行實時的更新。
5.根據(jù)權(quán)利要求2所述的相交檢測算法,其特征是所述步驟3中,空間掃描面的構(gòu)建 過程是結(jié)合步驟2中事件點列表選取方法的內(nèi)容,如果以X軸向作為事件點列表,則空間 掃描面平行于YZ平面;如果以Y軸向作為事件點表,則空間掃描面平行于XZ平面,如果以 Z軸向作為事件表,則掃描面平行于XY平面。
6.根據(jù)權(quán)利要求2所述的相交檢測算法,其特征是所述步驟4中,所述的空間掃 描面移動和事件點觸發(fā)動作的實現(xiàn)過程以Z軸向事件列表和平行于XY平面的空間掃 描面為例進(jìn)行闡述,當(dāng)空間掃描面從前一個事件點(PreviousEvent)移動到當(dāng)前事件點 (CurrentEvent)時,分別從紅藍(lán)對象列表(RedFeatureTable 禾口 BlueFeatureTable)中查找 當(dāng)前事件點(CurrentEvent)所對應(yīng)的空間對象;從激活態(tài)對象集合(ActiveFeatureSet) 中查找與當(dāng)前事件點(CurrentEvent)滿足某種邏輯關(guān)系的空間對象;將當(dāng)前事件點 (CurrentEvent)所對應(yīng)的空間對象的狀態(tài)從休眠態(tài)改為激活態(tài),并將其添加到激活態(tài)對象集合中;將與當(dāng)前事件點(CurrentEvent)滿足邏輯關(guān)系的空間對象的狀態(tài)從激活態(tài)改為 死亡態(tài),并將其從激活態(tài)空間對象集合中刪除。
全文摘要
本發(fā)明公開了一種基于空間掃描策略的三維相交檢測算法,該方法是根據(jù)空間掃描的分區(qū)特性,在虛擬掃描面的移動過程中,將場景內(nèi)空間對象的狀態(tài)劃分為死亡態(tài),激活態(tài)和休眠態(tài),通過只對處于激活態(tài)的空間對象進(jìn)行相交計算,這樣充分利用了檢測過程中位于虛擬掃描軌跡前后分區(qū)內(nèi)空間對象之間的聯(lián)系,對檢測過程進(jìn)行了優(yōu)化,減少了場景內(nèi)各個空間對象間大量不必要的相交檢測,在大大提高了算法效率同時,也解決了大數(shù)據(jù)量復(fù)雜場景內(nèi)相交檢測的實時性問題。
文檔編號G06T17/00GK101877141SQ20091023426
公開日2010年11月3日 申請日期2009年11月18日 優(yōu)先權(quán)日2009年11月18日
發(fā)明者周良辰, 王永君, 王永志, 盛業(yè)華, 趙林林 申請人:南京師范大學(xué)