王笑紅
摘要:醫(yī)療衛(wèi)生行業(yè)在物資庫房中需要存入大量的物資以備使用,然而物資庫房管理人員難以對庫房中大量的不同規(guī)格、不同批次,甚至不同品種的物資進行準確、直觀的管理。文章結(jié)合網(wǎng)絡(luò)圖形庫(WebGL)、空間剖分法和層次包圍盒法結(jié)合的碰撞檢測算法,對三維倉庫進行了研究及實現(xiàn),通過建立三維庫房的方式解決了上述問題的同時也為其他同類系統(tǒng)的開發(fā)提供了借鑒。
關(guān)鍵詞:三維;倉庫;WebGL;空間剖分法;層次包圍盒法
中圖分類號:TP311? ? 文獻標識碼:A
文章編號:1009-3044(2022)34-0088-03
醫(yī)療衛(wèi)生行業(yè)在診療工作中,需要使用相應(yīng)的物資配合診療工作,因此會有大量的物資被存入庫房中以備使用。然而醫(yī)療行業(yè)所用大部分物資會有同一品種多種規(guī)格、多批采購批次,但外形大體相同的情況,導(dǎo)致物資庫房管理人員難以對庫房中不同規(guī)格、不同批次,甚至不同品種的物資進行準確、直觀的管理。
現(xiàn)有的庫房中庫存物資分辨方式大多采用人工翻找、人工記錄物資庫位、在產(chǎn)品外添加RFID或二維碼等方式實現(xiàn)對外形大體相同的物資進行分辨,然而因庫房空間不足導(dǎo)致物資亂疊亂放、對庫位進行編號的方式過于粗放,不夠詳細、對庫存擺放情況的了解不夠準確直觀等原因,庫房管理者往往無法準確、直觀地對庫房中物資進行分辨和管理。在物資外添加RFID或二維碼的方式雖能夠準確分辨外形大體相同的不同物資,然而二維碼的識別距離有限,RFID的識別距離與RFID的價位掛鉤,成本較高,且外形大體相同的物資在庫房中大多因品種相似或相同等原因相鄰擺放或堆疊,在產(chǎn)品外添加RFID的方式無法解決相鄰擺放或堆疊的物資中某一種特定物資的識別問題。
為解決上述庫房中物資管理存在的諸多問題,本文對三維倉庫進行了研究及實現(xiàn),使管理人員對庫房中物資更為準確、直觀地管理,也為同類系統(tǒng)的開發(fā)提供了借鑒。
1 系統(tǒng)設(shè)計
目前較為流行、輕便的三維倉庫建模技術(shù)是基于瀏覽器/客戶端(B/S)模式的WebGL技術(shù),且B/S模式相對于客戶端/服務(wù)器(Client/Server)模式來說在便捷性上具有更高的優(yōu)勢。然而原生的WebGL語言用于三維倉庫建模過于復(fù)雜,因而選用WebGL的一個功能強大的類庫Three.js來進行三維建模。
1.1 三維物資入庫
在對物資進行入庫時,因不同物資外形差異較大,且不斷有新的不同外形的物資入庫,舊有物資因淘汰而不再使用等情況發(fā)生,對每一種物資做三維模型成本高且收益低,因此通過使用外形簡單的立方體代替外形復(fù)雜的實際物資在三維倉庫中進行入庫。在入庫時,需人工指定該物資的存放位置,在指定物資存放位置時,該物資可能會與其他已有物資產(chǎn)生穿刺或者重疊,這明顯與現(xiàn)實不符。因此添加碰撞檢測功能防止物資存放在不符合現(xiàn)實的錯誤位置。
當(dāng)前針對碰撞檢測,比較常見且有效的方法是GPU[1]加速和HBV[2]。其中GPU加速雖然能夠擺脫對CPU的消耗,提升圖像處理效果,但是成本較高,且靈活性和擴展性受限。HBV是層次包圍盒,通過一個相對規(guī)則的三維體包圍盒包裹可能較為復(fù)雜的實際物體[3],從而降低碰撞檢測的計算量,從策略和算法角度提高了碰撞檢測的適應(yīng)性[4],因此選擇層次包圍盒法進行碰撞檢測。
層次包圍盒中,有包圍球、軸對齊包圍盒(AABB包圍盒)、方向包圍盒等,其中球形包圍盒包裹的緊密性較差,方向包圍盒的構(gòu)造過程復(fù)雜,而軸對齊包圍盒構(gòu)造容易、檢測較快[5],且與實際物資外形大致相符因而包裹緊密性較好,因此在使用立方體代替實際物資時,通過填寫入庫物資的長寬高等參數(shù),在三維場景中生成代替實際物資的軸對齊長方體包圍盒,并用該包圍盒采用投影法進行碰撞檢測。投影法是通過檢測新添加的物資的包圍盒與其他物資的包圍盒在X,Y,Z坐標軸上的投影是否重合來判斷是否存在碰撞。如果新添加的包圍盒與其他包圍盒在X,Y,Z坐標軸上的投影全部重合,則該包圍盒與其他包圍盒存在碰撞,也即新添加的物資與其他物資存在碰撞,否則認為與其他物資不存在碰撞[6]。
隨著倉庫中存放的物資增多,在進行碰撞檢測時,需判斷是否與新入庫物資產(chǎn)生碰撞的物體也在增多,進行碰撞檢測的速度也會降低,而部分物體實際上與新入庫物資相距較遠,不會與新入庫物資發(fā)生碰撞。因此,為增快碰撞檢測速度,使用空間剖分法對三維立體空間進行空間剖分,僅檢測與新入庫物資處于同一空間區(qū)間的物資而不再檢測與新入庫物資處于不同空間區(qū)間從而不會與新入庫物資產(chǎn)生碰撞的物資。設(shè)定一個空間內(nèi)最大物資數(shù)量的閾值,如空間中物資數(shù)量超過閾值,則坐標軸上的剖分點生成垂直于坐標軸的分割面對空間進行剖分,將空間一分為二。在對空間進行剖分時,為避免空間占用浪費和減低計算效率,要選擇合適的剖分點[7],剖分點需滿足以該點進行剖分后,剖分出的兩個子空間中的物資數(shù)量相近且總和最少。設(shè)剖分點為x,物資e上坐標點最小值為a,最大值為b,當(dāng)a>x或者b<x時,e上坐標點都在x的一側(cè),e全部位于以x為剖分點剖分出的其中一個子空間,否則e上坐標點在x兩側(cè),e同時存在于以x為剖分點剖分出的兩個子空間內(nèi),因此,如果想讓剖分出的兩個子空間中的物資數(shù)量總和最少,則a>x和b<x的e數(shù)量最大。對a和b進行混合排序,生成序列N,剖分點x從N的最小值開始逐步增大,直到x等于N中的最大值。當(dāng)x為N的最小值時,a>x的e數(shù)量為n,b<x的e數(shù)量為0,總和為n。在x逐步增大期間,a>x的e數(shù)量減小,b<x的e數(shù)量增加。設(shè)a>x的e數(shù)量為a,b>x的e數(shù)量為b,則a>x和b<x的e數(shù)量總和為:
a+n-b=n-(b-a) (1)
因為b為e上坐標最大值,a為e上坐標最小值,所以b>x的e數(shù)量大于等于a>x的e數(shù)量,如想讓n-(b-a)最大,則b=a。因此在剖分點x逐步增大期間,記錄序列中b=a的點,取最靠近中心的b=a的點作為剖分點x的取值。
該算法類似于空間剖分法中的K-d樹,然而K-d樹是取子空間中物體數(shù)量的最小值作為閾值,小于閾值則停止剖分,然而這種剖分的方法會增加子空間的數(shù)量和空間剖分的計算量,本文所用的空間剖分算法在K-d樹的基礎(chǔ)上將子空間中物體數(shù)量的最大值作為閾值,減少了子空間的數(shù)量和空間剖分的計算量。
1.2 三維物資管理
通過對庫房和物資進行三維建模并將物資信息綁定于三維模型上,庫房管理員能夠準確、直觀地了解庫房中物資的情況,而不必人工進入庫房內(nèi)部翻找,并能夠通過綁定于三維模型上的物資信息準確、直觀地分辨出外形相似的不同物資。
鼠標點選物資后標明所選中的物資并顯示物資所綁定的相關(guān)信息。由于計算機屏幕只能顯示二維圖形,因此在表示三維模型時,會將三維場景轉(zhuǎn)換為二維場景[8],并顯示在計算機屏幕上。在用戶與三維模型做交互時,用戶是在二維場景進行操作,而三維模型處于三維場景中,因此需做二維場景和三維場景之間的坐標轉(zhuǎn)換。使用Three.js進行三維場景構(gòu)建時,三維模型在一個“畫布”中進行二維呈現(xiàn),二維場景的坐標原點在“畫布”左上角,向右為X軸正向,向下為Y軸正向,三維場景的坐標原點在“畫布”中點,向右為X軸正方向,向上為Y軸正方向,X、Y的取值范圍均為[-1,1],且二維場景坐標系與三維場景中X、Y軸在同一平面上。設(shè)二維場景中畫布長寬分別為X、Y,三維場景中坐標原點為(X,Y),則有:
X=(X-0)/2 (2)
Y=(Y-0)/2 (3)
設(shè)二維場景中畫布上任一點坐標為(X1,Y1),其所對應(yīng)的三維場景中的坐標為(X2,Y2),則有:
X=(X-X)/(X/2)=(2X/X)-1 (4)
Y=(Y-Y)/(Y/2)=1-(2Y/Y) (5)
用戶在二維場景點選三維模型時,通過將用戶點擊的二維場景坐標轉(zhuǎn)換為三維場景坐標后,在三維場景里以用戶的視點與所點擊的點做出一條射線,將射線第一個接觸到的三維模型認為是用戶想要在二維場景中點選的三維模型,并將模型上綁定的信息顯示給用戶。
為頁面添加物資搜索功能,輸入物資名稱進行搜索,搜索到該物資后,將物資的顏色變更為綠色并將視角拉到搜索到的物資處,并顯示物資所綁定的相關(guān)信息。
2 系統(tǒng)實現(xiàn)
輸入物資參數(shù),生成物資的包圍盒如圖1所示。
碰撞檢測如圖2所示。
入庫如圖3所示。
三維模型綁定物資信息如圖4所示,便于物資庫房管理人員對物資進行準確、直觀的管理。
物資搜索功能如圖5所示,使物資庫房管理人員能夠快速檢索想要尋找的物資及物資信息。
3 結(jié)論
為實現(xiàn)醫(yī)療行業(yè)物資庫房的準確、直觀管理,本文對三維倉庫進行了研究、設(shè)計和開發(fā),實現(xiàn)了物資的三維入庫和管理,并通過對空間分解法和包圍盒法的集成應(yīng)用,在充分地發(fā)揮了二者優(yōu)點的同時,解決了不同三維物資實體之間的碰撞問題。本文對三維倉庫進行的研究、設(shè)計和開發(fā),同時也為其他同類軟件的開發(fā)提供了借鑒。
參考文獻:
[1] de Lucas E,Marcuello P,Parcerisa J M,et al.Ultra-low power render-based collision detection for CPU/GPU systems[C]//2015 48th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO).Waikiki,HI,USA.IEEE,2015:445-456.
[2] 靳雁霞,任超,李照,等.融合智能算法的變形體碰撞檢測算法研究[J].計算機工程與應(yīng)用,2017,53(19):130-135.
[3] 李照.融合智能優(yōu)化算法的Snake模型變形體碰撞檢測算法研究[D].太原:中北大學(xué),2017.
[4] 惠學(xué)武,孟祥宇.融合包圍盒智能算法的虛擬場景碰撞檢測研究[J].計算機仿真,2021,38(7):209-213.
[5] 付麗敏.基于BIM的綜合管線碰撞檢測技術(shù)研究[D].西安:西安建筑科技大學(xué),2017.
[6] 彭晏飛,盧真真.基于空間剖分和包圍盒的快速碰撞檢測算法[J].計算機應(yīng)用與軟件,2015,32(8):150-153,165.
[7] 程燕飛.基于WEB的三維廠區(qū)漫游的技術(shù)研究與系統(tǒng)實現(xiàn)[D].杭州:浙江工業(yè)大學(xué),2016.
[8] 朱玲玲.自動化立體倉庫虛擬仿真系統(tǒng)的開發(fā)與設(shè)計[D].保定:河北大學(xué),2014.
【通聯(lián)編輯:梁書】