2013-07-15 67 views
2

我目前正在爲android做一個簡單的空間遊戲。我的碰撞檢測將使用矩形和圓形邊界框完成。這些邊界框需要能夠旋轉,所以我的問題是:什麼是最好的檢測旋轉矩形和圓形之間的碰撞?感謝您的幫助:)二維包圍盒碰撞與旋轉

+0

你使用的是引擎還是什麼?當您使用現有的遊戲引擎時,解決方案可能會有所不同,而不是自行構建所有內容。 – TheWhiteLlama

+0

天真的做法?在矩形的每一邊採樣N個點,檢查是否有任何點在圓內。我很好奇數學上更高效的方法是什麼。 – arynaq

+0

對不起,我沒有使用引擎,只有本地代碼。我絕對對最有效的方法感興趣,因爲它會導致更好的碰撞檢測 – slayerpjo

回答

0

好吧,我已經解決了我自己的問題!只有兩種情況:圓形與矩形相交時: 1.圓形的中心位於矩形內 2.圓形與矩形的其中一邊相交 因此爲了檢查碰撞,我首先檢查是否圓的中心在矩形內部,根據矩形的旋轉旋轉圓的中心,以簡化我的計算。如果圓的中心在矩形內,我知道有一個交點,並返回true。 如果第一個檢查返回false,那麼我檢查矩形的每一邊和圓形之間的交點。如果有交集,我會返回true。隨意評論,如果有人想要的代碼,感謝幫助傢伙! :)

-1

一般而言,邊界框只是定義邊界的物體的,(由對象的最大&分鐘的X & Y的頂點生成的形狀) - 這使得它更易於計算,邊界框不需要旋轉,因爲我們已經解釋了它們的目的。如果你想使用它們碰撞檢測只需檢查圓圈加上其半徑的中心相交的兩個軸,如矩形:

public boolean boxintersectscircle(BoundingBox box, BoundingCircle circle) { 
    if (box.x > circle.centerx+circle.radius) return false; 
    if (box.y > circle.centery+circle.radius) return false; 
    if (box.x+box.width < circle.centerx-circle.radius) return false; 
    if (box.y+box.height < circle.centery-circle.radius) return false; 
    return true; 
} 

然而邊框是不準確的 - 他們可以留下很多空閒的空間,所以如果這是你的遊戲的擔心(玩家沮喪),我個人會實施分離軸定理或線/圓檢測。

+0

如果邊界框未旋轉,這將會很好。這個問題涉及到旋轉包圍盒 – TheWhiteLlama

+0

所以我會更好地使用不涉及包圍盒的解決方案嗎?我的印象是,如果一個邊界框旋轉,邊界框仍然是一個邊界框... – slayerpjo

+0

我不能無限期地說什麼解決方案對你來說是最好的,因爲我不知道你的遊戲(我正在考慮沿線的街機遊戲「小行星」),但如果你想要無瑕疵的碰撞檢測,我建議分離軸定理。 –