2010-08-02 56 views
3

我認爲掃描意味着確定對象是否會在某個時刻發生碰撞,而不僅僅是他們當前是否發生碰撞,但如果我錯了告訴我。掃描AABB碰撞的僞代碼

我有一個對象,有界框在軸上對齊。對象的框可以是不同的大小,但它們總是矩形的。

我試過並試圖找出算法來確定兩個移動的AABB對象是否會在某個點發生碰撞,但我的確很難。我在這裏讀到一個關於確定兩個物體在某個時刻會經過的時間間隔的問題,而且我沒有任何問題想象它,但是實現它是另一回事。似乎有太多的例外,並且我似乎沒有正確地做。

對象只能以直線移動(儘管顯然它們可以改變方向,例如轉向,但它們總是在軸上,如果它們試圖關閉軸則不起作用) ,並綁定到該軸。他們有界的盒子不旋轉或做任何事情。速度可以改變,但這並不重要,因爲該方法的關鍵在於確定物體當前的狀態是否處於「碰撞過程」。如果您需要更多信息,請告訴我。

如果有人可以提供一些很好的僞代碼(或真實代碼)。我讀了一個名爲Intersection of Convex Objects: The Method of Separating Axes的文檔,但我不明白其中的一些僞代碼(聯合意味着什麼)?

任何幫助表示讚賞,感謝。

回答

1

當碰撞發生時,箱子會碰到一邊。你可以檢查他們是否會碰到雙方(LR,RL,UD,DU)。

如果它可以簡化問題,則可以翻譯這些框,以便第一個框位於原點並且不移動。

類似下面的代碼:

dLR = B.L - A.R; 
dRL = A.L - B.R; 
dUD = B.U - A.D; 
dDU = A.U - B.D; 

vX = A.xV - B.xV; 
vY = A.yV - B.yV; 

tLR = dLR/vX; 
tRL =-dRL/vX; 
tUD = dUD/vY; 
tDU =-dDU/vY; 

hY = dUD + dDU; //combined height 
hX = dLR + dRL; 

if((tLR > 0) && (abs(dDU + vY*tLR) < hY)) return true; 
if((tRL > 0) && (abs(dUD - vY*tRL) < hY)) return true; 
if((tUD > 0) && (abs(dRL + vX*tUD) < hX)) return true; 
if((tDU > 0) && (abs(dLR - vX*tDU) < hX)) return true; 
return false; 
+0

這讓我在正確的軌道上!謝謝! – random 2010-08-02 23:21:25