2011-05-05 26 views
4

我使用的是這裏所描述的算法的實現:http://www.codezealot.org/archives/55分離軸定理:查找其邊緣法線使用

使用此實現,當我想找到兩個碰撞矩形的最小位移向量算法有時候(在兩種情況中的一種情況下是準確的)會給我一個錯誤的「方向」,其中一個矩形需要按下,以便遠離與其碰撞的矩形。它將產生與它應該進入的方向完全相反的方向。

這是因爲(當然)矩形的兩個相對邊緣在數學上當然是相似的,因此產生相同的結果。

這是該算法在Java中實現:

http://pastebin.com/fgAwBsGv

你可以假設Vector2f,Projection2D等功能正常,併產生正確的價值觀。順便說一句,

我使用左手法線,因爲多邊形逆時針組裝。原則上,這應該是足夠的,因爲左手法線總是指向遠離多邊形。問題在於,由於矩形的相對邊的兩個重疊部分將完全相同,所以該算法將簡單地使用第一個和其相應的軸。

感謝您的幫助!

回答

9

嘿,我忘了,我創造了這個問題,前一陣子,所以我現在要回答這個問題的情況下,其他人有同樣的問題:

的解決方案是簡單地圍繞位移矢量轉(將它乘以-1),如果它指向物體需要被推開的形狀。

要找出位移矢量是否指向形狀,首先必須從對象a到對象b的大致方向減去它們的中心。之後,檢查位移矢量與剛剛創建的方向(a,b)矢量之間的點積。如果它> 0,則位移矢量和方向(a,b)指向相同的方向,因此您需要翻轉位移矢量。