專利名稱:一種空間多連通域的封閉面自動(dòng)搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種封閉面搜索方法,尤其是涉及一種空間多連通域的封閉面自動(dòng)搜 索方法。
背景技術(shù):
自動(dòng)尋找封閉面不僅是解決某些幾何問題所需要的預(yù)處理步驟,而且在有限元網(wǎng) 格劃分、三維快速建模、模式識(shí)別、地質(zhì)學(xué)等領(lǐng)域得到廣泛應(yīng)用。封閉面是指其內(nèi)不再包含 其它線段,有有無內(nèi)邊界之分。復(fù)平面上的一個(gè)區(qū)域B,如果在其中任作一條簡(jiǎn)單閉曲線,而 曲線的內(nèi)部總屬于B,則此復(fù)平面為單連通域,否則就為多連通域。
2010年,西北工業(yè)大學(xué)的雷安民、張華梅等人提出了一種尋找平面圖形中最小封 閉線框的方法,但僅限于直線段和單連通域(《科學(xué)技術(shù)與工程》2010年04期);2012年, 中國(guó)科學(xué)院微電子研究所艾迪、周云燕提出一種二維圖形封閉區(qū)域自動(dòng)識(shí)別算法,采用以 廣度優(yōu)先遍歷搜索算法為基礎(chǔ)的單源搜索法識(shí)別圖形所有封閉區(qū)域(《電子設(shè)計(jì)工程》2012 年第07期)。
然而,以上所研究的方法主要是針對(duì)于二維平面或單連通域內(nèi)的封閉面尋找方 法,且線性多為直線。而實(shí)際中,模型的區(qū)域常為空間、多連通域,線性有直線、圓、圓弧、橢 圓、橢圓弧、樣條曲線等構(gòu)成,為了更加貼近實(shí)際工程三維建模,需尋找一種新的搜尋方法 替代已有方法。
因此,研究一種能在空間多連通域內(nèi)自動(dòng)尋找封閉面的方法已成為三維空間快速 建模的迫切需要之一。發(fā)明內(nèi)容
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種可實(shí)現(xiàn)、快速、 有效、完全自動(dòng)化的空間多連通域的封閉面自動(dòng)搜索方法,可在實(shí)際工程應(yīng)用中使預(yù)處理 步驟更加簡(jiǎn)潔,并具有更高的精度。
本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn)
一種空間多連通域的封閉面自動(dòng)搜索方法,包括以下步驟
(I)獲取線段集和控制精度,判斷所選線段是否處于同一空間平面,若是,則提取 基準(zhǔn)平面,若否,則退出
(2)對(duì)所有線段求交并在交點(diǎn)處打斷;
(3)將所有端點(diǎn)映射到基準(zhǔn)平面內(nèi),并建立端點(diǎn)與線段之間的引用關(guān)系,剔除無效 端點(diǎn)及引用該端點(diǎn)的線段;
(4)將所有端點(diǎn)按X、Y坐標(biāo)值從小到大排序,并建立各線段與端點(diǎn)位置索引值的 映射關(guān)系;
(5)運(yùn)用單點(diǎn)圍繞法逐個(gè)搜尋出每個(gè)端點(diǎn)的最小封閉區(qū)域,并將該封閉區(qū)域的外 邊線組成一個(gè)Wire ;
(6)每搜尋完一個(gè)端點(diǎn)所有的Wire后,將已遍歷過且線段引用數(shù)少于2的端點(diǎn)移除;
(7)重復(fù)步驟(5)、步驟¢),直至找到所有單連通域的線框,將同一單連通域內(nèi)的 Wire 組成一個(gè) Wire Group ;
(8)繼續(xù)遍歷,直至所有的Wire Group建立;
(9)計(jì)算出各Wire Group的線框包圍盒,依據(jù)線框包圍盒的面積從大到小排序, 并建立各Wire Group之間的拓?fù)潢P(guān)系;
(10)利用Wire Group創(chuàng)建封閉面。
所述的步驟(1)的具體步驟如下
(11)獲取線段集,計(jì)算各線段的局部坐標(biāo)系,并存儲(chǔ)到局部坐標(biāo)系容器中,線段集中,每個(gè)線段設(shè)有一個(gè)對(duì)應(yīng)的ID ;
獲取線段集時(shí),如果存在矩形,則首先將矩形在角點(diǎn)處打斷,分成四段直線,將矩形刪除,并將新生成的直線加入所選線段集中;同理,將圓和橢圓對(duì)象在0°、90°、180°、 270°處打斷;
(12)通過兩直線切向向量的向量積,產(chǎn)生一個(gè)新的局部坐標(biāo)系,并加入到步驟(11)的容器中;
(13)遍歷容器,判斷各局部坐標(biāo)系是否在同一平面內(nèi),若是,則所有的線段共面, 繼續(xù)執(zhí)行步驟(14),若否,則退出,重新獲取線段;
(14)將整體坐標(biāo)系的Z方向轉(zhuǎn)換成上述容器中任意局部坐標(biāo)系的Z方向,并將轉(zhuǎn)換后的整體坐標(biāo)系作為基準(zhǔn)平面。
所述的步驟(2)的具體步驟如下
(21)將所有線段逐個(gè)與其它線段求交,并記錄相應(yīng)交點(diǎn)在線段上的U參數(shù);
(22)依據(jù)所記錄的U參數(shù)將線段逐個(gè)分解,刪除原有線段,將新線段加入線段集中;
(23)判斷各線段是否存在重復(fù),如果存在,則刪除重復(fù)的線段。
所述的步驟(3)的具體步驟如下
(31)遍歷所有線段的端點(diǎn),通過坐標(biāo)系轉(zhuǎn)換將端點(diǎn)一一映射到基準(zhǔn)平面內(nèi),將所有空間的端點(diǎn)轉(zhuǎn)化成平面點(diǎn)集,且在映射過程中,記錄各端點(diǎn)的線段引用數(shù);
(32)遍歷所有端點(diǎn)的線段引用數(shù),判斷第i個(gè)端點(diǎn)的線段引用數(shù)Ni的值是否大于 1,若是,則繼續(xù)判斷第i+Ι個(gè)端點(diǎn)的線段引用數(shù),若否,則執(zhí)行步驟(33);
(33)將第i個(gè)端點(diǎn)與其它端點(diǎn)逐個(gè)求距離Lij,判斷是否存在minILijJ = 1,…,1-1, i+Ι,…,η}小于設(shè)定的擬合誤差,若是,則自動(dòng)將第i個(gè)端點(diǎn)及與其距離最小的端點(diǎn)進(jìn)行擬合,若否,則反饋錯(cuò)誤信息,將第i個(gè)端點(diǎn)及引用該端點(diǎn)的線段刪除。
所述的步驟(4)的具體步驟如下
(41)將所有端點(diǎn)按X、Y坐標(biāo)值從小到大排序,組成端點(diǎn)集;
(42)構(gòu)建新的拓?fù)渚€段,每一拓?fù)渚€段記錄了相對(duì)應(yīng)線段的ID和端點(diǎn)對(duì)應(yīng)的位置索引值。
所述的步驟(5)的具體步驟如下
(51)提取端點(diǎn)集的首端點(diǎn)作為搜尋的起始端點(diǎn)Ptl,計(jì)算點(diǎn)Ptl所引用的各線段在點(diǎn)Po處的切線方向向量,如果點(diǎn)Po不是線段的起始點(diǎn),則須將向量W0反向,求各向量1%與基準(zhǔn)平面X軸正向的夾角θ (Θ的值域?yàn)閇-90°,90° ]),取夾角(注非角度絕對(duì)值)Θ最小的那根線段作為搜尋起始線段;
(52)提取線段Itl非Ptl的另一個(gè)端點(diǎn)P1作為下一個(gè)搜尋端點(diǎn),如果端點(diǎn)P1的線段引用數(shù)為2,則直接將引用P1的下一條線段I1作為搜尋線段,并將搜尋端點(diǎn)移動(dòng)至線段I1 的非P1端點(diǎn);如果端點(diǎn)P1的線段引用數(shù)大于2,則計(jì)算線段Itl上點(diǎn)P1處的切線方向向量;, 如果點(diǎn)P1是線段的終點(diǎn),則須將向量;反向,計(jì)算引用端點(diǎn)P1的除線段Itl外的所有線段與向量;的夾角β (β值域?yàn)閇-180° ,180° ]),取角度β (注非角度絕對(duì)值)最小的那一根線段作為下一個(gè)搜尋線段Ii ;
(53)重復(fù)步驟(52),直至下一個(gè)搜尋端點(diǎn)回到了初始端點(diǎn)Ptl,至此一個(gè)最小的封閉框搜尋完畢。將此封閉框所路徑的端點(diǎn)和線段信息記錄到Wire中;
(54)取除線段Itl外的夾角最小的那一線段作為搜尋的起始線段,重復(fù)步驟(52)、(53),直至所有線段遍歷完畢;
(55)當(dāng)通過起始端點(diǎn)Ptl所搜尋的Wire個(gè)數(shù)Nw大于或等于該端點(diǎn)的線段引用數(shù)時(shí),說明經(jīng)過端點(diǎn)Ptl的所有最小邊框均已找到。
所述的步驟(6)的具體步驟如下
(61)由于途徑端點(diǎn)Ptl的所有最小邊框均已找到,則端點(diǎn)?(1可以移除,相應(yīng)地端點(diǎn) Po所引用的線段亦可以移除,在移除各線段時(shí),亦要從其被引用的其它端點(diǎn)中移除;
(62)通過遞歸遍歷端點(diǎn)P。所引用線段的另一端點(diǎn)Pi,逐個(gè)移除線段引用數(shù)少于2 的所有端點(diǎn);
(63)通過步驟(62),如果步驟(5)所搜索到Wire中所有的端點(diǎn)均被移除,則說明一個(gè)單連通域的線框全部找到,將這些Wire組成一個(gè)Wire Group,并提取未被刪除端點(diǎn)集中的首端點(diǎn)作為搜尋起始點(diǎn)Ptl ;如果步驟(5)所搜索到Wire中所有的端點(diǎn)還有線段引用數(shù)大于或等于2的,則將其中索引值最 小的端點(diǎn)作為搜尋起始點(diǎn)P(1。
所述的步驟(9)的具體步驟如下
(91)遍歷所有的Wire Group,逐個(gè)構(gòu)建其線框包圍盒,方法為提取出WireGroup 中所有的端點(diǎn),計(jì)算這些點(diǎn)的Χ、γ坐標(biāo)的最大值和最小值,利用Χ、γ坐標(biāo)的最小值和最大值分別組成矩形的兩個(gè)角點(diǎn),則Wire Group的線框包圍盒構(gòu)建完畢;
(92)計(jì)算此線框包圍盒的面積,并記錄此線框包圍盒所對(duì)應(yīng)Wire Group的索引值;
(93)將所有的線框包圍盒依據(jù)面積從大到小進(jìn)行排序;
(94)提取面積最大的線框包圍盒Bmax,判斷Bmax與其它的線框包圍盒Bi的拓?fù)潢P(guān)
(95)剔除線框包圍盒層層包含的情況,以確保各線框包圍盒是按從大到小依次成包含關(guān)系;
(96)至此,各Wire Group之間的拓?fù)潢P(guān)系建立完畢。
所述的Bniax與Bi的拓?fù)潢P(guān)系判斷方法如下
(941)如果二者的線框包圍盒分離,則說明Bniax與Bi分離,相互之間沒有包含關(guān)系,直接跳過,繼續(xù)遍歷下一個(gè)Wire Group對(duì)象;
(942)如果二者線框包圍盒不分離,則須進(jìn)一步判斷8_與&之間的關(guān)系首先取 Bi內(nèi)任意一點(diǎn)P,然后將Bmax放大1. 5倍,并將Bmax圍繞著矩形形心旋轉(zhuǎn)45° ;從點(diǎn)p出發(fā)向Bmax的任意一角點(diǎn)構(gòu)造一條射線,記為Ri,通過坐標(biāo)轉(zhuǎn)換將Ri轉(zhuǎn)換為三維空間的射線RT, 逐個(gè)計(jì)算Rt穿越Bmax的交點(diǎn),如果交點(diǎn)中正好有Bmax邊線的端點(diǎn)或切點(diǎn),則更換Bmax的角點(diǎn), 重新引出一條射線RT,繼續(xù)計(jì)算Rt穿越Bmax的交點(diǎn);如果交點(diǎn)數(shù)目為奇數(shù),則說明Bmax包含 Bi,否則不包含。
所述的步驟(10)的具體步驟如下
(101)如果Wire Group沒有包含對(duì)象,則為單連通域,遍歷其內(nèi)部所有的Wire直接創(chuàng)建封閉面對(duì)象;
(102)如果Wire Group有包含對(duì)象,則為多連通域,提取其包含子對(duì)象的外邊界作為Wire Group的內(nèi)邊界,倉(cāng)ll建封閉面對(duì)象;
提取Wire Group的外邊界方法為剔除Wire Group中線段引用數(shù)等于2的線段后所剩線段即為Wire Group的外邊界。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)
I)本發(fā)明解決了空間多連通域?qū)ふ曳忾]面的問題,技術(shù)方案完整且易于實(shí)現(xiàn),全自動(dòng)化尋找,無須用戶干預(yù);
2)由于對(duì)端點(diǎn)一次遍歷即可搜尋出所有的Wire,其計(jì)算效率顯著提高,時(shí)間復(fù)雜度是O (η);
3)在搜尋過程中,將許多幾何方法描述轉(zhuǎn)化為幾何拓?fù)潢P(guān)系描述,從而避免由于計(jì)算精度而引起錯(cuò)誤判斷;
4)本發(fā)明經(jīng)過大量不同封閉區(qū)域驗(yàn)證,其正確率100% ;
5)本發(fā)明提高了三維幾何建模等幾何問題的效率和精度,并可在實(shí)際工程應(yīng)用中取得令人滿意的效果。
圖1為本發(fā)明方法的流程示意圖2為本發(fā)明單點(diǎn)圍繞法的示意圖3為本發(fā)明判斷Wire Group拓?fù)潢P(guān)系的示意圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
實(shí)施例
如圖1所示,一種空間多連通域的封閉面自動(dòng)搜索方法,包括以下步驟
(I)獲取線段集和控制精度,判斷所選線段是否處于同一空間平面,若是,則提取基準(zhǔn)平面,若否,則退出,具體為
(11)獲取 線段集,計(jì)算各線段(除直線外)的局部坐標(biāo)系,并存儲(chǔ)到局部坐標(biāo)系容器中,線段集中,每個(gè)線段設(shè)有一個(gè)對(duì)應(yīng)的ID ;
獲取線段集時(shí),如果存在矩形,則首先將矩形在角點(diǎn)處打斷,分成四段直線,將矩形刪除,并將新生成的直線加入所選線段集中;同理,將圓和橢圓對(duì)象在0°、90°、180°、 270°處打斷;
(12)通過兩直線切向向量的向量積,產(chǎn)生一個(gè)新的局部坐標(biāo)系,并加入到步驟(11)的容器中;
(13)遍歷容器,判斷各局部坐標(biāo)系是否在同一平面內(nèi),若是,則所有的線段共面, 繼續(xù)執(zhí)行步驟(14),若否,則不能生成封閉面,退出,重新獲取線段;
(14)將整體坐標(biāo)系的Z方向轉(zhuǎn)換成上述容器中任意局部坐標(biāo)系的Z方向,并將轉(zhuǎn)換后的整體坐標(biāo)系作為基準(zhǔn)平面。
(2)將所有線段逐個(gè)與其它線段求交,并記錄相應(yīng)交點(diǎn)在線段上的U參數(shù)(如果交點(diǎn)為線的端點(diǎn)則不用記錄),依據(jù)所記錄的U參數(shù)將線段逐個(gè)分解,刪除原有線段,將新線段加入線段集中,判斷各線段是否存在重復(fù),如果存在,則刪除重復(fù)的線段。
U參數(shù)是曲線函數(shù)的一個(gè)變量,在解析幾何里,曲線常用參數(shù)表示,例如一個(gè)三維坐標(biāo)點(diǎn)可以寫成參數(shù)U的函數(shù)X = X(U)、Y = Y(U)、Z = Z(U)。對(duì)于直線,U表示長(zhǎng)度;對(duì)于圓弧、圓,U則表不角度。
(3)將所有端點(diǎn)映射到基準(zhǔn)平面內(nèi),并建立端點(diǎn)與線段之間的引用關(guān)系,剔除無效端點(diǎn)及引用該端點(diǎn)的線段,具體為
(31)遍歷所有線段的端點(diǎn),通過坐標(biāo)系轉(zhuǎn)換將端點(diǎn)一一映射到基準(zhǔn)平面內(nèi),將所有空間的端點(diǎn)轉(zhuǎn)化成平面點(diǎn)集,且在映射過程中,記錄各端點(diǎn)的線段引用數(shù);
(32)遍歷所有端點(diǎn)的線段引用數(shù),判斷第i個(gè)端點(diǎn)的線段引用數(shù)Ni的值是否大于 1,若是,則繼續(xù)判斷第i+Ι個(gè)端點(diǎn)的線段引用數(shù),若否,則執(zhí)行步驟(33);
(33)將第i個(gè)端點(diǎn)與其它端點(diǎn)逐個(gè)求·距離Lij,判斷是否存在HiinILij = 1,…,1-1, i+Ι,…,η}小于設(shè)定的擬合誤差,若是,則自動(dòng)將第i個(gè)端點(diǎn)及與其距離最小的端點(diǎn)進(jìn)行擬合,若否,則反饋錯(cuò)誤信息,將第i個(gè)端點(diǎn)及引用該端點(diǎn)的線段刪除?!?br>
(4)將所有端點(diǎn)按X、Y坐標(biāo)值從小到大排序,并建立各線段與端點(diǎn)位置索引值的映射關(guān)系,構(gòu)建新的拓?fù)渚€段TPLine,每一拓?fù)渚€段記錄了相對(duì)應(yīng)線段的ID和端點(diǎn)對(duì)應(yīng)的位置索引值,TPLine數(shù)據(jù)結(jié)構(gòu)為
struct TPLineint nObjID;//對(duì)應(yīng)線段的IDint nNodeldxI; //線起點(diǎn)的位置索引值 intnNodeIdx2; //線終點(diǎn)的位置索引值
(5)運(yùn)用單點(diǎn)圍繞法逐個(gè)搜尋出每個(gè)端點(diǎn)的最小封閉區(qū)域,并將該封閉區(qū)域的外邊線組成一個(gè)Wire (線框),具體為
(51)提取端點(diǎn)集的首端點(diǎn)作為搜尋的起始端點(diǎn)Ptl,計(jì)算點(diǎn)Ptl所引用的各線段在點(diǎn) Po處的切線方向向量W1J,如果點(diǎn)Pci不是線段的起始點(diǎn),則須將向量《O反向,求各向量《O與基準(zhǔn)平面X軸正向的夾角θ (Θ的值域?yàn)閇-90°,90° ]),取夾角Θ (注非角度絕對(duì)值)最小的那根線段作為搜尋起始線段Itl ;
(52)如圖2所示,提取線段Itl非Ptl的另一個(gè)端點(diǎn)P1作為下一個(gè)搜尋端點(diǎn),如果端點(diǎn)P1的線段引用數(shù)為2,則直接將引用P1的下一條線段I1作為搜尋線段,并將搜尋端點(diǎn)移動(dòng)至線段I1的非P1端點(diǎn);如果端點(diǎn)P1的線段引用數(shù)大于2,則計(jì)算線段Itl上點(diǎn)P1處的切線方向向量;,如果Ap1是線段的終點(diǎn),則須將向量;反向,計(jì)算引用端點(diǎn)P1的除線段Itl外的所有線段與向量士的夾角β (β的值域?yàn)閇-180° ,180° ]),取角度β (注非角度絕對(duì)值)最小的那一根線段作為下一個(gè)搜尋線段Ii
(53)重復(fù)步驟(52),直至下一個(gè)搜尋端點(diǎn)回到了初始端點(diǎn)Ptl,至此一個(gè)最小的封閉框搜尋完畢。將此封閉框所路徑的端點(diǎn)和線段信息記錄到Wire中;
Wire數(shù)據(jù)結(jié)構(gòu)
權(quán)利要求
1.一種空間多連通域的封閉面自動(dòng)搜索方法,其特征在于,包括以下步驟;(1)獲取線段集和控制精度,判斷所選線段是否處于同一空間平面,若是,則提取基準(zhǔn)平面,執(zhí)行步驟(2),若否,則退出;(2)對(duì)所有線段求交并在交點(diǎn)處打斷;(3)將所有端點(diǎn)映射到基準(zhǔn)平面內(nèi),并建立端點(diǎn)與線段之間的引用關(guān)系,剔除無效端點(diǎn)及引用該端點(diǎn)的線段;(4)將所有端點(diǎn)按X、Y坐標(biāo)值從小到大排序,并建立各線段與端點(diǎn)位置索引值的映射關(guān)系;(5)運(yùn)用單點(diǎn)圍繞法逐個(gè)搜尋出每個(gè)端點(diǎn)的最小封閉區(qū)域,并將該封閉區(qū)域的外邊線組成一個(gè)Wire ;(6)每搜尋完一個(gè)端點(diǎn)所有的Wire后,將已遍歷過且線段引用數(shù)少于2的端點(diǎn)移除;(7)重復(fù)步驟(5)、步驟¢),直至找到所有單連通域的線框,將同一單連通域內(nèi)的Wire 組成一個(gè) Wire Group ;(8)繼續(xù)遍歷,直至所有的WireGroup建立;(9)計(jì)算出各WireGroup的線框包圍盒,依據(jù)線框包圍盒的面積從大到小排序,并建立各Wire Group之間的拓?fù)潢P(guān)系;(10)利用WireGroup創(chuàng)建封閉面。
2.根據(jù)權(quán)利要求1所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(I)的具體步驟如下(11)獲取線段集,計(jì)算各線段的局部坐標(biāo)系,并存儲(chǔ)到局部坐標(biāo)系容器中,線段集中, 每個(gè)線段設(shè)有一個(gè)對(duì)應(yīng)的ID ;獲取線段集時(shí),如果存在矩形,則首先將矩形在角點(diǎn)處打斷,分成四段直線,將矩形刪除,并將新生成的直線加入所選線段集中;同理,將圓和橢圓對(duì)象在0°、90°、180°、 270°處打斷;(12)通過兩直線切向向量的向量積,產(chǎn)生一個(gè)新的局部坐標(biāo)系,并加入到步驟(11)的容器中;(13)遍歷容器,判斷各局部坐標(biāo)系是否在同一平面內(nèi),若是,則所有的線段共面,繼續(xù)執(zhí)行步驟(14),若否,則退出,重新獲取線段;(14)將整體坐標(biāo)系的Z方向轉(zhuǎn)換成上述容器中任意局部坐標(biāo)系的Z方向,并將轉(zhuǎn)換后的整體坐標(biāo)系作為基準(zhǔn)平面。
3.根據(jù)權(quán)利要求1所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(2)的具體步驟如下(21)將所有線段逐個(gè)與其它線段求交,并記錄相應(yīng)交點(diǎn)在線段上的U參數(shù);(22)依據(jù)所記錄的U參數(shù)將線段逐個(gè)分解,刪除原有線段,將新線段加入線段集中;(23)判斷各線段是否存在重復(fù),如果存在,則刪除重復(fù)的線段。
4.根據(jù)權(quán)利要求2所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(3)的具體步驟如下(31)遍歷所有線段的端點(diǎn),通過坐標(biāo)系轉(zhuǎn)換將端點(diǎn)一一映射到基準(zhǔn)平面內(nèi),將所有空間的端點(diǎn)轉(zhuǎn)化成平面點(diǎn)集,且在映射過程中,記錄各端點(diǎn)的線段引用數(shù);(32)遍歷所有端點(diǎn)的線段引用數(shù),判斷第i個(gè)端點(diǎn)的線段引用數(shù)Ni的值是否大于1, 若是,則繼續(xù)判斷第i+Ι個(gè)端點(diǎn)的線段引用數(shù),若否,則執(zhí)行步驟(33);(33)將第i個(gè)端點(diǎn)與其它端點(diǎn)逐個(gè)求距離Lij,判斷是否存在minILij, j = I, ···,1-1, i+1,…,η}小于設(shè)定的擬合誤差,若是,則自動(dòng)將第i個(gè)端點(diǎn)及與其距離最小的端點(diǎn)進(jìn)行擬合,若否,則反饋錯(cuò)誤信息,將第i個(gè)端點(diǎn)及引用該端點(diǎn)的線段刪除。
5.根據(jù)權(quán)利要求1所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(4)的具體步驟如下(41)將所有端點(diǎn)按X、Y坐標(biāo)值從小到大排序,組成端點(diǎn)集;(42)構(gòu)建新的拓?fù)渚€段,每一拓?fù)渚€段記錄了相對(duì)應(yīng)線段的ID和端點(diǎn)對(duì)應(yīng)的位置索引值。
6.根據(jù)權(quán)利要求5所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(5)的具體步驟如下(51)提取端點(diǎn)集的首端點(diǎn)作為搜尋的起始端點(diǎn)Pd,計(jì)算點(diǎn)PtI所引用的各線段在點(diǎn)Pd 處的切線方向向量《O,如果點(diǎn)Pci不是線段的起始點(diǎn),則將向量《O反向,求各向量Wo與基準(zhǔn)平面X軸正向的夾角θ,Θ的值域?yàn)閇-90°,90° ],取夾角Θ最小的那根線段作為搜尋起始線段Itl ;(52)提取線段Itl非Ptl的另一個(gè)端點(diǎn)P1作為下一個(gè)搜尋端點(diǎn),如果端點(diǎn)P1的線段引用數(shù)為2,則直接將引用P1的下一條線段I1作為搜尋線段,并將搜尋端點(diǎn)移動(dòng)至線段I1的非 P1端點(diǎn);如果端點(diǎn)P1的線段引用數(shù)大于2,則計(jì)算線段Itl上點(diǎn)P1處的切線方向向量士,如果點(diǎn)P1是線段的終點(diǎn),則須將向量;反向,計(jì)算引用端點(diǎn)P1的除線段Itl外的所有線段與向量士的夾角β,β的值域?yàn)閇-180° ,180° ],取角度β最小的那一根線段作為下一個(gè)搜尋線段Ii;(53)重復(fù)步驟(52),直至下一個(gè)搜尋端點(diǎn)回到了初始端點(diǎn)Ptl,至此一個(gè)最小的封閉框搜尋完畢,將此封閉框所路徑的端點(diǎn)和線段信息記錄到Wire中;(54)取除線段Itl外的夾角最小的那一線段作為搜尋的起始線段,重復(fù)步驟(52)、 (53),直至所有線段遍歷完畢;(55)當(dāng)通過起始端點(diǎn)Ptl所搜尋的Wire個(gè)數(shù)Nw大于或等于該端點(diǎn)的線段引用數(shù)時(shí),說明經(jīng)過端點(diǎn)Ptl的所有最小邊框均已找到。
7.根據(jù)權(quán)利要求6所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟出)的具體步驟如下(61)由于途徑端點(diǎn)P。的所有最小邊框均已找到,則端點(diǎn)P??梢砸瞥鄳?yīng)地端點(diǎn)P。所引用的線段亦可以移除,在移除各線段時(shí),亦要從其被引用的其它端點(diǎn)中移除;(62)通過遞歸遍歷端點(diǎn)Ptl所引用線段的另一端Api,逐個(gè)移除線段引用數(shù)少于2的所有端點(diǎn);(63)通過步驟(62),如果所搜索到Wire中所有的端點(diǎn)均被移除,則說明一個(gè)單連通域的線框全部找到,將這些Wire組成一個(gè)Wire Group,并提取未被刪除端點(diǎn)集中的首端點(diǎn)作為搜尋起始點(diǎn)Ptl ;如果所搜索到Wire中所有的端點(diǎn)還有線段引用數(shù)大于或等于2的,則將其中索引值最小的端點(diǎn)作為搜尋起始點(diǎn)Po。
8.根據(jù)權(quán)利要求7所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(9)的具體步驟如下(91)遍歷所有的WireGroup,逐個(gè)構(gòu)建其線框包圍盒,方法為提取出WireGroup中所有的端點(diǎn),計(jì)算這些點(diǎn)的X、Y坐標(biāo)的最大值和最小值,利用Χ、Υ坐標(biāo)的最小值和最大值分別組成矩形的兩個(gè)角點(diǎn),則Wire Group的線框包圍盒構(gòu)建完畢;(92)計(jì)算此線框包圍盒的面積,并記錄此線框包圍盒所對(duì)應(yīng)WireGroup的索引值;(93)將所有的線框包圍盒依據(jù)面積從大到小進(jìn)行排序;(94)提取面積最大的線框包圍盒Bmax,判斷Bmax與其它的線框包圍盒Bi的拓?fù)潢P(guān)系;(95)剔除線框包圍盒層層包含的情況,以確保各線框包圍盒是按從大到小依次成包含關(guān)系;(96)至此,各WireGroup之間的拓?fù)潢P(guān)系建立完畢。
9.根據(jù)權(quán)利要求8所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的Bniax與Bi的拓?fù)潢P(guān)系判斷方法如下(941)如果二者的線框包圍盒分離,則說明Bmax與Bi分離,相互之間沒有包含關(guān)系,直接跳過,繼續(xù)遍歷下一個(gè)Wire Group對(duì)象;(942)如果二者線框包圍盒不分離,則須進(jìn)一步判斷8_與&之間的關(guān)系首先取Bi內(nèi)任意一點(diǎn)P,然后將Bmax放大1. 5倍,并將Bmax圍繞著矩形形心旋轉(zhuǎn)45° ;從點(diǎn)P出發(fā)向Bmax 的任意一角點(diǎn)構(gòu)造一條射線,記為Ri,通過坐標(biāo)轉(zhuǎn)換將Ri轉(zhuǎn)換為三維空間的射線Rt,逐個(gè)計(jì)算Rt穿越Bmax的交點(diǎn),如果交點(diǎn)中正好有Bmax邊線的端點(diǎn)或切點(diǎn),則更換Bmax的角點(diǎn),重新引出一條射線RT,繼續(xù)計(jì)算Rt穿越Bmax的交點(diǎn);如果交點(diǎn)數(shù)目為奇數(shù),則說明Bmax包含Bi,否則不包含。
10.根據(jù)權(quán)利要求8所述的一種空間多連通域自動(dòng)尋找封閉面的方法,其特征在于,所述的步驟(10)的具體步驟如下(101)如果WireGroup沒有包含對(duì)象,則為單連通域,遍歷其內(nèi)部所有的Wire直接創(chuàng)建封閉面對(duì)象;(102)如果WireGroup有包含對(duì)象,則為多連通域,提取其包含子對(duì)象的外邊界作為 Wire Group的內(nèi)邊界,倉(cāng)ll建封閉面對(duì)象;提取Wire Group的外邊界方法為剔除Wire Group中線段引用數(shù)等于2的線段后所剩線段即為Wire Group的外邊界。
全文摘要
本發(fā)明涉及一種空間多連通域的封閉面自動(dòng)搜索方法,包括以下步驟獲取線段集和控制精度,判斷所選線段是否處于同一空間平面,若是,則提取基準(zhǔn)平面對(duì)所有線段求交并在交點(diǎn)處打斷;將所有端點(diǎn)映射到基準(zhǔn)平面內(nèi);建立各線段與端點(diǎn)位置索引值的映射關(guān)系;運(yùn)用單點(diǎn)圍繞法逐個(gè)搜尋出每個(gè)端點(diǎn)的最小封閉區(qū)域,并將該封閉區(qū)域的外邊線組成一個(gè)Wire將同一單連通域內(nèi)的Wire組成一個(gè)WireGroup,直至所有的Wire Group建立;計(jì)算出各Wire Group的線框包圍盒,建立各Wire Group之間的拓?fù)潢P(guān)系,利用Wire Group創(chuàng)建封閉面。與現(xiàn)有技術(shù)相比,本發(fā)明具有可實(shí)現(xiàn)、快速、有效、完全自動(dòng)化等優(yōu)點(diǎn)。
文檔編號(hào)G06T7/00GK103065319SQ20121059256
公開日2013年4月24日 申請(qǐng)日期2012年12月31日 優(yōu)先權(quán)日2012年12月31日
發(fā)明者朱合華, 劉新根, 劉學(xué)增, 林小平, 周德成, 齊磊, 彭丹, 張 杰 申請(qǐng)人:上海同巖土木工程科技有限公司, 同濟(jì)大學(xué)