顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法
【專(zhuān)利摘要】一種顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法,所述三維地理空間實(shí)體群的三維空間數(shù)據(jù)模型包括節(jié)點(diǎn)、邊、環(huán)、平面片和體這5類(lèi)基元,預(yù)設(shè)的規(guī)則包括給予消隱的每個(gè)實(shí)體必須是剖分完全的,設(shè)定了只共面、只共邊、只共點(diǎn)、共面面、共邊面、共邊邊、共點(diǎn)面、共點(diǎn)邊、共點(diǎn)點(diǎn)的情況;進(jìn)行消隱過(guò)程,包括顧及拓?fù)潢P(guān)系的消隱預(yù)處理,擴(kuò)展的第一類(lèi)線消隱處理處理自遮擋的情況,擴(kuò)展的第二類(lèi)線消隱處理處理互遮擋的情況。與現(xiàn)有三維實(shí)體集合線消隱的相關(guān)技術(shù)相比,本發(fā)明能夠?qū)崿F(xiàn)三維實(shí)體集群的線消隱處理,對(duì)實(shí)體的各種情況都能準(zhǔn)確進(jìn)行處理。
【專(zhuān)利說(shuō)明】顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及三維地理空間數(shù)據(jù)組織與可視化的【技術(shù)領(lǐng)域】,尤其是涉及一種顧及拓 撲的三維地理空間數(shù)據(jù)的線消隱方法。
【背景技術(shù)】
[0002] 用計(jì)算機(jī)生成三維形體的真實(shí)感圖形,是計(jì)算機(jī)圖形學(xué)研究重點(diǎn)之一。真實(shí)感圖 形在仿真模擬、幾何造型、科學(xué)計(jì)算可視化等多個(gè)領(lǐng)域具有廣泛應(yīng)用,其生成過(guò)程涉及消 隱。消隱,就是運(yùn)用某種技術(shù)手段判別物體的隱藏部分(不可見(jiàn)的線或面)并將其從畫(huà)面 中消除或用虛線繪制的過(guò)程,也稱(chēng)可見(jiàn)性測(cè)試。消隱后的圖形,稱(chēng)為ShadedPicture或者 Half-tonePicture,與物體的可見(jiàn)性判定(VisibilityDetermination)在原則上等價(jià)。采 用消隱后的二維線框圖形來(lái)表達(dá)真實(shí)的三維圖形,輸入數(shù)據(jù)為三維實(shí)體群,輸出數(shù)據(jù)為二 維線框。因?yàn)檩敵鰯?shù)據(jù)是線框,面在輸出結(jié)果中是不表達(dá)的,所以核心是線狀實(shí)體在最終輸 出結(jié)果中的可見(jiàn)或不可見(jiàn)表達(dá)。消隱的過(guò)程,其實(shí)是不斷趨近最真實(shí)的面與線可見(jiàn)性判定 的過(guò)程。
[0003] 之所以消隱在真實(shí)感圖形生成過(guò)程中非常重要,是因?yàn)椋海?)三維信息在經(jīng)過(guò)二 維投影變換后失去了深度信息,往往導(dǎo)致圖形表達(dá)的二義性,需要在繪制二維圖形同時(shí)通 過(guò)隱藏物體的不可見(jiàn)部分來(lái)輔助展現(xiàn)三維立體形態(tài);(2)消隱是生成真實(shí)感圖形的重要組 成部分,它為后續(xù)的光照模型設(shè)置、表面渲染(包括紋理映射)提供了基礎(chǔ)。
[0004] 消隱方法至今研究眾多。面對(duì)迄今為止眾多的消隱算法研究,分類(lèi)方法也有所不 同,可歸納如下:⑴根據(jù)消隱方法分類(lèi),包括物空間消隱和像空間消隱;⑵根據(jù)消隱對(duì)象 分類(lèi),包括線消隱和面消隱;(3)根據(jù)實(shí)現(xiàn)途徑分類(lèi),包括計(jì)算機(jī)軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)?,F(xiàn) 有多采用第一種和第二種分類(lèi)方法,特別是第一種分類(lèi)方法。具體的,物空間消隱以三維場(chǎng) 景中對(duì)象為處理單元,在所有對(duì)象之間進(jìn)行比較,除去不可見(jiàn)部分。物空間消隱多用于線消 隱,也用于面消隱。像空間消隱以構(gòu)成圖形的每一個(gè)像素為處理單元,針對(duì)場(chǎng)景中所有在該 像素上有投影的表面,確定其中相對(duì)于觀察點(diǎn)的可見(jiàn)表面,用該表面顏色填充該像素。像空 間消隱多用于面消隱。
[0005] 自從Robert于1963年提出處理隱藏線、Weiler等于1977年提出處理隱藏面的算 法以來(lái),消隱算法層出不窮。針對(duì)現(xiàn)有大量的針對(duì)消隱處理的文獻(xiàn)研究,往往采用像空間、 物空間、像空間和物空間結(jié)合這三個(gè)分類(lèi)。
[0006] 針對(duì)基于像空間的諸多消隱算法,其中Z緩沖器算法最為有名,它也是最為目前 常用的作用于像空間的隱藏面消除算法,它在工業(yè)界被廣泛采用,可通過(guò)硬件實(shí)現(xiàn)。例如, OpenGL作為工業(yè)界事實(shí)上的標(biāo)準(zhǔn),其采用的就是Z緩沖器算法。針對(duì)基于像空間的消隱算 法,以像素為基本研究單位,與完全基于物空間的消隱算法相比其涉及計(jì)算幾何內(nèi)容較少, 其本質(zhì)上屬于圖形圖像學(xué)領(lǐng)域。故而,完全基于像空間的消隱算法、結(jié)合像空間和物空間的 消隱算法不是本發(fā)明的研究重點(diǎn),基于物空間的消隱算法才是本發(fā)明的借鑒對(duì)象。
[0007] 此外,針對(duì)完全基于像空間、結(jié)合像空間和物空間的消隱方法,它們的算法復(fù)雜度 與環(huán)境復(fù)雜度無(wú)關(guān)(如與三維實(shí)體包含了多少面片、多少線段無(wú)關(guān)),只與輸出設(shè)備的像 素分辨率有關(guān),故而無(wú)法在圖像縮放時(shí)依然保持足夠清晰度,可視化效果不理想;相對(duì)的, 針對(duì)完全基于物空間的消隱方法(包括Apprel方法、Loutrel方法、Galimberti方法、 Mononari方法等)的空間復(fù)雜度,都與環(huán)境復(fù)雜度的平方呈現(xiàn)正相關(guān),在圖像縮放時(shí)依然 保持足夠清晰度,可視化效果理想。這也是本發(fā)明的重點(diǎn)參考對(duì)象是基于物空間的消隱方 法的原因。
[0008] 按照不同消隱客體分類(lèi),還包括針對(duì)機(jī)械零件、針對(duì)曲面、針對(duì)地形、針對(duì)地質(zhì)柵 欄等消隱。還有許多研究關(guān)注如何設(shè)計(jì)應(yīng)用于消隱的數(shù)據(jù)模型或數(shù)據(jù)結(jié)構(gòu),基于現(xiàn)有不同 數(shù)據(jù)結(jié)構(gòu)能夠?qū)崿F(xiàn)一定程度的物空間消隱,但各自存在局限性,因?yàn)槭鼙旧頂?shù)據(jù)結(jié)構(gòu)的局 限較大(之后詳述)。
[0009] 由上可見(jiàn),有的研究注重消隱方法的輸入數(shù)據(jù)類(lèi)型(如針對(duì)機(jī)械零件、針對(duì)曲面、 針對(duì)地形、針對(duì)地質(zhì)柵欄),有的研究注重輸出結(jié)果的表達(dá)形式(如P緩沖器算法中輸出結(jié) 果的不同類(lèi)型表達(dá)),有的研究注重應(yīng)用于消隱的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(如半邊結(jié)構(gòu)、B-rep結(jié)構(gòu)、 B-rep與CSG結(jié)合、有限元組織形式),更多的研究關(guān)注消隱方法的設(shè)計(jì)原理(如各類(lèi)物空 間算法、像空間算法、物空間與像空間結(jié)合算法)。
[0010] 綜上所述,每一個(gè)消隱方法事實(shí)上都可以從它們共同擁有的五個(gè)方面著手給予歸 納,即每一個(gè)消隱方法可以看成是一個(gè)五元組集合,即:HA= (1,0,0汁,幻。其中:撤是一個(gè) 消隱方法,I(Input)為要進(jìn)行消隱處理的三維對(duì)象的集合,簡(jiǎn)稱(chēng)輸入;O(Output)為經(jīng)過(guò)消 隱處理的二維對(duì)象的集合,簡(jiǎn)稱(chēng)輸出;D(DataStructure)為進(jìn)行消隱處理時(shí)采用的數(shù)據(jù)結(jié) 構(gòu),簡(jiǎn)稱(chēng)數(shù)據(jù)結(jié)構(gòu);P(Pr〇Cedure)為進(jìn)行消隱所需基本操作過(guò)程的集合,主要包括:分類(lèi)、 排序、三維坐標(biāo)變換、透視投影變換,基本圖形元素的求交計(jì)算,兩個(gè)區(qū)域重疊判斷,點(diǎn)與區(qū) 域的包含測(cè)試,面的朝向測(cè)試,簡(jiǎn)稱(chēng)過(guò)程;S(Strategy)為消隱策略,即規(guī)定P(Procedure) 中各操作過(guò)程被采用的先后次序,簡(jiǎn)稱(chēng)策略。
[0011] 消隱方法之所以不同,主要在于因素I,D,P,S,其次在于因素0。針對(duì)I,只有保證 輸入數(shù)據(jù)是正確的,才有可能通過(guò)正確的消隱過(guò)程得出正確的消隱結(jié)果。針對(duì)D,即消隱處 理時(shí)采用的數(shù)據(jù)結(jié)構(gòu),針對(duì)同一消隱方法往往可以采用不同的數(shù)據(jù)結(jié)構(gòu)進(jìn)行算法實(shí)現(xiàn),算 法效率有所差異,如BSP樹(shù)算法就是利用了二叉樹(shù)來(lái)分割和顯示場(chǎng)景從而加速消隱速度; 再如針對(duì)采用邊界表達(dá)模型組織的實(shí)體,可以用半邊結(jié)構(gòu)(Half-edge)組織,還可以用翼 邊結(jié)構(gòu)(Winged-edge)組織,采用何種結(jié)構(gòu)對(duì)算法效率有影響。因素I與因素D密切相關(guān)。 針對(duì)P(即分類(lèi)、排序、包含性測(cè)試、可見(jiàn)性測(cè)試)和S(即P中各基本操作過(guò)程被采用的先 后次序),它們也緊密相關(guān),共同描述了消隱算法的基本原理,從根本上影響算法正確性。針 對(duì)〇,其對(duì)輸出結(jié)果的可視化效果產(chǎn)生影響,但不影響算法正確性。故而,認(rèn)為因素I,D,P,S 是決定因素,因素〇是輔助因素,且I與D關(guān)系緊密,P與S關(guān)系緊密??蛇M(jìn)一步如下歸納:
[0012] 正確的輸入I(合適的數(shù)據(jù)結(jié)構(gòu)D)+正確的處理過(guò)程P與S=正確的輸出0
[0013] 盡管如此,現(xiàn)有的文獻(xiàn)與研究極少深入分析消隱方法的I(Input),特別是針對(duì)眾 多的物空間消隱方法,沒(méi)有深入分析輸入數(shù)據(jù)中各類(lèi)基元的特征,尤其包括用于消隱的線 是怎么樣的線、面是怎么樣的面、體是怎么樣的體,同時(shí)沒(méi)有系統(tǒng)歸納這些基元之間的拓?fù)?關(guān)系,尤其是體與體之間拓?fù)潢P(guān)系的分類(lèi)。哪些算法有能力實(shí)現(xiàn)單個(gè)凸多面體的消隱、哪些 算法能實(shí)現(xiàn)單個(gè)凹多面體的消隱、哪些算法能夠?qū)崿F(xiàn)帶洞的多面體的消隱、哪些算法能夠 實(shí)現(xiàn)多個(gè)凸多面體的消隱(包括凸體與凸體之間可能分離、可能相鄰等)、哪些算法能夠?qū)?現(xiàn)多個(gè)凹多面體的消隱(凹體與凹體之間可能分離、可能相鄰等)、哪些算法能夠?qū)崿F(xiàn)凹多 面體與凸多面體混合時(shí)的消隱處理(凸體與凹體可能分離、可能相鄰等),這些在現(xiàn)有研究 與文獻(xiàn)中都沒(méi)有給予系統(tǒng)歸納(本發(fā)明中稍后歸納);同時(shí),能夠?qū)崿F(xiàn)以上消隱處理的各個(gè) 數(shù)據(jù)模型或結(jié)構(gòu)有何特點(diǎn)、有何約束,消隱算法各自又有何區(qū)別,現(xiàn)有文獻(xiàn)或研究均沒(méi)有深 入分析。是否能夠給出一種能夠既能實(shí)現(xiàn)凸多面體消隱、又能實(shí)現(xiàn)凹多面體消隱、而且這樣 的體是集群的(體與體之間包括分離、相鄰于點(diǎn)、相鄰于邊、相鄰于面等)的統(tǒng)一消隱算法, 更是值得深入考慮。這正是本發(fā)明的研究重點(diǎn)。
[0014] 本發(fā)明為"一種顧及拓?fù)涞娜S實(shí)體集群的線消隱方法",其著眼點(diǎn)在于"顧及拓 撲關(guān)系"。故而,在給予
【發(fā)明內(nèi)容】
的詳細(xì)闡述前,首先回顧當(dāng)前三維空間數(shù)據(jù)模型的研究現(xiàn) 狀,之后分析當(dāng)前拓?fù)潢P(guān)系的研究現(xiàn)狀,然后給予幾個(gè)當(dāng)前成熟的標(biāo)準(zhǔn)和三維軟件中模型 及其拓?fù)潢P(guān)系的現(xiàn)狀分析。具體包括:
[0015] 一.當(dāng)前三維空間數(shù)據(jù)模型的研究現(xiàn)狀
[0016] 至今為止,組織三維空間數(shù)據(jù)的模型研究眾多,典型的包括三維形式化 數(shù)據(jù)模型(3DFDS, 3DFormalDataStructure)、簡(jiǎn)化空間模型(SSM,Simplified SpatialModel)、城市數(shù)據(jù)模型(UDM,UrbanDataModel)、面向?qū)ο蟮娜S數(shù)據(jù)模型 (003D,0bject-〇riented3DDataModel)。更為具體的,3DFDS提出最早,但針對(duì)點(diǎn)、線、面、 體存在諸多約束;在SSM中,基本組織單元是面,面由弧段構(gòu)成(而弧段由頂點(diǎn)封閉),面封 閉了體;在UDM中,基本組織單元仍然是面,但面直接由頂點(diǎn)序列表達(dá)(省略了弧段),面封 閉了體;在003D中,基本組織單元也是面,但約定面必須是三角面片(即三角形),每個(gè)三 角面片由三個(gè)頂點(diǎn)構(gòu)成,三角面片封閉了體。除了以上常見(jiàn)的三維空間數(shù)據(jù)模型外,還存在 許多其它數(shù)據(jù)模型:
[0017] (1)國(guó)內(nèi)外學(xué)者提出的服務(wù)于學(xué)術(shù)研究的三維空間數(shù)據(jù)模型
[0018] 典型的包括自定義的、服務(wù)于學(xué)術(shù)研究的三維空間數(shù)據(jù)模型;
[0019] (2)作為業(yè)內(nèi)或國(guó)際標(biāo)準(zhǔn)的三維空間數(shù)據(jù)模型
[0020] 典型的包括在ISO和GML3中的數(shù)據(jù)模型;
[0021] (3)應(yīng)用于商業(yè)軟件的三維空間數(shù)據(jù)模型
[0022] 典型的包括在Oracle中使用的三維空間數(shù)據(jù)模型。
[0023] 無(wú)論是以上哪種三維空間數(shù)據(jù)模型,都強(qiáng)調(diào)單個(gè)三維實(shí)體內(nèi)部各類(lèi)基元如何構(gòu) 造。換言之,即都遵循"〇維基元(如點(diǎn))_1維基元(如弧段)-2維基元(如面)-3維基元 (如體)"的層次性構(gòu)造標(biāo)準(zhǔn),只是不同數(shù)據(jù)模型中〇維、1維、2維、3維基元有所不同。
[0024] 二.當(dāng)前空間實(shí)體間拓?fù)潢P(guān)系的研究現(xiàn)狀
[0025] 描述空間實(shí)體之間拓?fù)潢P(guān)系的方法眾多,包括四交模型(4IM, 4-Intersection Model)、九交模型(9IM, 9-IntersectionModel)、基于維數(shù)擴(kuò)展的九交模型(DE9IM,Dime nsion-Extended9_IntersecitonModel)、基于區(qū)域連接理論(如RCC-8)等。其中,前三 種都是基于點(diǎn)集拓?fù)鋵W(xué)原理,應(yīng)用最為典型和廣泛。特別是基于九交模型,針對(duì)三維實(shí)體 之間拓?fù)潢P(guān)系給予分類(lèi),則面與面之間共有38種拓?fù)潢P(guān)系,體與體之間共有8種拓?fù)潢P(guān) 系,面與體之間共有19種拓?fù)潢P(guān)系。其中,體與體之間的8種拓?fù)潢P(guān)系是研究重點(diǎn),即相 離(disjoint)、相遇(meet)、包含(contain)、包含于(inside)、覆蓋(covers)、被覆蓋 (coveredBy)、相等(equal)、重疊(overlap)。
[0026] 同時(shí),在現(xiàn)實(shí)世界中要求三維空間是完全剖分的,最為典型的是三維產(chǎn)權(quán)體與三 維產(chǎn)權(quán)體之間不能發(fā)生交叉或疊置情況,其類(lèi)似于二維空間中宗地與宗地之間不能發(fā)生交 叉或疊置情況,否則會(huì)在相交的二維(三維)宗地部分產(chǎn)生權(quán)利二義性,進(jìn)而產(chǎn)生法律上沖 突,這是必須禁止的。故而,以上約束會(huì)造成:在這8種拓?fù)潢P(guān)系中,包含(contain)與包含 于(inside)、覆蓋(covers)與被覆蓋(coveredBy)、相等(equal)、重疊(overlap)是不被 允許的。于是,只有相離(disjoint)和相遇(meet)是被允許的。同時(shí),相離(disjoint) 關(guān)系中兩個(gè)三維實(shí)體之間沒(méi)有任何交集,拓?fù)潢P(guān)系的構(gòu)造與維護(hù)對(duì)象只是單個(gè)三維實(shí)體, 相對(duì)簡(jiǎn)單。此時(shí),只剩余相遇(meet)關(guān)系,在相遇(meet)關(guān)系中兩個(gè)相鄰實(shí)體之間存在共 孕的基兀。
[0027] 以上為點(diǎn)集拓?fù)鋵W(xué)理論。進(jìn)一步的,針對(duì)相交基元,如果采用相交基元的維度代替 是否相交,則以上點(diǎn)集拓?fù)鋵W(xué)理論中羅列的拓?fù)潢P(guān)系還可再次細(xì)分。針對(duì)三維實(shí)體與三維 實(shí)體之間的相遇(meet)情況,可分三大類(lèi):相遇于點(diǎn)(meetatOD)、相遇于線(meetatlD)、 相遇于面(meetat2D)。從相遇于點(diǎn)、到相遇于線、再到相遇于面,這是一個(gè)連通性逐漸增 強(qiáng)的過(guò)程。之后為闡述直觀,相遇于點(diǎn)也稱(chēng)"點(diǎn)相鄰"(或"共享點(diǎn)")、相遇于線也稱(chēng)"線相 鄰"(或"邊相鄰"、"共享邊"、"共享線")、相遇于面也稱(chēng)"面相鄰"(或共享面)。針對(duì)存在 點(diǎn)相鄰、或線相鄰、或面相鄰的三維實(shí)體集群,在現(xiàn)實(shí)世界中很常見(jiàn),典型的如三維建筑體 集群或三維宗地集群。如何針對(duì)這樣的三維實(shí)體集群實(shí)現(xiàn)消隱處理,正是本發(fā)明的研究重 點(diǎn)。
[0028] 三.若干成熟的標(biāo)準(zhǔn)和軟件中三維數(shù)據(jù)模型及其拓?fù)潢P(guān)系
[0029] (1)在OpenGL中的模型及拓?fù)?br>
[0030] 在圖形可視化標(biāo)準(zhǔn)OpenGL中,存在兩種模式繪制三維實(shí)體,一種是OpenGL的實(shí)用 工具庫(kù)(GLUT)直接提供了若干繪制三維實(shí)體的API,如glutSolidSphere、glutSolid等; 另一種是采用二維圖元的集合來(lái)模擬三維實(shí)體,典型的包括由三角形集(GL_TRIANGLES)、 三角形帶(GL_TRIANGLE_STRIP)、三角形扇(GL_TRIANGLE_FAN)、四邊形集(GL_QUADS)所模 擬的三維實(shí)體,雖然如此模擬的結(jié)果貼上紋理等信息后可以非常逼真地模擬三維實(shí)體,但 從拓?fù)渖喜荒軌虮WC所模擬的三維實(shí)體的有效性。
[0031] (2)在ESRIArcScene3D中的模型及拓?fù)?br>
[0032] 米用MultiPatch要素類(lèi)型來(lái)組織三維模型。MultiPatch在ESRIArcScene 中如下定義:描述三維表面的元素集合,最常見(jiàn)的包括;三角扇(TriangleFan)、三角帶 (TriangleStrip)、環(huán)組(Rings)??梢?jiàn),采用MultiPatch通過(guò)表面建模方式來(lái)模擬三維實(shí) 體與OpenGL中情況類(lèi)似,同樣沒(méi)有三維實(shí)體的概念,沒(méi)有實(shí)體間拓?fù)潢P(guān)系的明確定義,不 能保證所模擬的三維實(shí)體的有效性。同時(shí),值得指出的是,ESRIArcScene3D的可視化機(jī)制 基于OpenGL(詳見(jiàn)ArcGISlOHelp)。
[0033] (3)GoogleSketchup中三維數(shù)據(jù)模型及拓?fù)?br>
[0034] 在GoogleSketchup中,組織三維數(shù)據(jù)的模型基元包括點(diǎn)(Point)、邊(Edge)、使 用邊(EdgeUse)、面片(Face)、組(Group)。值得指出的是,這里的"使用邊(EdgeUse)"描 述了"邊(Edge)"的使用情況,其類(lèi)似于三維組合圖中的"投射(dart)",其能夠組織存在 分離、點(diǎn)相鄰、線相鄰、面相鄰的三維實(shí)體集群。然而,在GoogleSketchup中,并沒(méi)有真 正的三維實(shí)體(3DSolid)概念,其用組(Group)來(lái)模擬三維實(shí)體(3DSolid),換言之,組 (Group)可以是邊(Edge)的集合,也可以是面(Face)的集合,故而作為面片(Face)集合的 組(Group)不能夠保證其模擬的三維實(shí)體一定是有效的三維實(shí)體,可能存在懸掛面/邊、孤 立面/邊等奇異情況。
[0035] 同時(shí),在GoogleSketchup中,針對(duì)三維實(shí)體的可視化框架提供了透視投影 (PerspectiveProjection)和平行投影(ParallelProjection)兩種模式,其中透視投影 還可以選擇單點(diǎn)透視(One-PointPerspective)或兩點(diǎn)透視(Two-PointPerspective)。在 以上模式中,在GoogleSketchup中可以實(shí)現(xiàn)三維實(shí)體的消隱處理(Tools/View/Toolbar/ FaceStyle/HiddenLine)。盡管如此,GoogleSketchup的可視化機(jī)制同樣基于OpenGL。 進(jìn)一步的,由于OpenGL中實(shí)現(xiàn)消隱是基于像空間的;所以GoogleSketchup中無(wú)法針對(duì)隱 藏線單獨(dú)設(shè)置可視化樣式。
[0036] (4)CGAL(計(jì)算幾何算法庫(kù))中的模型及拓?fù)?br>
[0037] CGAL全稱(chēng)"計(jì)算幾何算法庫(kù)(ComputationalGeometryAlgorithmLibrary) "。 在CGAL中,最為有名的是半邊(Half-edge)和翼邊(Winged-edge)數(shù)據(jù)結(jié)構(gòu)。
[0038] 針對(duì)半邊(Half-edge)數(shù)據(jù)結(jié)構(gòu)(Bronnimann,H. (2001) ?Designing andImplementingaGeneralPurposeHalf-edgeDataStructure.Algorithm Engineering,SpringerBerlinHeidelberg,pp. 51-60),其可以組織三維實(shí)體,由于半邊 結(jié)構(gòu)的核心是半邊,因此其構(gòu)造層次性為"頂點(diǎn)-半邊-面-體"。然而,半邊結(jié)構(gòu)只適用 于組織有向二維流形(〇riented2-manifold)類(lèi)型的實(shí)體,包括二維空間中的多邊形實(shí)體 集合、三維空間中單個(gè)三維實(shí)體、三維空間中彼此分離(disjoint)或只存在點(diǎn)相鄰(meet atOD)的三維實(shí)體集群。之所以如此,是由每條半邊(Half-edge)只能相接于兩個(gè)面片的 特征所決定(Armstrong,M.A. (1979).BasicTopology[M],London:McGraw-Hill.),即這 兩個(gè)相接面片的可見(jiàn)性共同決定了該半邊的可見(jiàn)性。換言之,半邊結(jié)構(gòu)不能組織三維流形 (3-manifold)〇
[0039] 翼邊(Winged-edge)數(shù)據(jù)結(jié)構(gòu)(Baumgart,B.G. (1975) ?Winged-edgePolyhedron RepresentationforComputerVision.NationalComputerConference, 7p)同樣會(huì)泛夠組 織二維流形(2-manifold)類(lèi)型的實(shí)體,但不能組織三維流形(3-manifold)類(lèi)型的實(shí)體,情 況與半邊相似。
[0040] 相對(duì)的,作為半邊(Half-edge)結(jié)構(gòu)向高維空間的拓展,三維組合圖(3D CombinatorialMap)結(jié)構(gòu)可以組織三維流形(3D-manifold)。三維流形是指獨(dú)立的 d-cells通過(guò)(d-1)-cells以粘貼方式構(gòu)成的對(duì)象,該結(jié)構(gòu)中的核心空間單元稱(chēng)為"投射 (dart) ",類(lèi)似于"半邊(Half-edge)"(CGALv4. 0,http:www.cgal.org;Brisson, (1990). Representationofd-DimensionalGeometricObjects.Ph.DThesis) 〇 針對(duì)三維空間中 的相遇(meet)情況,三維組合圖可以組織存在點(diǎn)相鄰(meetatOD)、線相鄰(meetatlD)、 面相鄰(meetat2D)關(guān)系的三維實(shí)體集群。盡管如此,根據(jù)筆者目前文獻(xiàn)搜索,至今尚未有 文獻(xiàn)明確指出通過(guò)三維組合圖組織的三維實(shí)體如何實(shí)現(xiàn)消隱,典型的包括相接于多個(gè)面片 的投射(dart)如何根據(jù)其多個(gè)(>2)相接面片的可見(jiàn)性決定該投射(dart)的可見(jiàn)性。
[0041] (5)IS019l〇7'SpatialSchema',GML3,CityGML中的模型及拓?fù)?br>
[0042] 值得注意的是,針對(duì)點(diǎn)相鄰、線相鄰、面相鄰,它們?cè)诓煌墨I(xiàn)與標(biāo)準(zhǔn)中有著不同 表達(dá),如在IS019107'SpatialSchema'、GML3、CityGML中的表達(dá)。其中,IS019107'Spatial Schema'中是一個(gè)抽象規(guī)范,其拓?fù)潢P(guān)系也只是抽象定義;而OGC中的GML3是作為抽象的 IS019107'SpatialSchema'的具體實(shí)現(xiàn);而CityGML的空間特征由GML3的幾何模型對(duì)象 表達(dá),可見(jiàn)CityGML同樣基于IS019107'SpatialSchema',事實(shí)上,CityGML只用了GML3 幾何模型的一部分。在GML3和CityGML中,組合實(shí)體可細(xì)分為聚合(Aggregate)、復(fù)形 (Complex)、復(fù)合(Composite)三類(lèi),三者之間并不互斥,而是繼承關(guān)系。更為具體的,
[0043] (i)聚合(Aggregate)
[0044] 針對(duì)聚合(Aggregate),組件之間的空間關(guān)系不受約束,它們可以是分離、疊置、接 觸或連接。特別的,在三維空間中稱(chēng)為MultiSolid。由于MultiSolid中體與體可以疊置, 故而不是研究重點(diǎn);
[0045] (ii)復(fù)形(Complex)
[0046] 與聚合相比,復(fù)形(Complex)在拓?fù)渖鲜艿郊s束,它的部件不能疊置,但可以分離 或者沿著共同邊界接觸。特別的,在三維空間中,體與體之間不能疊置,但可以分離、可以共 享面/線/點(diǎn)。換言之,包含了分離、點(diǎn)相鄰、線相鄰、面相鄰這四種情況。
[0047] (iii)復(fù)合(Composite)
[0048] 復(fù)合(Composite)是一種特殊的復(fù)形。它包含的元素必須是同一維度的。其組 件的內(nèi)部可以分離,但必須沿著共同邊界拓?fù)溥B接。特別的,在三維空間中稱(chēng)為復(fù)合實(shí)體 (CompositeSolid)。在復(fù)合實(shí)體(CompositeSolid)中,體與體之間必須沿著公共面/邊/ 點(diǎn)拓?fù)溥B接。換言之,包含了點(diǎn)相鄰、線相鄰、面相鄰這三種情況。
[0049] (6)在OracleSpatial中的模型及拓?fù)?br>
[0050] 在商業(yè)軟件Oracle中,OracleSpatial模塊用于組織二維與三維空間數(shù)據(jù)。其 中,在組織三維實(shí)體數(shù)據(jù)時(shí),實(shí)體間拓?fù)潢P(guān)系同樣極大地參考了GML/IS0規(guī)范,但具體分 類(lèi)上有所區(qū)別:在Oracle中,三維實(shí)體可分為復(fù)合實(shí)體(CompositeSolid)與實(shí)體集合 (Collection)兩類(lèi)。
[0051] 其中,復(fù)合實(shí)體(CompositeSolids)是簡(jiǎn)單實(shí)體(SimpleSolid)的組合,也稱(chēng)組 合實(shí)體(CombinedSolid)。復(fù)合實(shí)體(CompositeSolids)通過(guò)簡(jiǎn)單實(shí)體彼此共享拓?fù)浠?元聚合而成,這里的共享拓?fù)浠荒苁?維的面,因?yàn)椋涸诙x上,復(fù)合實(shí)體(Composite Solids)通過(guò)去除共享拓?fù)浠仨毮軌蜣D(zhuǎn)換為簡(jiǎn)單實(shí)體(SimpleSolid),也即復(fù)合實(shí)體 是連通的。換言之,只包含了面相鄰該單一情況。構(gòu)造復(fù)合實(shí)體的簡(jiǎn)單實(shí)體可以是凸多面 體,也可以是凹多面體。
[0052] 而針對(duì)實(shí)體集合(Collection),可分為同質(zhì)實(shí)體集合(HomogeneousCollection) 與異質(zhì)實(shí)體集合(HeterogeneousCollection)。同質(zhì)實(shí)體集合(HomogeneousCollection) 由相同類(lèi)型的實(shí)體聚集而成,包括多點(diǎn)、多線、多面、多實(shí)體,同質(zhì)實(shí)體集合的構(gòu)造元素類(lèi)型 從名稱(chēng)上便可辨別。異質(zhì)實(shí)體集合(HeterogeneousCollection)是由不同類(lèi)型的實(shí)體混 合而成。如上所述,針對(duì)在三維空間中的同質(zhì)實(shí)體集合,稱(chēng)為多實(shí)體。多實(shí)體與以上提及的 復(fù)合實(shí)體(CompositeSolids)有所區(qū)別,因此多實(shí)體增加了分離性的判別,也即多實(shí)體不 僅禁止體與體之間相交,而且禁止用于封閉體的面與面之間相交。故而,在多實(shí)體中,實(shí)體 與實(shí)體之間的共享基元只允許是1維線或〇維點(diǎn)。換言之,只包含了分離、點(diǎn)相鄰、線相鄰 這三種情況。
[0053] 由上可見(jiàn),針對(duì)三維實(shí)體之間拓?fù)潢P(guān)系,無(wú)論是采用聚合、復(fù)形、復(fù)合的分類(lèi)體系, 還是采用復(fù)合實(shí)體、實(shí)體集合的分類(lèi)體系,本質(zhì)上都?xì)w結(jié)于如何處理相離(disjoint)、點(diǎn)相 鄰(meetatOD)、線相鄰(meetatlD)、面相鄰(meetat2D)這四種最基本拓?fù)漕?lèi)型。
[0054] 以上分析了三維實(shí)體如何組織以及實(shí)體間拓?fù)潢P(guān)系如何分類(lèi),以下重點(diǎn)針對(duì)"現(xiàn) 有的事實(shí)上涉及到各類(lèi)拓?fù)潢P(guān)系的實(shí)體消隱研究"給予深入分析與歸類(lèi)。具體包括:
[0055] (1)涉及單個(gè)凸多面體的消隱研究
[0056] 如上所述,Roberts算法于1963年提出,它是已知最早提出的消隱算法,它是一種 線消隱算法,但其處理對(duì)象只局限于凸多面體對(duì)象、
[0057] (2)涉及單個(gè)凹多面體的消隱研究
[0058] 涉及單個(gè)凹多面體消隱處理的研究包括(Rappaport,D. (1986) ?ALinear AlgorithmforEliminatingHidden-linesfromaPolygonalCylinder. TheVisualComputer,no. 2,pp. 44-53 ;Stroud,I.A. ,Nagy,H. (2011).TheCAD InterfaceandGraphicalOutput[M].SolidModellingandCADSystems,Springer London,pp.339-365. ;Kettner,L. ,ffelzl,E. (1997).ContourEdgeAnalysisfor PolyhedronProjections[M].SpringerBerlinHeidelberg;張佩翔?(1989)?凹多面體表 面的圖示規(guī)律及在消隱處理中的應(yīng)用.吉林化工學(xué)院學(xué)報(bào),6(3) :60-67;卓守鵬.(1982). 利用棱線的圖示規(guī)律處理凹多面體的隱藏線[J].浙江工業(yè)大學(xué)學(xué)報(bào),(3) :9-24;洪炳镕, 張棟,范義文.(1980).多面體有效隱藏相關(guān)面的自動(dòng)判定算法[J].哈爾濱工業(yè)大學(xué)學(xué) 報(bào),(6) :40-45;張棟.(1988).關(guān)于計(jì)算隱線消除算法的研究.碩士學(xué)位論文,哈爾濱工 業(yè)大學(xué);洪炳镕,張棟.(1989).基于相關(guān)遮蔽面的多面體隱線消除的快速算法[J].哈爾 濱工業(yè)大學(xué)學(xué)報(bào),(6):25-31,42;洪炳镕,張棟.(1989). -種基于相關(guān)遮蔽面的多面體隱 線消除算法[J].計(jì)算機(jī)學(xué)報(bào),(9) :717-720.)。值得指出的是,所謂被別的多面體遮蔽,實(shí) 際上即被別的多面體的前向面遮蔽。
[0059] (3)涉及多個(gè)凸多面體的消隱研究
[0060] 當(dāng)前消隱研究中,有的消隱對(duì)象涉及多個(gè)凸多面體。這些凸多面體之間事 實(shí)上存在多種拓?fù)潢P(guān)系,其中以分離關(guān)系居多,典型的包括(deBerg,M.,Gray,C. (2007).ComputingtheVisibilityMapofFatObjects.SpringerBerlin Heidelberg,pp. 251-262;毛峽,沈巍,趙興圓.(2009).基于點(diǎn)線關(guān)系的透視圖消隱算法 [J].北京航空航天大學(xué)學(xué)報(bào),35(8) :925-928, 937 ;高升宇.(2002).三維空間多面體消隱 問(wèn)題中可見(jiàn)子段的求解與歸并[J].渭南師范學(xué)院學(xué)報(bào),17(5) :64-66)。
[0061] 針對(duì)三維柱狀圖的消隱算法眾多,事實(shí)上每個(gè)柱狀實(shí)體都是凸多面體,而這些柱 狀實(shí)體之間基本呈現(xiàn)分離、面相鄰、邊相鄰這三類(lèi)關(guān)系。
[0062] 其它研究還包括三維實(shí)體相互貫穿情況(即相交情況)下的消隱方法(曾接 賢,高滿(mǎn)屯,李建軍.(1998). -種復(fù)雜形體消隱的新方法[J].南昌航空工業(yè)學(xué)院學(xué) 報(bào),1:22-27)。事實(shí)上,這種貫穿(相交)情況是不被允許的。
[0063] (4)涉及多個(gè)凹多面體的消隱研究
[0064] 還有的消隱對(duì)象涉及多個(gè)凹多面體。事實(shí)上,這些凹多面體之間存在多種拓?fù)潢P(guān) 系,其中以分離、面相鄰這兩類(lèi)居多。
[0065] 特別的,朱仁芝等闡述了針對(duì)帶洞的三維實(shí)體如何消隱處理,但研究對(duì)象只是個(gè) 別凹體對(duì)象,并不是針對(duì)大量實(shí)體集群對(duì)象,并不具備普遍適用性(朱仁芝,太美花,鄧 益民.(1996).凹體輪廓線算法及實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),23(2) :58-60;朱仁芝,江涌, 陶濤,劉磊.(1998).利用3維重建技術(shù)進(jìn)行線框模型消隱的算法[J].計(jì)算機(jī)工程與應(yīng) 用,5:19-20;朱仁芝,太美花,鄧益民.(1992).三維形體消隱和相貫線的一種新算法[J]. 中國(guó)科學(xué)技術(shù)大學(xué)學(xué)報(bào),22 (3) : 295-302 ;朱仁芝,劉磊,江涌,陶濤,盧繼軍.(1999).由 表面模型表達(dá)的三維形體的一種消隱算法[J].計(jì)算機(jī)工程與設(shè)計(jì),20(1) :56-60.)
[0066] (5)涉及凸多面體和凹多面體混合集合的消隱處理
[0067] 涉及凸多面體和凹多面體混合集合的消隱處理,具體包括(袁超.(2006).多個(gè)凹 凸形多面體的深度消隱算法研究[J].四川理工學(xué)院學(xué)報(bào)(自然科學(xué)版),19(4) : 104-107 ; 袁超.(2006).多個(gè)凹凸形多面體的深度優(yōu)先消隱算法研究[J].計(jì)算機(jī)工程與應(yīng) 用,28 (9) : 97-99, 102.)。這些凹體與凸體之間可能存在多種拓?fù)潢P(guān)系,往往包括分離、邊相 鄰、面相鄰等關(guān)系。
[0068] 可見(jiàn),現(xiàn)有三維實(shí)體集合的眾多消隱方法,對(duì)集合中每個(gè)三維實(shí)體的形態(tài)有所局 限(即大多研究都要求三維實(shí)體是不帶穿洞的體,只有少量研究允許體有穿洞),同時(shí)集合 中體與體之間的拓?fù)浠绾螌?shí)現(xiàn)消隱的研究并不系統(tǒng)與全面,往往只允許體與體之間分 離、點(diǎn)相鄰、線相鄰、面相鄰中的一種或幾種,并沒(méi)有給予以上關(guān)系并存時(shí)三維實(shí)體集群如 何實(shí)現(xiàn)消隱的完善方案。
【發(fā)明內(nèi)容】
[0069] 為克服現(xiàn)有技術(shù)缺陷,本發(fā)明提供一種顧及拓?fù)涞娜S實(shí)體群的線消隱方法,該 線消隱方法的著眼點(diǎn)在于"顧及拓?fù)?。
[0070] 本發(fā)明的技術(shù)方案提供一種顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法,所述 三維地理空間實(shí)體群的三維空間數(shù)據(jù)模型包括節(jié)點(diǎn)、邊、環(huán)、平面片和體這5類(lèi)基元,其中, 點(diǎn)是〇維基元,邊與環(huán)是1維基元,平面片是2維基元,體是3維基元;
[0071] 預(yù)設(shè)的規(guī)則如下,
[0072] 規(guī)則1,待消隱的每個(gè)實(shí)體必須是剖分完全的;
[0073] 規(guī)則2,當(dāng)某體與另一個(gè)體存在的公共元素為2維時(shí),稱(chēng)只共面;
[0074] 規(guī)則3,當(dāng)某體與另一個(gè)體存在的公共元素為1維時(shí),稱(chēng)只共邊;
[0075] 規(guī)則4,當(dāng)某體與另一個(gè)體存在的公共元素為0維時(shí),稱(chēng)只共點(diǎn);
[0076] 規(guī)則5,當(dāng)某體與另兩個(gè)體存在的公共元素分別為2維時(shí),稱(chēng)共面面,按照只共面 的情況處理;
[0077] 規(guī)則6,當(dāng)某體與另兩個(gè)體存在的公共元素分別為1維與2維時(shí),稱(chēng)共邊面,按照只 共面的情況處理;
[0078] 規(guī)則7,當(dāng)某體與另多個(gè)體存在的公共元素分別為1維時(shí),稱(chēng)共邊邊,按照只共邊 的情況處理;
[0079] 規(guī)則8,當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與2維時(shí),稱(chēng)共點(diǎn)面,按照只 共面的情況處理;
[0080] 規(guī)則9,當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與1維時(shí),稱(chēng)共點(diǎn)邊,按照只 共邊的情況處理;
[0081] 規(guī)則10,當(dāng)某體與另多個(gè)體存在的公共元素分別為0維時(shí),稱(chēng)共點(diǎn)點(diǎn),按照只共點(diǎn) 的情況處理;
[0082] 基于以上預(yù)設(shè)規(guī)則,進(jìn)行消隱過(guò)程,包括以下步驟,
[0083] 步驟1,顧及拓?fù)潢P(guān)系的消隱預(yù)處理,包括進(jìn)行平面片的分類(lèi)和邊的分類(lèi),
[0084] 進(jìn)行平面片的分類(lèi)如下,
[0085] (i)針對(duì)體與體之間存在只共面情況時(shí),設(shè)定公共面為不可見(jiàn)面;
[0086] (ii)針對(duì)體與體之間存在只共邊情況時(shí),本步驟不做處理;
[0087] (iii)針對(duì)體與體之間存在只共點(diǎn)情況時(shí),本步驟不做處理;
[0088] 進(jìn)行邊的分類(lèi)如下,
[0089] (i)針對(duì)體與體之間存在只共面情況時(shí),公共面包含的邊暫設(shè)定為可見(jiàn)面;
[0090] (ii)針對(duì)體與體之間存在只共邊情況時(shí),暫設(shè)定公共邊為可見(jiàn)邊;
[0091] (iii)針對(duì)體與體之間存在只共點(diǎn)情況時(shí),本步驟不做處理;
[0092] 步驟2,擴(kuò)展的第一類(lèi)線消隱處理,包括子步驟如下,
[0093] 步驟2. 1,進(jìn)行后向面剔除,包括找到法向量與視線方向一致的平面片,這些平面 片稱(chēng)后向面,后向面設(shè)定為不可見(jiàn)面,不參與后續(xù)步驟3;找到法向量與視線方向不一致的 平面片,這些平面片稱(chēng)前向面,前向面設(shè)定為可見(jiàn)面;
[0094] 步驟2. 2,進(jìn)行平面片的分類(lèi)如下,
[0095] (i)將通過(guò)后向面剔除找到的所有不可見(jiàn)面,加上步驟1所得所有不可見(jiàn)面,取和 得到完整的不可見(jiàn)面簇;
[0096] (ii)根據(jù)通過(guò)后向面剔除找到的可見(jiàn)面得到完整的可見(jiàn)面簇。
[0097] 步驟2. 3,針對(duì)僅相接于2個(gè)面的邊,進(jìn)行邊的可見(jiàn)性判定如下,
[0098] (i)相接于2個(gè)不可見(jiàn)面的邊,設(shè)定為不可見(jiàn)邊;
[0099] (ii)相接于1個(gè)可見(jiàn)面和1個(gè)不可見(jiàn)面的邊,暫設(shè)定為可見(jiàn)邊;
[0100] (iii)相接于2個(gè)可見(jiàn)面的邊,暫設(shè)定為可見(jiàn)邊;
[0101] 步驟2. 4,進(jìn)行邊的分類(lèi),包括將步驟2. 3得到的所有可見(jiàn)邊,加上步驟1得到的所 有可見(jiàn)邊,取和得到完整的可見(jiàn)邊簇,步驟2. 3得到的所有不可見(jiàn)邊為完整的不可見(jiàn)邊簇;
[0102] 步驟3,擴(kuò)展的第二類(lèi)線消隱處理,包括子步驟如下,
[0103] 步驟3. 1,邊的細(xì)分,包括以步驟2. 4所得完整可見(jiàn)邊簇中的每條邊為潛在可見(jiàn) 邊,判斷潛在可見(jiàn)邊是否被可見(jiàn)面遮擋,當(dāng)被可見(jiàn)面部分遮擋時(shí),對(duì)此邊根據(jù)與平面片的相 交情況進(jìn)進(jìn)行裁切,裁切后的最終每條邊稱(chēng)為最簡(jiǎn)邊;
[0104] 步驟3. 2,最簡(jiǎn)邊的可見(jiàn)性判定,包括采用最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性來(lái)代表整條最簡(jiǎn) 邊的可見(jiàn)性。
[0105] 而且,步驟3. 2,中判斷最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性如下,
[0106] 最簡(jiǎn)邊的中點(diǎn)為三維空間中的點(diǎn),沿著視線方向所在的空間直線,三維空間中的 點(diǎn)在平面片所在超平面片中一定有一個(gè)投影點(diǎn);此時(shí),投影點(diǎn)和平面片位于同一個(gè)超平面 中,通過(guò)判斷投影點(diǎn)是否位于二維多邊形內(nèi),得到最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性。
[0107] 而且,根據(jù)消隱過(guò)程所得結(jié)果,最終可視化效果中可見(jiàn)線的樣式和不可見(jiàn)線的樣 式都采用自定義設(shè)置。
[0108] 與現(xiàn)有三維實(shí)體集合線消隱的相關(guān)技術(shù)相比,本發(fā)明能夠?qū)崿F(xiàn)三維實(shí)體集群的線 消隱處理,其中,每個(gè)三維實(shí)體既可以是凸的、也可以是凹的,每個(gè)三維實(shí)體既可以帶穿洞、 也可以不帶穿洞,同時(shí)這些三維實(shí)體之間的拓?fù)潢P(guān)系可以是分離的、點(diǎn)相鄰、線相鄰、面相 鄰并存(也即該三維實(shí)體集群可以是二維流形或三維流形的形式)。此外,最終可視化效果 中線段的樣式(包括可見(jiàn)線的樣式、不可見(jiàn)線的樣式)都可以自定義設(shè)置,對(duì)實(shí)體的各種情 況都能準(zhǔn)確進(jìn)行處理。本發(fā)明提出的線消隱方法,主要可應(yīng)用于三維產(chǎn)權(quán)證設(shè)計(jì)中的圖形 可視化部分。三維產(chǎn)權(quán)證是地籍管理領(lǐng)域中針對(duì)三維產(chǎn)權(quán)體的產(chǎn)權(quán)證書(shū),三維產(chǎn)權(quán)證的設(shè) 計(jì)是實(shí)現(xiàn)三維地籍的重要環(huán)節(jié),而三維地籍的建設(shè)是地籍管理領(lǐng)域至關(guān)重要。針對(duì)三維產(chǎn) 權(quán)證,由于要通過(guò)二維圖面來(lái)展示三維宗地的立體形態(tài),故而通過(guò)消隱處理增強(qiáng)真實(shí)感尤 為關(guān)鍵。本發(fā)明隸屬于三維地籍建設(shè)的相關(guān)項(xiàng)目(名稱(chēng)為"土地空間使用權(quán)管理關(guān)鍵技術(shù) 及規(guī)范研究"),涉及本
【發(fā)明內(nèi)容】
的三維產(chǎn)權(quán)證設(shè)計(jì)是該項(xiàng)目的一部分。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0109] 圖1為本發(fā)明實(shí)施例采用的三維空間數(shù)據(jù)模型中各類(lèi)基元示意圖,其中圖1 (a)為 頂點(diǎn)示意圖,圖1(b)為邊示意圖,圖1(c)為平面片示意圖,附圖1(d)為體示意圖。
[0110] 圖2為本發(fā)明實(shí)施例三維空間直角坐標(biāo)系的解析原理示意圖。
[0111] 圖3為本發(fā)明實(shí)施例規(guī)則1示意圖,其中圖3 (a)為完全剖分前示意圖,圖3(b)為 完全剖分后不意圖。
[0112] 圖4為本發(fā)明實(shí)施例規(guī)則2-4示意圖,其中圖4 (a)為規(guī)則2示意圖,圖4(b)為規(guī) 則3示意圖,圖4(c)為規(guī)則4示意圖。
[0113] 圖5為本發(fā)明實(shí)施例規(guī)則5-10示意圖,其中圖5 (a)為規(guī)則5示意圖,圖5(b)為規(guī) 貝1J6示意圖,圖5(c)為規(guī)則7示意圖,圖5(d)為規(guī)則8示意圖,圖5(e)為規(guī)則9示意圖, 圖5(f)為規(guī)則10示意圖。
[0114] 圖6為本發(fā)明實(shí)施例規(guī)則2-10的解釋示例示意圖,其中圖6(a)為解釋示例的體 信息示意圖,圖6(b)為解釋示例的頂點(diǎn)信息示意圖。
[0115] 圖7為本發(fā)明實(shí)施例典型案例的消隱過(guò)程示意圖,其中圖7(a)為輸入數(shù)據(jù)(線框 模式)示意圖,圖7(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖7(c)為第一類(lèi)隱藏線(采用虛 線表達(dá))示意圖,圖7(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
[0116] 圖8為本發(fā)明實(shí)施例應(yīng)用于卓越世紀(jì)中心的消隱過(guò)程示意圖,其中圖8 (a)為輸入 數(shù)據(jù)(線框模式)示意圖,圖8(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖8(c)為第一類(lèi)隱藏 線(采用虛線表達(dá))示意圖,圖8(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
[0117] 圖9為本發(fā)明實(shí)施例應(yīng)用于西部通道的消隱過(guò)程示意圖,其中圖9(a)為輸入數(shù) 據(jù)(線框模式)示意圖,圖9(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖9(c)為放大后局部圖 (采用線框模式)示意圖,圖9(d)為局部圖完全消隱后的輸出結(jié)果示意圖,圖9(e)為局部 圖的第一類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖9(f)為局部圖的第二類(lèi)隱藏線(采用虛線 表達(dá))示意圖。
[0118] 圖10為本發(fā)明實(shí)施例應(yīng)用于供電局的消隱過(guò)程示意圖,其中圖10(a)為輸入數(shù)據(jù) (線框模式)示意圖,圖10(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖10(c)為第一類(lèi)隱藏線 (采用虛線表達(dá))示意圖,圖10(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
[0119] 圖11為本發(fā)明實(shí)施例應(yīng)用于華潤(rùn)萬(wàn)象城的消隱過(guò)程示意圖,其中圖11 (a)為輸入 數(shù)據(jù)(線框模式)示意圖,圖11 (b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖11 (c)為第一類(lèi)隱 藏線(采用虛線表達(dá))示意圖,圖11 (d)為第一類(lèi)隱藏線(采用點(diǎn)點(diǎn)表達(dá))示意圖,圖11 (e) 為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖11 (f)為第二類(lèi)隱藏線(采用點(diǎn)線表達(dá))示 意圖。
[0120] 圖12為本發(fā)明實(shí)施例應(yīng)用于會(huì)展中心的消隱過(guò)程示意圖,其中圖12(a)為輸入數(shù) 據(jù)(線框模式)示意圖,圖12(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖12(c)為第一類(lèi)隱藏 線(采用虛線表達(dá))示意圖,圖12(d)為第一類(lèi)隱藏線(采用點(diǎn)點(diǎn)表達(dá))示意圖,圖12(e) 為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖12(f)為第二類(lèi)隱藏線(采用點(diǎn)線表達(dá))示 意圖。
[0121] 圖13為本發(fā)明實(shí)施例應(yīng)用于瀚盛花園B1建筑體的消隱過(guò)程示意圖,其中圖13(a) 為輸入數(shù)據(jù)(線框模式)示意圖,圖13(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖13(c)為第 一類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖13(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
[0122] 圖14為本發(fā)明實(shí)施例應(yīng)用于瀚盛花園B3建筑體的消隱過(guò)程示意圖,其中圖14 (a) 為輸入數(shù)據(jù)(線框模式)示意圖,圖14(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖14(c)為第 一類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖14(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
[0123] 圖15為本發(fā)明實(shí)施例應(yīng)用于瀚盛花園B4建筑體的消隱過(guò)程示意圖,其中圖15(a) 為輸入數(shù)據(jù)(線框模式)示意圖,圖15(b)為完全消隱后的輸出數(shù)據(jù)示意圖,圖15(c)為第 一類(lèi)隱藏線(采用虛線表達(dá))示意圖,圖15(d)為第二類(lèi)隱藏線(采用虛線表達(dá))示意圖。
【具體實(shí)施方式】
[0124] 本發(fā)明提供的方法可基于計(jì)算機(jī)技術(shù)實(shí)現(xiàn)自動(dòng)運(yùn)行。以下結(jié)合附圖和實(shí)施例詳細(xì) 說(shuō)明本發(fā)明技術(shù)方案。
[0125] 本發(fā)明的研究?jī)?nèi)容屬于完全基于物空間的消隱方法。本發(fā)明提出的消隱方法,是 在傳統(tǒng)線消隱方法的基礎(chǔ)上發(fā)展而來(lái)。但本發(fā)明提出的消隱方法又不同于傳統(tǒng)線消隱方 法,它既能實(shí)現(xiàn)二維流形(2-manifold)類(lèi)型、又能實(shí)現(xiàn)三維流形(3-manifold)類(lèi)型的三維 實(shí)體集群的消隱處理。之所以如此,是因?yàn)楸景l(fā)明考慮了:
[0126] (1)單個(gè)三維實(shí)體形體的特殊性
[0127] 在本發(fā)明中,作為消隱處理對(duì)象的三維實(shí)體可以是凸的,也可以是凹的,還可以是 帶"穿洞(through-hole)"的。同時(shí),這里的"穿洞"可以是單個(gè)三維實(shí)體先天具備的,也可 以是后天由于體與體之間疊置后的縫隙發(fā)展而來(lái)。針對(duì)這些情況,現(xiàn)有文獻(xiàn)與研究幾乎不 曾考慮。
[0128] (2)三維實(shí)體之間拓?fù)潢P(guān)系的特殊性
[0129] 在本發(fā)明中,作為消隱處理對(duì)象的三維實(shí)體之間可以是相離、點(diǎn)相鄰、線相鄰、面 相鄰?,F(xiàn)有的文獻(xiàn)與研究或者重點(diǎn)研究單個(gè)三維實(shí)體的消隱,或者關(guān)注處于相離關(guān)系的三 維實(shí)體集合的消隱,或者涉及存在分離、面相鄰的三維實(shí)體集合的消隱,但沒(méi)有針對(duì)同時(shí)存 在分離、點(diǎn)相鄰、線相鄰、面相鄰關(guān)系的三維實(shí)體集合如何消隱提出解決方案。
[0130] 本發(fā)明是具備重要意義,因?yàn)樵谌S建筑體集群、三維產(chǎn)權(quán)體集群、三維樓棟集群 中,針對(duì)建筑體與建筑體之間、產(chǎn)權(quán)體與產(chǎn)權(quán)體之間、房屋與房屋之間,存在著大量的分離、 點(diǎn)相鄰、線相鄰、面相鄰關(guān)系,如何實(shí)現(xiàn)這些三維實(shí)體集群實(shí)際案例的消隱處理,對(duì)于地籍 管理以及房產(chǎn)可視化都具有重大價(jià)值。
[0131] 本發(fā)明實(shí)現(xiàn)消隱采用的三維空間數(shù)據(jù)模型參見(jiàn)附圖1。該模型包括節(jié)點(diǎn)、邊、 環(huán)、平面片、體這5類(lèi)基元。其中,點(diǎn)是0維基元,邊與環(huán)是1維基元,平面片是2維基 元,體是3維基元,該模型同樣遵循"0維基元-1維基元-2維基元-3維基元"的層次 性構(gòu)造原則,即"點(diǎn)-邊-環(huán)-平面片-體"的構(gòu)造層次性。該模型中,高維基元使用針 對(duì)低維基元的引用。該模型是在"面向地籍的三維空間數(shù)據(jù)模型"的基礎(chǔ)上發(fā)展而來(lái), 詳見(jiàn)(郭仁忠,應(yīng)申,李霖.(2012).基于面片集合的三維地籍產(chǎn)權(quán)體的拓?fù)渥詣?dòng)構(gòu)建 [J] ?測(cè)繪學(xué)報(bào),41 (4) : 620-626 ;Guo,R.Z.,Yu,C.B.,Zhao,Z.G.,Li,L.,Ying,S. (2012) ? LogicalDesignandImplementationoftheDataModelfor3DCadastreinChina. 3rd InternationalWorkshopon3DCadastres:DevelopmentsandPractices, 25_260ctober, Shenzhen,China,pp. 113-136.)。具體如下:
[0132] (1)節(jié)點(diǎn)(Point)
[0133] 節(jié)點(diǎn)是嵌入在三維空間中的一類(lèi)0維基元,它記錄了X,Y,Z坐標(biāo)。
[0134] 節(jié)點(diǎn)在數(shù)據(jù)庫(kù)中一般也稱(chēng)Node。節(jié)點(diǎn)在歐拉公式中一般記為Vertex。
[0135] (2)邊(Edge)
[0136] 邊是嵌入在三維空間中的一類(lèi)1維基元,它是由起始節(jié)點(diǎn)和終止節(jié)點(diǎn)封閉的一條 有向直線段。邊的物理方向由起始節(jié)點(diǎn)指向終止節(jié)點(diǎn)。邊的起始節(jié)點(diǎn)與終止節(jié)點(diǎn)不能夠是 同一個(gè)點(diǎn)。
[0137] 邊通常也記為弧段(Arc)或段(Segment)。邊同胚于1維流形。
[0138] (3)環(huán)(Ring)
[0139] 環(huán)是嵌入三維空間中的一類(lèi)1維基元,它由至少3條邊封閉而成,這些邊形成一個(gè) 集合,稱(chēng)為環(huán)的構(gòu)造邊集合。環(huán)是1維基元,邊是1維基元,且環(huán)是邊的聚合。環(huán)是封閉的, 即構(gòu)成環(huán)的第一條邊和最后一條邊具有公共節(jié)點(diǎn)。
[0140] 盡管以上沒(méi)有顯式約束環(huán)的所有構(gòu)造邊必須位于同一個(gè)平面上,但直接引用環(huán)對(duì) 象的只有平面片對(duì)象,而平面片上所有點(diǎn)在同一平面上,所以默認(rèn)環(huán)的所有構(gòu)造邊位于同 一個(gè)平面上。環(huán)通常也記為循環(huán)(Loop)或圈(Cycle)。
[0141] (4)平面片(Facet)
[0142] 平面片是嵌入于三維空間中的一類(lèi)2維基元,它是由唯一外環(huán)、零至多個(gè)內(nèi)環(huán)共 同封閉而成的區(qū)域。平面片的邊界是環(huán)。平面片的唯一外環(huán)上的邊和所有內(nèi)環(huán)上的邊共同 形成了一個(gè)集合,該集成稱(chēng)為平面片的構(gòu)造邊集合。一個(gè)平面片至少包含3條邊。平面片 是相對(duì)簡(jiǎn)單多邊形,可以是凸的,可以是凹的。當(dāng)一個(gè)平面片只由3條邊構(gòu)成時(shí),平面片退 化為三角形。
[0143] 平面片具有法向量。在平面片中任意一個(gè)環(huán)內(nèi),其構(gòu)造邊排序是有序的,即構(gòu)造邊 集合有一定的走向,也即前一條邊與后一條邊一定有公共節(jié)點(diǎn)。如下指定:唯一外環(huán)的走向 為逆時(shí)針,內(nèi)環(huán)的走向?yàn)轫槙r(shí)針。同時(shí),每條邊本身有物理方向,即從邊的起始節(jié)點(diǎn)指向邊 的終止節(jié)點(diǎn)。但在同一個(gè)環(huán)內(nèi),并不是所有邊的方向都一致,也即前一條邊的終止節(jié)點(diǎn)與后 一條邊的起始節(jié)點(diǎn)并不一定是同一個(gè)點(diǎn)。因此,需要一個(gè)統(tǒng)一規(guī)則來(lái)決定平面片的法向量, 通常采用右手定則(即四指方向?yàn)槠矫嫫奈ㄒ煌猸h(huán)中邊的環(huán)繞方向,大拇指方向?yàn)榉ㄏ?量方向)。進(jìn)一步的,當(dāng)平面片的唯一外環(huán)的邊集合確定后,該邊集合的環(huán)繞方向就與每條 邊的本身方向作比較,如如一致則該條邊標(biāo)記為"+",否則該邊標(biāo)記為"-"。
[0144] 任一平面片都具有兩側(cè)。因?yàn)槊總€(gè)平面片都有一個(gè)所在超平面。該超平面片將三 維空間分為兩個(gè)部分,一般把平面片法向量所在一側(cè)稱(chēng)為正面,把異于平面片法向量所在 一側(cè)稱(chēng)為背面。
[0145] (5)體(Body)
[0146] 體是嵌入于三維空間中一類(lèi)3維基元,它由至少4個(gè)平面片封閉而成。體的邊界 是平面片,它們形成一個(gè)集合,稱(chēng)體的構(gòu)造平面片集合。針對(duì)每個(gè)體,由于其內(nèi)部不存在其 它基兀,所以體也稱(chēng)為最小體。
[0147] 本發(fā)明中消隱方法采用的三維空間數(shù)據(jù)模型中各類(lèi)基元的詳細(xì)情況如上所述。 更為具體的,附圖1給出了該模型中各類(lèi)基元的直觀圖形解釋。更為具體的,附圖1(a) 描述頂點(diǎn)實(shí)體v;附圖1(b)描述邊實(shí)體e,其起點(diǎn)為vl,其終點(diǎn)為v2;附圖1(c)描述平 面片中外環(huán)走向以及如何標(biāo)記邊的方向,其中,該平面片的唯一外環(huán)走向?yàn)槟鏁r(shí)針(即 1 -2-3-4-5-6-7-8_9),邊el包含于該外環(huán),且邊el本身方向?yàn)?_4,邊el方向與唯一外環(huán) 走向一致,故而標(biāo)記為+,邊e2的方向與唯一外環(huán)走向同樣一致而標(biāo)記為+,邊e3的方向與 唯一外環(huán)走向不一致而記為-,以此類(lèi)推。附圖1 (d)描述體bodyl和體body2之間的平面 片factl,該平面片的唯一外環(huán)走向?yàn)槟鏁r(shí)針(即p-q-r-s),其法向量朝上,平面片factl 法向量朝向體bodyl的外部,故而此時(shí)平面片factl作為前向面,體bodyl作為后向體;平 面片factl法向量朝向體body2的內(nèi)部,故而此時(shí)平面片factl作為后向面,體body2作為 前向體。
[0148] 具體實(shí)施時(shí),本領(lǐng)域技術(shù)人員可根據(jù)元素自行設(shè)定相應(yīng)類(lèi)圖,例如:投影前的 三維節(jié)點(diǎn)(Vertex)包含初始X值(_3d_x)、初始Y值(_3d_y)、初始Z值(_3d_z)等成 員;投影后的二維節(jié)點(diǎn)(Point)包含平面X值(x)、平面Y值(y)等成員;邊(Segment) 包含起始節(jié)點(diǎn)(beginVertex)、終止節(jié)點(diǎn)(endVertex)、鄰接平面片集合(ajoinFace)、 可見(jiàn)性(visibility)等成員;平面片(Face)包含唯一外環(huán)(outerRing)、零至多個(gè)內(nèi) 環(huán)(innerRings)、所有邊集合(listSegment)、所在超平面的平面方程(equation)、可見(jiàn) 性(visibility)等成員;體(Body)包含平面片集合(listFace)、邊集合(listSegment) 等成員;拓?fù)浠萜鳎═opoElementCollection)包含節(jié)點(diǎn)集合(listVertex)、邊集合 (listSegment)、平面片集合(listFace)、體集合(listBody)、只共享面情況時(shí)所有公共面 個(gè)數(shù)(specl_Face)、只共享面情況時(shí)所有公共面包含的邊個(gè)數(shù)(specl_Segment)、只共享 邊情況時(shí)所有公共邊個(gè)數(shù)(spec2_Segment)、只共享點(diǎn)情況時(shí)所有點(diǎn)公共點(diǎn)個(gè)數(shù)(spec3_ Vertex)、可見(jiàn)面總個(gè)數(shù)(vlistFace)、不可見(jiàn)面總個(gè)數(shù)(ivlistFace)、可見(jiàn)邊總個(gè)數(shù) (vlistSegment)、不可見(jiàn)邊總個(gè)數(shù)(ivlistSegment)等成員。
[0149] 本發(fā)明的著眼點(diǎn)為"顧及拓?fù)?,針對(duì)顧及拓?fù)涞娜S實(shí)體群的線消隱,本發(fā)明提 出10條規(guī)則。后續(xù)的【具體實(shí)施方式】遵循該10條規(guī)則發(fā)展而來(lái)。
[0150] 需要注意的是,以下會(huì)頻繁地用到"共面"、"共邊"、"共點(diǎn)",而稱(chēng)呼"共面(邊、 點(diǎn))",是指共享的最高維度的基元是"面(邊、點(diǎn))"。之所以這樣做,是因?yàn)槊媸?維基元、 邊是1維基元、點(diǎn)是〇維基元,而基于高一維度的基元相鄰必然包括基于低一維度的基元相 鄰。例如,共"面"時(shí),必然存在共"邊(即面包含的邊)"以及共"點(diǎn)(面包含的點(diǎn))",此時(shí) 稱(chēng)"既共面又共邊還共點(diǎn)",是沒(méi)有意義的,故而只稱(chēng)"共面";又如,共"邊"時(shí),必然存在共 "點(diǎn)(即邊包含的點(diǎn))",此時(shí)稱(chēng)"既共邊又共點(diǎn)",同樣沒(méi)有意義,故而只稱(chēng)"共點(diǎn)"。簡(jiǎn)而言 之,如果存在公共2維基元,則稱(chēng)存在"共面";如果存在公共1維基元,則稱(chēng)存在"共邊";如 果存在公共0維基元,則稱(chēng)存在"共點(diǎn)"。
[0151] 由以上定義可知,1維基元除了'邊'還有'環(huán)'。那存在公共1維基元時(shí),是否還 需要稱(chēng)存在"共環(huán)"?事實(shí)上,針對(duì)任意一個(gè)平面片,其包含的每個(gè)環(huán)本質(zhì)上都是由邊構(gòu)成, 且其唯一外環(huán)包含的邊與所有內(nèi)環(huán)包含的邊在給予消隱時(shí)采用相同方法對(duì)待,故而以下無(wú) 論是唯一外環(huán)包含的邊還是所有內(nèi)環(huán)包含的邊都簡(jiǎn)稱(chēng)邊,而且存在公共1維基元時(shí),只稱(chēng) 存在"共邊"而不稱(chēng)"共環(huán)"。這樣,本發(fā)明能夠解決體中有"穿洞"的情況。
[0152] 同時(shí)解釋幾個(gè)重要名詞。其中,"簇(Cluster)"指具備相同特性的同類(lèi)實(shí)體形成 的集合,如可見(jiàn)面簇、不可見(jiàn)面簇、可見(jiàn)邊簇、不可見(jiàn)邊簇。"潛在可見(jiàn)邊"指的是當(dāng)前可見(jiàn)、 但通過(guò)進(jìn)一步判斷不一定可見(jiàn)的邊。
[0153] 本發(fā)明采用的規(guī)則具體如下:
[0154] 規(guī)則1 (剖分完全規(guī)則):待消隱的每個(gè)實(shí)體必須是剖分完全的。所謂剖分完全, 是指:若體A的平面片與相鄰體B的平面片存在相交,則以上平面片與平面片之間應(yīng)該剖分 完全,即相交部分應(yīng)該是唯一的,也即公共平面片只存儲(chǔ)一次但可被引用多次;若體A的邊 與相鄰體B的邊存在相交,則以上邊與邊之間應(yīng)該也是剖分完全的,即相交部分應(yīng)該也是 唯一的,即公共邊只存儲(chǔ)一次但可被引用多次;若體A的頂點(diǎn)與相鄰體B的頂點(diǎn)重合,則相 交部分應(yīng)該也是惟一的,即重合頂點(diǎn)只存儲(chǔ)一次但可被引用多次??偠灾?,存在相交情況 的則必須給予打斷,打斷后的相同基元只應(yīng)該存儲(chǔ)一次,更高維的基元只使用對(duì)于低維基 元的引用。
[0155] 直觀地,如附圖3(a)所示,體1的平面片ele2e3e4(用構(gòu)成邊表示,或者用構(gòu)成點(diǎn) 表不的vlv2v3v4)與體2的平面片e5e6e7e8 (也即v5v6v7v8)相交,體1的el和e2與體2 的e8和e5分別相交,需要完全剖分。當(dāng)剖分結(jié)束后,如圖3(b)所示,體1的邊el分剖分 為邊ell和邊el2,體1的邊e2被剖分為邊e21和邊e22,體2的邊e5被剖分為邊e51和 邊e52,體2的邊e8被剖分為邊e81和邊e82 ;同時(shí),體1的平面片ele2e3e4被剖分為2個(gè) 小平面片,體2的平面片e5e6e7e8也被剖分為2個(gè)小平面片,其中,平面片el2e21e51e81 為體1和體2剖分后的公共平面片,體1中另一個(gè)剖分后的平面片是elle81e51e22e3e4, 體2中另一個(gè)剖分后的平面片是el2e21e52e6e7e82 ;此外,體1和體3共享一個(gè)頂點(diǎn),剖分 前,該共享頂點(diǎn)在體1中被存儲(chǔ)為v2并在體3中被存儲(chǔ)為v9,剖分后,它們合并為一個(gè)頂點(diǎn) (記為vlO),體1和體3都只使用對(duì)于vlO的引用。
[0156] 值得注意的是,以上采用的三維空間數(shù)據(jù)模型事實(shí)上是一種建立在完全剖分基礎(chǔ) 的三維拓?fù)鋽?shù)據(jù)結(jié)構(gòu),即若平面片與平面片相交則剖分平面片、若線段與線段相交則打斷 線段、剖分之后相同實(shí)體(公共點(diǎn)、公共邊、公共面)只存儲(chǔ)一次時(shí)但被多次引用。換言之, 以上采用的三維空間數(shù)據(jù)模型默認(rèn)滿(mǎn)足"規(guī)則1 (完全剖分規(guī)則)"。如果需要主動(dòng)實(shí)現(xiàn)"規(guī) 則1",詳見(jiàn)(賀彪.(2011).三維地籍空間數(shù)據(jù)模型及拓?fù)錁?gòu)建算法研究[D].博士論文, 武漢大學(xué),159p;賀彪.李霖,郭仁忠,史云飛.(2011).趙志剛.(2012).三維地籍空間 數(shù)據(jù)拓?fù)錁?gòu)建、維護(hù)及應(yīng)用研究[D].博士論文,武漢大學(xué),191p;夏俊.(2011).三維地籍 中計(jì)算幾何相關(guān)問(wèn)題研究[Msc.].碩士論文,53p.)。
[0157] 規(guī)則2(只共面):當(dāng)某體與另一個(gè)體存在的公共元素為2維時(shí),稱(chēng)只共面。
[0158] 具體的,針對(duì)兩個(gè)相鄰的體,如果存在公共平面片,則稱(chēng)這兩個(gè)體只共面。存在1 個(gè)公共平面片,存在2個(gè)公共平面片,直至存在多個(gè)公共平面片,都稱(chēng)為只共面。只共面的 情況簡(jiǎn)記為specl。針對(duì)只共面情況(specl),認(rèn)為公共面不可見(jiàn),公共面包含的邊潛在可 見(jiàn)。
[0159] 直觀的,如附圖4(a)所示,體1和體2之間存在公共平面片ele2e3e4,則稱(chēng) 體1和體2只共享面ele2e3e4。此時(shí),公共平面片ele2e3e4不可見(jiàn),其包含的邊集(即 el,e2,e3,e4)潛在可見(jiàn)。
[0160] 規(guī)則3 (只共邊):當(dāng)某體與另一個(gè)體存在的公共元素為1維時(shí),稱(chēng)只共邊。
[0161] 具體的,針對(duì)兩個(gè)相鄰的體,如果存在公共邊,但不存在公共平面片,則稱(chēng)這兩個(gè) 體只共邊。存在1條公共邊,存在2條公共邊,直至存在多條公共邊,都稱(chēng)為只共邊。只共 邊的情況簡(jiǎn)記為spec2。針對(duì)只共邊(speC2)情況,認(rèn)為公共邊潛在可見(jiàn)。
[0162] 直觀的,如附圖4(b)所示,體1和體2之間存在公共邊e,但體1和體2之間不存 在任何公共平面片,則稱(chēng)體1和體2只共享邊e。共享邊e潛在可見(jiàn)。
[0163] 規(guī)則4 (只共點(diǎn)):當(dāng)某體與另一個(gè)體存在的公共元素為0維時(shí),稱(chēng)只共點(diǎn)。
[0164] 具體的,針對(duì)兩個(gè)相鄰的體,如果存在公共頂點(diǎn),但既不存在公共邊,也不存在公 共平面片,則稱(chēng)這兩個(gè)體只共點(diǎn)。存在1個(gè)公共頂點(diǎn),存在2個(gè)公共頂點(diǎn),直至存在多個(gè)公 共頂點(diǎn),都稱(chēng)為只共點(diǎn)。只共點(diǎn)的情況簡(jiǎn)記為spec3。針對(duì)只共點(diǎn)(speC3)情況,其不影響 輸出結(jié)果(因?yàn)檩敵鼋Y(jié)果為邊的顯示/隱藏,而這里指示公共點(diǎn)情況)。
[0165] 直觀的,如附圖4 (c)所示,體1和體2之間存在公共頂點(diǎn)V,但既不存在公共邊,也 不存在公共平面片,則稱(chēng)兩個(gè)體只共享點(diǎn)V。
[0166] 以上是比較純粹的或只共面、或只共邊、或只共點(diǎn)的情況。事實(shí)上,實(shí)際情況中體 與體之間往往共面、共邊、共點(diǎn)3種情況同時(shí)存在,或者其中任意2種情況同時(shí)存在。針對(duì) 共面、共邊、共點(diǎn)可能同時(shí)存在的情況,需要進(jìn)一步簡(jiǎn)化,具體如下:
[0167] 規(guī)則5(共面面):當(dāng)某體與另兩個(gè)體存在的公共元素分別為2維時(shí),稱(chēng)共面面。
[0168] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,與其中一個(gè)相鄰體只共面,與其中另 一個(gè)相鄰體也只共面,并且以上兩個(gè)公共面存在交集,該交集稱(chēng)為共同邊,則以上共同邊是 否可見(jiàn)只判斷一次(只在判斷以上任意一個(gè)公共面包含的邊集是否可見(jiàn)時(shí)才考慮)。換言 之,即按照只共面(specl)的情況處理以上共同邊的可見(jiàn)性。
[0169] 直觀的,如附圖5(a)所示,針對(duì)體1,體1與體2共平面片ele2e3e4,同時(shí)體1與 體3共平面片ele5e6e7,并且以上兩個(gè)平面片存在交集,該交集即邊el,則邊el是否可見(jiàn) 只判斷一次--具體的,只在判斷公共平面片ele2e3e4包含的邊集(即el,e2,e3,e4)是 否可見(jiàn)時(shí)才考慮,而在判斷公共平面片ele5e6e7包含的邊集(即e5,e6,e7)是否可見(jiàn)時(shí)不 考慮;或者,只在判斷公共平面片ele5e6e7包含的邊集(即el,e5,e6,e7)是否可見(jiàn)時(shí)才考 慮,在判斷公共平面片ele2e3e4包含的邊集(即e2,e3,e4)是否可見(jiàn)時(shí)不考慮。
[0170] 規(guī)則6(共邊面):當(dāng)某體與另兩個(gè)體存在的公共元素分別為1維與2維時(shí),稱(chēng)共 邊面。
[0171] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,且與其中一個(gè)相鄰體只共邊,與其中 另一個(gè)相鄰體只共面,并且以上公共邊包含于以上公共面的邊集中,則以上公共邊是否可 見(jiàn)只判斷一次(只在判斷以上公共面包含的邊集是否可見(jiàn)時(shí)才考慮)。換言之,即按照只共 面(specl)的情況處理以上公共邊的可見(jiàn)性。
[0172] 直觀的,如附圖5(b)所示,針對(duì)體1,體1與體2共平面片ele2e3e4,同時(shí), 體1與體3共邊el,并且以上公共邊el存在于公共平面片ele2e3e4包含的邊集(即 el,e2,e3,e4)中,則判斷公共邊el是否可見(jiàn)只判斷一次--具體的,只在判斷公共平面片 ele2e3e4包含的邊集(即el,e2,e3,e4)是否可見(jiàn)時(shí)才考慮。
[0173] 規(guī)則7(共邊邊):當(dāng)某體與另多個(gè)體(兩個(gè)或兩個(gè)以上)存在的公共元素分別為 1維時(shí),稱(chēng)共邊邊。
[0174] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,且與其中一個(gè)相鄰體只共邊,與其中 另一個(gè)相鄰體也只共邊,同時(shí)以上兩個(gè)相鄰體之間也只共邊而不共面,則以上兩個(gè)公共邊 集的交集稱(chēng)共同公共邊。同樣的,當(dāng)有新的相鄰體加入時(shí),即針對(duì)某體,如果存在兩個(gè)上相 鄰的體,則所有相鄰體也只共邊而不共面(共邊存在于共同公共邊中);那么,以上所有體 的共同公共邊是否可見(jiàn)只判斷一次,且按照只共邊(speC2)的情況處理以上共同公共邊的 可見(jiàn)性。
[0175] 直觀的,如附圖5(c)所示,體1與體2共邊el,體1與體3也共邊el,體2與體3 也只共邊不共面(共邊el),則稱(chēng)邊el為共同公共邊,且共同公共邊el的可見(jiàn)性只判斷一 次。
[0176] 規(guī)則8(共點(diǎn)面):當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與2維時(shí),稱(chēng)共 點(diǎn)面。
[0177] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,與其中一個(gè)相鄰體只共點(diǎn),且與其中 另一個(gè)相鄰體只共面,并且以上公共點(diǎn)屬于以上公共面的包含點(diǎn)集,則以上公共點(diǎn)只存儲(chǔ) 一次,以上公共面包含的點(diǎn)集中只使用對(duì)于該公共點(diǎn)的引用。換言之,即歸結(jié)于只共面 (specl)情況。事實(shí)上,這種情況并不影響輸出結(jié)果(因?yàn)檩敵鼋Y(jié)果是邊的顯示/隱藏,而 這里指示公共點(diǎn)情況)。
[0178] 直觀的,如附圖5(d)所示,針對(duì)體1,體1與體3共頂點(diǎn)V,同時(shí),體1與體2共平 面片ele2e3e4,且以上公共頂點(diǎn)v屬于以上公共平面片包含的點(diǎn)集,則以上公共頂點(diǎn)只存 儲(chǔ)一次,以上公共面ele2e3e4只使用針對(duì)v的引用。
[0179] 規(guī)則9(共點(diǎn)邊):當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與1維時(shí),稱(chēng)共 點(diǎn)邊。
[0180] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,與其中一個(gè)相鄰體只共點(diǎn),且與其中 另一個(gè)相鄰體只共邊,并且以上公共點(diǎn)屬于以上公共邊包含的點(diǎn)集,則以上公共點(diǎn)只存儲(chǔ) 一次,以上公共邊包含的點(diǎn)集中只使用對(duì)于該公共點(diǎn)的引用。換言之,即歸結(jié)于只共邊 (speC2)情況。事實(shí)上,這種情況并不影響輸出結(jié)果(因?yàn)檩敵鼋Y(jié)果是邊的顯示/隱藏,而 這里指示公共點(diǎn)情況)。
[0181] 直觀的,如附圖5(e)所示,針對(duì)體1,體1與體3共頂點(diǎn)V,同時(shí),體1與體2共邊 el,且以上公共頂點(diǎn)v屬于以上公共邊包含的點(diǎn)集,則以上公共頂點(diǎn)只存儲(chǔ)一次,以上公共 邊el只使用針對(duì)v的引用。
[0182] 規(guī)則10(共點(diǎn)點(diǎn)):當(dāng)某體與另多個(gè)體(兩個(gè)或兩個(gè)以上)存在的公共元素分別 為0維時(shí),稱(chēng)共點(diǎn)點(diǎn)。
[0183] 具體的,針對(duì)某體,如果存在兩個(gè)相鄰的體,與其中一個(gè)體只共點(diǎn),與其中另一個(gè) 體也只共點(diǎn),同時(shí)以上兩個(gè)相鄰體之間也只共點(diǎn),則它們共同的公共點(diǎn)稱(chēng)共同公共點(diǎn)。同樣 的,當(dāng)有新的相鄰體加入時(shí),即針對(duì)某體,如果存在兩個(gè)以上相鄰的體,與所有相鄰體也只 共點(diǎn)于共同公共點(diǎn);那么以上共同公共點(diǎn)只存儲(chǔ)一次,以上所有相鄰體中只存儲(chǔ)對(duì)共同公 共點(diǎn)的引用。換言之,即歸結(jié)于只共點(diǎn)(spec3)情況。事實(shí)上,這種情況并不影響輸出結(jié)果 (因?yàn)檩敵鼋Y(jié)果是邊的顯示/隱藏,而這里指示公共點(diǎn)情況)。
[0184] 直觀的,如附圖5(f)所示,針對(duì)體1,體1與體3共頂點(diǎn)V,同時(shí),體1與體2也共 頂點(diǎn)v,且體2與體3之間也只共點(diǎn)V,則v稱(chēng)為共同公共點(diǎn),體1體2體3都只使用對(duì)于v 的引用。
[0185] 針對(duì)其余情況,即多個(gè)體(兩個(gè)或兩個(gè)以上)之間同時(shí)存在多個(gè)公共面(兩個(gè)或 兩個(gè)以上公共面)、多個(gè)公共邊(兩個(gè)或兩個(gè)以上公共邊)、多個(gè)公共點(diǎn)(兩個(gè)或兩個(gè)以上 公共點(diǎn))的情況,均可分解為規(guī)則2-10給予處理。附圖6給出了一個(gè)分解實(shí)例,其中圖 6(a)為解釋示例的體信息示意圖,圖6(b)為解釋示例的頂點(diǎn)信息示意圖。該實(shí)例中,8個(gè) 體相鄰,其中上層包括體1體2體3體4,下層包括體5體6體7體8 ;其中,體1由頂點(diǎn) A,B,D,E,J,K,M,N構(gòu)成,體 2 由頂點(diǎn)B,C,E,F(xiàn),K,L,N,0 構(gòu)成,體 3 由頂點(diǎn)D,E,G,H,M,N,P,Q 構(gòu)成,體4由頂點(diǎn)E,F(xiàn),H,I,N,0,Q,R構(gòu)成,體5由頂點(diǎn)J,K,M,N,S,T,V,W構(gòu)成,體6由頂點(diǎn) K,L,N,0,T,U,W,X構(gòu)成,體 7 由頂點(diǎn)M,N,P,Q,V,W,Y,Z構(gòu)成,體 8 由頂點(diǎn)N,0,Q,R,W,X,Z,A2 構(gòu)成。這8個(gè)體存在許多共點(diǎn)、共邊、共面情況,而且不是純粹的只共點(diǎn)(spec3)、只共邊 (spec2)。具體情況如下,
[0186] (1)體7與體8之間共面QNWZ,體7與體3之間共面PQNM,體7與體5之間共面 MNWV,這些都是只共面(specl)情況。類(lèi)似的只共面(specl)情況還有很多,包括體5與體 6之間、體6與體2之間、體6與體8之間等。
[0187] (2)體1與體3之間存在共邊情況(即共邊EN)。但這不是純粹的只共邊情況,因 為邊EN同時(shí)也屬于體1與體2的公共面EBKN包含的邊集(即邊BK、邊KN、邊EN、邊BE)。 按照規(guī)則6 (共邊面)處理,即歸結(jié)于只共面(specl)情況。類(lèi)似的需要按照規(guī)則6 (共邊 面)處理的情況還有很多,包括邊麗、邊QN、邊0N、邊KN等。
[0188] (3)同樣的,針對(duì)邊EN,還可以看作體1與體2的公共面(即EBKN)、體1與體3的 公共面(即EDMN)的共同邊。按照規(guī)則5 (共面面)處理,同樣歸結(jié)于只共面(specl)情況。 類(lèi)似的,邊麗、邊QN、邊0N等也都可以按照規(guī)則5 (共面面)處理。
[0189] (4)體1與體8之間共頂點(diǎn)N。但是這不是純粹的只共頂點(diǎn)情況,因?yàn)轫旤c(diǎn)N還屬 于體1與體2的公共面EBKN包含的點(diǎn)集。按照規(guī)則8 (共點(diǎn)面)情況處理,即歸結(jié)于只共 面(specl)情況。同時(shí),頂點(diǎn)N還可以看作體5與4、體3與體6、體7與體2的公共頂點(diǎn), 也都按照規(guī)則8 (共點(diǎn)面)情況處理。
[0190] (5)如上所述,在該實(shí)例中,存在只共面(specl)、共邊面(歸結(jié)于specl)、共面 面(歸結(jié)于specl)、共點(diǎn)面(歸結(jié)于specl)這4種情況,不存在只共邊(speC2)、只共點(diǎn) (spec3)、共邊邊(歸結(jié)于spec2)、共點(diǎn)邊(歸結(jié)于spec2)、共點(diǎn)點(diǎn)(歸結(jié)于spec3)這5種 情況。
[0191] 如以上案例的實(shí)際例子還有許多,特別發(fā)生在三維產(chǎn)權(quán)體與三維產(chǎn)權(quán)體相鄰、三 維建筑體與三維建筑體相鄰、三維宗地與三維宗地相鄰的情況中。在這樣的案例中,最終都 歸結(jié)于只共面(specl)的方式處理(如下表1,表2,表3),但并不意味著沒(méi)有共邊、共點(diǎn)的 情況發(fā)生,只是它們不是純粹的只共邊、只共點(diǎn)情況,采用以上規(guī)則2-10給予解決是合適 的。
[0192] 遵從以上提出的若干規(guī)則,下面詳細(xì)闡述實(shí)施例中該線消隱方法。
[0193] 實(shí)施例所提供針對(duì)顧及拓?fù)涞娜S實(shí)體群的線消隱,總共包含3個(gè)大步驟:步驟 1.顧及拓?fù)潢P(guān)系的消隱預(yù)處理,其主要針對(duì)公共面、公共面包含的邊、公共邊的可見(jiàn)性給 予初步判斷;步驟2.擴(kuò)展的第一類(lèi)線消隱處理,其主要針對(duì)傳統(tǒng)的第一類(lèi)消隱情況給予擴(kuò) 展,也稱(chēng)自遮蔽(或自消隱、局部消隱),它發(fā)生在單個(gè)三維實(shí)體內(nèi)部;步驟3.擴(kuò)展的第二 類(lèi)線消隱處理,其主要針對(duì)傳統(tǒng)的第二類(lèi)消隱情況給予擴(kuò)展,也稱(chēng)互遮擋(或互消隱、全局 消隱),它發(fā)生在多個(gè)三維實(shí)體之間。
[0194] 步驟1,顧及拓?fù)潢P(guān)系的消隱預(yù)處理
[0195] (1.1)平面片的分類(lèi)
[0196] (i)針對(duì)體與體之間存在只共面情況時(shí),設(shè)定公共面為不可見(jiàn)面。之所以這么,是 因?yàn)椋汗裁嬉欢ū话摴裁娴南噜忬w所"自遮擋",同時(shí)可能被位于視線更前方的其 它體所"互遮擋",不可能出現(xiàn)可見(jiàn)情況,所以這里設(shè)定為不可見(jiàn)。公共面的個(gè)數(shù)記為slF。
[0197] (ii)針對(duì)體與體之間存在只共邊情況時(shí),相接于該公共邊的面的可見(jiàn)性難以直接 判斷,本步驟不做處理。
[0198] (iii)針對(duì)體與體之間存在只共點(diǎn)情況時(shí),相接于該公共點(diǎn)的面的可見(jiàn)性難以直 接判斷,本步驟不做處理。
[0199] (1.2)邊的分類(lèi)
[0200] (i)針對(duì)體與體之間存在只共面情況時(shí),公共面包含的邊暫設(shè)定為可見(jiàn)面(事實(shí) 上潛在可見(jiàn))。之所以這樣,是因?yàn)椋横槍?duì)公共面包含的邊,可能位于視線最前方而可見(jiàn),也 可能被包含該邊的體所"自遮擋",還可能被位于視線更前方的其它體所"互遮擋",所以可 能可見(jiàn)可能不可見(jiàn),不失去一般性的,這里設(shè)定為可見(jiàn),最終是否可見(jiàn)由計(jì)算后決定。該公 共面包含的邊潛在可見(jiàn),所有這樣的包含于公共面的潛在可見(jiàn)邊的總個(gè)數(shù)記為slE。
[0201] (ii)針對(duì)體與體之間存在只共邊情況時(shí),暫設(shè)定公共邊為可見(jiàn)邊(事實(shí)上潛在可 見(jiàn))。之所以這樣,是因?yàn)椋横槍?duì)公共邊,可能位于視線最前方而可見(jiàn),也可能被包含該邊的 體所"自遮擋",還可能被位于視線更前方的其它體所"互遮擋",所以可能可見(jiàn)可能不可見(jiàn), 不失去一般性的,這里設(shè)定為可見(jiàn),最終是否可見(jiàn)由計(jì)算后決定。該公共邊潛在可見(jiàn),所有 這樣的潛在可見(jiàn)的公共邊的總個(gè)數(shù)記為s2E。
[0202] (iii)針對(duì)體與體之間存在只共點(diǎn)時(shí),相接于該公共點(diǎn)的邊的可見(jiàn)性難以直接判 斷,本步驟不做處理。
[0203] 以上即對(duì)于三維流形(3-manifold)處相關(guān)面與邊的消隱處理。針對(duì)以上公共面、 公共面包含的邊、公共邊的消隱處理思想,在這里簡(jiǎn)稱(chēng)"消隱預(yù)處理策略"。本步驟不做處理 的情況,在后續(xù)步驟可能再進(jìn)行相關(guān)處理。
[0204] (1. 1)平面片的分類(lèi)和(1. 2)邊的分類(lèi)的執(zhí)行為并列關(guān)系,順序不限。
[0205] 步驟2,擴(kuò)展的第一類(lèi)線消隱處理(即"自遮擋"的處理),包括依次執(zhí)行以下子步 驟:
[0206] (2.1)后向面剔除
[0207] 進(jìn)行后向面剔除,包括找到法向量與視線方向一致的平面片,這些平面片稱(chēng)后向 面,后向面設(shè)定為不可見(jiàn)面,不參與后續(xù)步驟3 ;找到法向量與視線方向不一致的平面片, 這些平面片稱(chēng)前向面,前向面設(shè)定為可見(jiàn)面。之所以稱(chēng)"后向面剔除",是因?yàn)檎业降牟豢梢?jiàn) 的后向面不再參與第二類(lèi)線消隱處理。
[0208] (2.2)平面片的分類(lèi)
[0209] (i)將通過(guò)"后向面剔除"找到的所有不可見(jiàn)面,加上"消隱預(yù)處理"中的所有不可 見(jiàn)面(即公共面),兩者和即為完整的不可見(jiàn)面簇;
[0210] (ii)在"消隱預(yù)處理"中不存在可見(jiàn)面,通過(guò)"后向面剔除"找到的可見(jiàn)面即完整 的可見(jiàn)面簇。
[0211] 其中,只需要完整的可見(jiàn)面簇用于后續(xù)操作,即只需要可見(jiàn)面作為判斷是否產(chǎn)生 "互遮擋"的主體(客體為潛在可見(jiàn)邊)。之所以這樣,是因?yàn)椋翰豢梢?jiàn)面一定被可見(jiàn)面所遮 擋,故而判斷邊是否被所有面(包括可見(jiàn)面、不可見(jiàn)面)遮擋可以簡(jiǎn)化,等價(jià)簡(jiǎn)化為判斷邊 是否被可見(jiàn)面遮擋。
[0212] (2. 3)邊的可見(jiàn)性判定
[0213] 邊始終包含可見(jiàn)邊、不可見(jiàn)邊兩類(lèi)。
[0214] 值得注意的是,這里處理的邊只相接于2個(gè)平面片,即該邊上任何上一點(diǎn)的鄰域 都符合"二維流形(2-manifold)"的特征。之所以這樣,是因?yàn)椋哼@里邊的可見(jiàn)性由僅相接 的2個(gè)平面片的情況決定,具體如下:
[0215] (i)相接于2個(gè)"不可見(jiàn)面"的邊,設(shè)定為不可見(jiàn)邊。
[0216] 該邊作為兩個(gè)不可見(jiàn)區(qū)域的過(guò)渡區(qū)域,該區(qū)域盡管沒(méi)有任何面積,但其遵守"連貫 性(Coherence)"中的"面的連貫性(FaceCoherence)"應(yīng)該不可見(jiàn)。該邊最終不可見(jiàn)。
[0217] (ii)相接于1個(gè)"可見(jiàn)面"和1個(gè)"不可見(jiàn)面"的邊,暫設(shè)定為可見(jiàn)邊(事實(shí)上潛 在可見(jiàn))。
[0218] 該邊作為可見(jiàn)區(qū)域和不可見(jiàn)區(qū)域的過(guò)渡區(qū)域,該區(qū)域無(wú)法通過(guò)"面的連貫性(Face Coherence) "來(lái)判斷可見(jiàn)性。該邊可能位于視線最前方而可見(jiàn),可能被包含該邊的體所"自 遮擋",也可能被位于視線更前方的其它體所"互遮擋",所以可能可見(jiàn)可能不可見(jiàn),不失去 一般性的,這里設(shè)定為可見(jiàn),最終是否可見(jiàn)由計(jì)算后決定。該邊是潛在可見(jiàn)的。
[0219] (iii)相接于2個(gè)"可見(jiàn)面"的邊,暫設(shè)定為可見(jiàn)邊(事實(shí)上潛在可見(jiàn))。
[0220] 該邊作為兩個(gè)可見(jiàn)區(qū)域的過(guò)渡區(qū)域,該區(qū)域盡管沒(méi)有任何面積,但其遵守"面的連 貫性(FaceCoherence)"應(yīng)該可見(jiàn)。該邊可能位于視線最前方而可見(jiàn),可能被位于視線更 前方的其它體所"互遮擋",所以可能可見(jiàn)可能不可見(jiàn),不失去一般性的,這里設(shè)定為可見(jiàn), 最終是否可見(jiàn)由計(jì)算后決定。該邊是潛在可見(jiàn)的。
[0221] 針對(duì)以上僅相接于2個(gè)面的邊的可見(jiàn)性判斷策略,簡(jiǎn)稱(chēng)"第一類(lèi)消隱策略"。
[0222] (2. 4)邊的分類(lèi)
[0223] 邊始終包含可見(jiàn)邊、不可見(jiàn)邊兩類(lèi)。具體的,
[0224] 將以上(2. 3)得到的所有可見(jiàn)邊,加上"消隱預(yù)處理"得到的所有可見(jiàn)邊,兩者之 和才是完整的可見(jiàn)邊簇;由于"消隱預(yù)處理"沒(méi)有得到不可見(jiàn)邊,故而以上(2.3)得到的所 有不可見(jiàn)邊即為完整的不可見(jiàn)邊簇。其中,只需要完整的可見(jiàn)邊簇用于后續(xù)操作,即只需要 這些邊作為判斷是否產(chǎn)生"互遮擋"的客體(主體是可見(jiàn)面)。
[0225] 步驟3,擴(kuò)展的第二類(lèi)線消隱處理(即"互遮擋"的處理),包括依次執(zhí)行以下子步 驟:
[0226] (3. 1)邊的細(xì)分
[0227] 此處判斷每條潛在可見(jiàn)邊(即步驟(2. 4)中所得的完整可見(jiàn)邊簇中的每條邊)是 否被可見(jiàn)面遮擋。一條邊是否被一個(gè)面遮擋,可能存在三種情況:
[0228] (i) 一條邊被該面完全遮擋;
[0229] (ii) -條邊被該面完全不遮擋;
[0230] (iii) 一條邊被該面部分遮擋:即出現(xiàn)部分遮擋、部分不遮擋的情況。
[0231] 當(dāng)遇到情況(i)和(ii)時(shí),邊不需要進(jìn)一步細(xì)分;只有遇到情況(iii)時(shí),邊才 需要進(jìn)一步細(xì)分。當(dāng)邊需要進(jìn)一步細(xì)分時(shí),如何細(xì)分由邊如何被平面片裁切所決定。從原 則上講,每一條可見(jiàn)邊與每一個(gè)平面片都需要判交,而且一條邊可能被平面片裁切為若干 段。邊被平面片裁切的過(guò)程,可以進(jìn)一步簡(jiǎn)化為邊與平面片包含的邊給予求交的過(guò)程。裁 切后的最終每條邊稱(chēng)"最簡(jiǎn)邊"(這種類(lèi)型實(shí)體在英文文獻(xiàn)中常稱(chēng)"Span(跨越)")。之所 以稱(chēng)"最簡(jiǎn)",是因?yàn)檫@樣的邊上每一點(diǎn)的可見(jiàn)性一致。此處利用的是"邊的連貫性(Edge Coherence),'。
[0232] 邊與邊的相交操作(也稱(chēng)打斷操作)在此不再贅述,因?yàn)樵谥T多文獻(xiàn)中涉及。
[0233] (3. 2)最簡(jiǎn)邊的可見(jiàn)性判定
[0234] 最簡(jiǎn)邊上每一個(gè)點(diǎn)的可見(jiàn)性都一樣。此處,采用最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性來(lái)代表整 條最簡(jiǎn)邊的可見(jiàn)性。由此,針對(duì)"在三維空間中判斷最簡(jiǎn)邊是否被平面片遮蔽"被簡(jiǎn)化為"在 三維空間中判斷點(diǎn)是否被平面片遮蔽"。針對(duì)"在三維空間中判斷點(diǎn)是否被平面片遮蔽",是 一個(gè)三維空間問(wèn)題,還可進(jìn)一步簡(jiǎn)化為二維空間問(wèn)題,具體如下:沿著視線方向所在的空間 直線,三維空間中的點(diǎn)在平面片所在超平面片中一定有一個(gè)投影點(diǎn);此時(shí),投影點(diǎn)和平面片 位于同一個(gè)超平面中(盡管嵌入于三維空間)。換言之,若將以上嵌入于三維空間中的平 面片通過(guò)剛性變換(包括平移、旋轉(zhuǎn)等)變換到X0Y平面,該同樣剛性變換后的投影點(diǎn)一定 也位于X0Y平面,因?yàn)閯傂宰儞Q具有拓?fù)洳蛔冃?。此時(shí),以上問(wèn)題簡(jiǎn)化為"判斷變換后的投 影點(diǎn)是否位于變換后的二維多邊形內(nèi)",即點(diǎn)的投影結(jié)果是否位于面的投影結(jié)果。判斷投影 點(diǎn)是否位于二維多邊形內(nèi)之后,若否則最簡(jiǎn)邊的中點(diǎn)可見(jiàn)(也就是最簡(jiǎn)邊可見(jiàn)),是則不可 見(jiàn)。而"在二維空間中判斷點(diǎn)是否位于多邊形內(nèi)"算法成熟,包括可以采用"角度和判別法" 或"水平/垂直交叉數(shù)判別法"或"面積判別法"等現(xiàn)有技術(shù)判斷。
[0235] 以上通過(guò)"判斷最簡(jiǎn)邊是否被平面片遮蔽"從而給定最簡(jiǎn)邊的可見(jiàn)性的過(guò)程,簡(jiǎn)稱(chēng) "第二類(lèi)消隱策略"。
[0236] 具體實(shí)施時(shí),消隱方法可采用投影來(lái)輔助。投影變換指的是將三維的物體投影 到二維的平面上。傳統(tǒng)上,投影變換分為平行投影(ParallelProjection)和透視投影 (PerspectiveProjection)。其中,平行投影(ParallelProjection)是投影方向垂直于觀 察平面的投影方式,也稱(chēng)正投影;透視投影(PerspectiveProjection)是視線相交于滅點(diǎn) 的投影方式,若相交于一個(gè)滅點(diǎn),則稱(chēng)單點(diǎn)透視投影,也簡(jiǎn)稱(chēng)透視投影,若相交于兩個(gè)滅點(diǎn), 則稱(chēng)兩點(diǎn)透視投影。投影變換的本質(zhì),是從三維空間點(diǎn)轉(zhuǎn)換為二維投影點(diǎn)。消隱的本質(zhì), 是在以上轉(zhuǎn)換過(guò)程中將被遮蔽的線要素(或面要素)給予特別標(biāo)識(shí)(如虛線表達(dá))。投影 變換具備唯一性,即一個(gè)三維空間點(diǎn)經(jīng)過(guò)投影變換后存在且只存在一個(gè)二維投影點(diǎn);相對(duì) 的,投影變換的逆向過(guò)程可稱(chēng)為反投影變換,反投影變換不具備唯一性,即一個(gè)二維投影點(diǎn) 經(jīng)過(guò)反投影變換處理可能存在多個(gè)三維空間點(diǎn),而比較同一個(gè)二維投影位置上多個(gè)三維空 間點(diǎn)的深度信息是實(shí)現(xiàn)物空間消隱的重要環(huán)節(jié),這是實(shí)現(xiàn)物空間消隱的重要環(huán)節(jié)。在本發(fā) 明實(shí)施例中,采用的投影方式為平行投影,但不是常規(guī)的正平行投影,而是采用一種自定義 的斜平行投影。之所以這樣做,是因?yàn)獒槍?duì)本發(fā)明中諸多實(shí)際案例采用該投影方式可觀察 相對(duì)全面(正面、上面、側(cè)面均包括部分),事實(shí)上本發(fā)明所述消隱方法可通過(guò)任意投影方 式輔助。具體的,實(shí)施例投影方式由于屬于平行投影,所以不需要規(guī)定視點(diǎn)位置(Viewing Position);以上投影的視線方向(ViewingDirection)可由(!.-|/+在-i/而表達(dá)。相應(yīng)的, 其坐標(biāo)變換公式為:
[0237] _2d_x= _3d_y+_3d_xXCos( 31X(45. 0/180. 0)) (1)
[0238] _2d_y= _3d_z+_3d_xXSin(X(45. 0/180. 0)) (2)
[0239] 其中,針對(duì)任意一個(gè)點(diǎn),_3d_x,_3d_y,_3d_z分別為變換前該點(diǎn)在三維空間坐標(biāo)中 的X值、Y值、Z值,而_2d_x,_2d_y分別為變換后該點(diǎn)在二維空間坐標(biāo)中的橫坐標(biāo)值、縱坐 標(biāo)值。以上坐標(biāo)變換過(guò)程也可以采用三維坐標(biāo)系直觀解析,如附圖2所示,x0,yO,zO分別 是變換前三維點(diǎn)在X,Y,Z軸上的坐標(biāo),B點(diǎn)為投影變換后的點(diǎn)。該三維空間直角坐標(biāo)系遵 守四個(gè)基本原則:(1)坐標(biāo)系原點(diǎn)為(〇,〇,〇); (2)在三維空間中(即變換前),X軸、Y軸、 Z軸相互垂直;(3)在二維空間中(即變換后),X軸與Y軸、X軸與Z軸的夾角均為45度; (4)X:Y:Z為 1:1:1。
[0240] 以上即顧及拓?fù)涞娜S實(shí)體群線消隱的【具體實(shí)施方式】,為便于技術(shù)人員理解起 見(jiàn),提供公式(3)_(25)如下,整個(gè)消隱過(guò)程滿(mǎn)足公式(3)_(25)。值得注意的是,針對(duì)以下所 有公式,是對(duì)以上文字形式的三大步驟的解釋?zhuān)@種解釋是數(shù)學(xué)形式的,但內(nèi)容與以上三大 步驟一致。
[0241] 其中,第一個(gè)大步驟(即"顧及拓?fù)潢P(guān)系的消隱預(yù)處理")滿(mǎn)足公式(3)_(7)。具 體的,
[0242] colV^sum(V) (3)
[0243] colE^sum(E) (4)
[0244] colF^sum(F) (5)
[0245] slF<colF(6)
[0246] slE+s2E<colE(7)
[0247] 其中,colV指代容器中所有頂點(diǎn)的個(gè)數(shù)(AllVerticesinthe Collection),colE指代容器中所有邊的個(gè)數(shù)(AllEdgesintheCollection),colF指 代容器中所有平面片的個(gè)數(shù)(AllFacetsintheCollection).sum(V)指代每個(gè)體中頂 點(diǎn)個(gè)數(shù)的累加和(SumofVerticesinEachBody),sum(E)指代每個(gè)體中邊個(gè)數(shù)的累加 和(SumofEdgesinEachBody),sum(F)指代每個(gè)體中平面片個(gè)數(shù)的累加和(Sumof FacetsinEachBody).slF指代存在共享面情況時(shí)共享面的個(gè)數(shù)(SharedFacetsin SpeclthatSolidsareAdjacentbyFacets),slE指代存在共享面情況時(shí)共享面包含的 邊個(gè)數(shù)(EdgesinSharedFacetsinSpeclthatSolidsareAdjacentbyFacets),s2E 指代存在共享邊情況時(shí)共享邊的個(gè)數(shù)(SharedEdgesinSpec2thatSolidsareadjacent byEdges).
[0248] 其中,公式(3)闡述了判定是否存在共享點(diǎn)的過(guò)程。其中,若colV=V,則體與體 之間一定是都相離關(guān)系;若colV<V,則體與體之間或存在點(diǎn)相鄰、或存在邊相鄰、或存在 面相鄰。
[0249] 公式⑷闡述了判定是否存在共享邊的過(guò)程。其中,若colE=E,則體與體之間或 都相離、或存在點(diǎn)相鄰;若colE<E,則體與體之間或存在邊相鄰、或存在面相鄰。
[0250] 公式(5)闡述了判定是否存在共享面的過(guò)程。其中,若colF=F,則體與體之間或 都相離、或存在點(diǎn)相鄰、或存在邊相鄰;若colF<F,則體與體之間一定存在面相鄰關(guān)系。
[0251] 公式(6)表明共享面只是作為面集合的一部分存在。
[0252] 公式(7)表明共享面包含的邊和共享邊只是作為邊集合的一部分存在。
[0253] 第二個(gè)大步驟(即"擴(kuò)展的第一類(lèi)線消隱處理")滿(mǎn)足公式(8)_(17)。具體的,
[0254] vF=fF(8)
[0255] ivF=bF+slF(9)
[0256] slE+s2E<tlvE(10)
【權(quán)利要求】
1. 一種顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法,其特征在于:所述三維地理空 間實(shí)體群的三維空間數(shù)據(jù)模型包括節(jié)點(diǎn)、邊、環(huán)、平面片和體這5類(lèi)基元,其中,點(diǎn)是0維基 元,邊與環(huán)是1維基元,平面片是2維基元,體是3維基元; 預(yù)設(shè)的規(guī)則如下, 規(guī)則1,待消隱的每個(gè)實(shí)體必須是剖分完全的; 規(guī)則2,當(dāng)某體與另一個(gè)體存在的公共元素為2維時(shí),稱(chēng)只共面; 規(guī)則3,當(dāng)某體與另一個(gè)體存在的公共元素為1維時(shí),稱(chēng)只共邊; 規(guī)則4,當(dāng)某體與另一個(gè)體存在的公共元素為0維時(shí),稱(chēng)只共點(diǎn); 規(guī)則5,當(dāng)某體與另兩個(gè)體存在的公共元素分別為2維時(shí),稱(chēng)共面面,按照只共面的情 況處理; 規(guī)則6,當(dāng)某體與另兩個(gè)體存在的公共元素分別為1維與2維時(shí),稱(chēng)共邊面,按照只共面 的情況處理; 規(guī)則7,當(dāng)某體與另多個(gè)體存在的公共元素分別為1維時(shí),稱(chēng)共邊邊,按照只共邊的情 況處理; 規(guī)則8,當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與2維時(shí),稱(chēng)共點(diǎn)面,按照只共面 的情況處理; 規(guī)則9,當(dāng)某體與另兩個(gè)體存在的公共元素分別為0維與1維時(shí),稱(chēng)共點(diǎn)邊,按照只共邊 的情況處理; 規(guī)則10,當(dāng)某體與另多個(gè)體存在的公共元素分別為〇維時(shí),稱(chēng)共點(diǎn)點(diǎn),按照只共點(diǎn)的情 況處理; 基于以上預(yù)設(shè)規(guī)則,進(jìn)行消隱過(guò)程,包括以下步驟, 步驟1,顧及拓?fù)潢P(guān)系的消隱預(yù)處理,包括進(jìn)行平面片的分類(lèi)和邊的分類(lèi), 進(jìn)行平面片的分類(lèi)如下, (i) 針對(duì)體與體之間存在只共面情況時(shí),設(shè)定公共面為不可見(jiàn)面; (ii) 針對(duì)體與體之間存在只共邊情況時(shí),本步驟不做處理; (iii) 針對(duì)體與體之間存在只共點(diǎn)情況時(shí),本步驟不做處理; 進(jìn)行邊的分類(lèi)如下, (i) 針對(duì)體與體之間存在只共面情況時(shí),公共面包含的邊暫設(shè)定為可見(jiàn)面; (ii) 針對(duì)體與體之間存在只共邊情況時(shí),暫設(shè)定公共邊為可見(jiàn)邊; (iii) 針對(duì)體與體之間存在只共點(diǎn)情況時(shí),本步驟不做處理; 步驟2,擴(kuò)展的第一類(lèi)線消隱處理,包括子步驟如下, 步驟2. 1,進(jìn)行后向面剔除,包括找到法向量與視線方向一致的平面片,這些平面片稱(chēng) 后向面,后向面設(shè)定為不可見(jiàn)面,不參與后續(xù)步驟3 ;找到法向量與視線方向不一致的平面 片,這些平面片稱(chēng)前向面,前向面設(shè)定為可見(jiàn)面; 步驟2. 2,進(jìn)行平面片的分類(lèi)如下, (i) 將通過(guò)后向面剔除找到的所有不可見(jiàn)面,加上步驟1所得所有不可見(jiàn)面,取和得到 完整的不可見(jiàn)面族; (ii) 根據(jù)通過(guò)后向面剔除找到的可見(jiàn)面得到完整的可見(jiàn)面簇; 步驟2. 3,針對(duì)僅相接于2個(gè)面的邊,進(jìn)行邊的可見(jiàn)性判定如下, (i) 相接于2個(gè)不可見(jiàn)面的邊,設(shè)定為不可見(jiàn)邊; (ii) 相接于1個(gè)可見(jiàn)面和1個(gè)不可見(jiàn)面的邊,暫設(shè)定為可見(jiàn)邊; (iii) 相接于2個(gè)可見(jiàn)面的邊,暫設(shè)定為可見(jiàn)邊; 步驟2. 4,進(jìn)行邊的分類(lèi),包括將步驟2. 3得到的所有可見(jiàn)邊,加上步驟1得到的所有 可見(jiàn)邊,取和得到完整的可見(jiàn)邊簇,步驟2. 3得到的所有不可見(jiàn)邊為完整的不可見(jiàn)邊簇; 步驟3,擴(kuò)展的第二類(lèi)線消隱處理,包括子步驟如下, 步驟3. 1,邊的細(xì)分,包括以步驟2. 4所得完整可見(jiàn)邊簇中的每條邊為潛在可見(jiàn)邊,判 斷潛在可見(jiàn)邊是否被可見(jiàn)面遮擋,當(dāng)被可見(jiàn)面部分遮擋時(shí),對(duì)此邊根據(jù)與平面片的相交情 況進(jìn)進(jìn)行裁切,裁切后的最終每條邊稱(chēng)為最簡(jiǎn)邊; 步驟3. 2,最簡(jiǎn)邊的可見(jiàn)性判定,包括采用最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性來(lái)代表整條最簡(jiǎn)邊的 可見(jiàn)性。
2. 如權(quán)利要求1所述顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法,其特征在于:步 驟3. 2,中判斷最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性如下, 最簡(jiǎn)邊的中點(diǎn)為三維空間中的點(diǎn),沿著視線方向所在的空間直線,三維空間中的點(diǎn)在 平面片所在超平面片中一定有一個(gè)投影點(diǎn);此時(shí),投影點(diǎn)和平面片位于同一個(gè)超平面中,通 過(guò)判斷投影點(diǎn)是否位于二維多邊形內(nèi),得到最簡(jiǎn)邊的中點(diǎn)的可見(jiàn)性。
3. 如權(quán)利要求1或2所述顧及拓?fù)涞娜S地理空間實(shí)體群的線消隱方法,其特征在于:根據(jù)消隱過(guò)程所得結(jié)果,最終可視化效果中可見(jiàn)線的樣式和不可見(jiàn)線的樣式都采用自定義 設(shè)置。
【文檔編號(hào)】G06T17/05GK104392489SQ201410583209
【公開(kāi)日】2015年3月4日 申請(qǐng)日期:2014年10月27日 優(yōu)先權(quán)日:2014年10月27日
【發(fā)明者】虞昌彬, 李霖, 趙志剛, 賀彪 申請(qǐng)人:武漢大學(xué)