Lin-Canny演算法求解凸包間的最近點對

來源:互聯網
上載者:User

求解凸包間的最近點對是幾算幾何中一個非常有用的演算法,經常被用在諧如碰撞檢測、物理引擎等圖形學相關的領域,而且該演算法的效率對於最終整個系統的效能有著相當關鍵的制約。常規的對於幾何體之間的最近點對求解一般即是暴力的遍曆演算法,這種效率太過於低下,不具有普遍的適用意義,尤其是在一個較大的碰撞系統裡邊。因而,Lin以及Canny等人提出了漸進式求解的Lin-Canny演算法。

Lin-Canny演算法的主要用途即是求解兩個凸包幾何體間的最近距離(或最近點對等)。它的實現基礎首先是將幾何體元進行分類,即:點、邊(三維線段)、面(有限面片),進而將兩個凸包中的幾何體元組成基本的幾何體元對:點-點、點-邊、點-面、邊-邊、邊-面、面-面。如此一來,對於兩個幾何體之間的最近點對可能出現的位置即歸結到了上述六種體元對之間。

LC的高效實現中,另外一個關鍵的概念即是三維Voronoi地區(3D Voronoi Area,
VA),它是二維Voronoi地區的升維擴充。對於一種由基於幾何體元組成的體元對A和B來說,A
的Voronoi地區即是指,在此地區內定可以獲得B上到A的最近點對,而在此地區則不一定能得到這樣的最近點對。Voronoi地區是LC演算法相對於暴力遍曆演算法進行效率提升的一個重要基礎。一般來說,對於凸包上的點所對應的VA就是由它所關聯到的若干條邊所對應的在該點上的垂面所包圍而成,VA的方向為凸包在該點上由內向外的方向。對於每條邊所對應的VA則是由四個平麵包圍而成,其中兩個平面為該邊所關聯的兩個面片在該條邊處所對應的垂面,另外兩個則是由該邊的過其兩個端點的垂面。對於組成凸包的面片所對應的VA則是由垂直於該面片且過組成該面片的幾條邊的平麵包圍而成。對於三維空間中的三種基本體元:點、邊、面所對應的各自的Voronoi地區可見所示。

          
             

                          
點和邊的VA地區示意                                                                                   面片的VA地區示意

 

得到了凸包中的每個基本幾何體元所對應的VA之後,即可進行基於VA的LC演算法。首先,來瞭解一下基於VA的基本體元對之間的最近點對的求解方法。

1.      
點-點

對於來自不同幾何體的兩個頂點,判斷其是否是最近點對。如果這兩個點組成了最近點對,那麼它們之間必定滿足: A處於B所對應的VA域內;B處於A所對應的VA域內。

2.      
點-邊

對於由點和邊組成的體元對,首先求解出點到該邊(即線段)間的最近點對,接著判斷該最近點對是否是原始凸包的最近點對。假設點A到邊E上的最近點為P,則判斷標準為:A處於E所對應的VA域內;P處於A所對應的VA域內。如果條件滿足,則可以得到由邊點計算而來的最近點對(A,P)。

3.      
點-面

同樣,此種情況需要先求解出點到面片上的最近點對,接著進行VA檢驗。假設A到面片F上的最近點為P:A處於F所對應的VA域內;P處於A所對應的VA域內。

有了上述三種基於體元對間的VA判斷以後,基本上相當於已經實現了LC演算法,對於其它三種基本體元對的判斷,均是做相應的處理之後轉為上述三種情況中的一種,並接著進行演算法的判斷操作,直至得到最終的解。

4.      
邊-邊

首先,求解出邊-邊(線段-線段)間的最近點對,這裡要保證得到的最近點對均處於線段之上。進而分別以各個點與另外一條邊為體元對,做2情況的判斷。

5.      
邊-面

同樣,求解出邊-面間的最近點對,類同於情況4歸結為前3種情況中的一種後繼續進行判斷。

6.      
面-面

最後,對於面-面間的情況。一般情況下來說,對於兩個凸包間的最近點對分別出現於個集合的面片上的情況較少,因而在此處的判斷方法同樣是做類型變換。首先,需要對特殊情況進行一些處理,判斷兩個面片是否平行,如果平行,則判斷其間中否有重疊的情況,這裡的重疊是指在平面的法向量上觀察兩面片是否有相交,若有,則重疊部分中任取一對點即是相應的最近點對。若兩個面片不平行或是平行而無重疊,則求出兩個面片之間的最近邊對來組成新的幾何體元對接著進行之後的檢測。

    

        LC演算法的實現主要以上述幾種基本體元之間的情形做為基本情形進而進行漸進式的近點對求解,而且每兩次基本體元對之間的轉換必定使得求得到有效距離變得更小,直到求出最終的最近點對時得到最小的凸包間距離。這種實現方法也正是LC演算法相對於傳統暴力演算法的效率提高優勢所在。本人在實現了基於LC與暴力演算法的最近點對求解之後得到了如下的資料對比,從中可見LC演算法的效率提升是相當可觀的。

 

Lin Canny演算法

暴力演算法

平均幀速

827.61

722.14

 

上述實現主要用Lin-Canny演算法求解兩個凸包幾何體之間的最近點對,並不能直接求解非凸包體間的最近體元。但是可以對於非凸包的幾何體做一些預先處理,比如凸組件的分解等,進行將其組織成一棵空間劃分樹,再使用該演算法來求解其間的距離。另外,改進的LC演算法也可以用於求解兩個幾何體元間的最近距離,包括髮生碰撞檢測時的幹涉距離等,這也就為碰撞檢測以及物理引擎系統中的某些關鍵計算提出了一種很好的解決方案。

Demo下載:http://dl.dbank.com/c0fxescdb6#。示範如下:

           
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.