我目前正在爲android做一個簡單的空間遊戲。我的碰撞檢測將使用矩形和圓形邊界框完成。這些邊界框需要能夠旋轉,所以我的問題是:什麼是最好的檢測旋轉矩形和圓形之間的碰撞?感謝您的幫助:)二維包圍盒碰撞與旋轉
回答
好吧,我已經解決了我自己的問題!只有兩種情況:圓形與矩形相交時: 1.圓形的中心位於矩形內 2.圓形與矩形的其中一邊相交 因此爲了檢查碰撞,我首先檢查是否圓的中心在矩形內部,根據矩形的旋轉旋轉圓的中心,以簡化我的計算。如果圓的中心在矩形內,我知道有一個交點,並返回true。 如果第一個檢查返回false,那麼我檢查矩形的每一邊和圓形之間的交點。如果有交集,我會返回true。隨意評論,如果有人想要的代碼,感謝幫助傢伙! :)
一般而言,邊界框只是定義邊界的物體的,(由對象的最大&分鐘的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;
}
然而邊框是不準確的 - 他們可以留下很多空閒的空間,所以如果這是你的遊戲的擔心(玩家沮喪),我個人會實施分離軸定理或線/圓檢測。
如果邊界框未旋轉,這將會很好。這個問題涉及到旋轉包圍盒 – TheWhiteLlama
所以我會更好地使用不涉及包圍盒的解決方案嗎?我的印象是,如果一個邊界框旋轉,邊界框仍然是一個邊界框... – slayerpjo
我不能無限期地說什麼解決方案對你來說是最好的,因爲我不知道你的遊戲(我正在考慮沿線的街機遊戲「小行星」),但如果你想要無瑕疵的碰撞檢測,我建議分離軸定理。 –
- 1. OpenGL:三維盒子陣列包圍盒碰撞
- 2. cocos2d精靈碰撞檢測包圍盒
- 3. C++包圍盒三角形碰撞
- 4. 包圍盒碰撞檢測算法
- 5. SFML包圍盒碰撞檢測
- 6. XNA二維碰撞檢測
- 7. 與旋轉矩形的碰撞
- 8. 2D旋轉矩形碰撞
- 9. 旋轉矩形碰撞
- 10. Java - 旋轉矩形碰撞
- 11. 旋轉的碰撞邊界
- 12. 黑莓手機版 - java - 二維幾何與碰撞包
- 13. Scenekit凹碰撞盒
- 14. 與另一個碰撞時旋轉/旋轉物體
- 15. CharaterController與其他盒子碰撞器的碰撞問題
- 16. C++ allegro程序包圍盒碰撞關閉
- 17. 基於XNA瓦片的包圍盒碰撞 - 靠牆滑動
- 18. 二維運動中的碰撞檢測
- 19. HTML Canvas遊戲:二維碰撞檢測
- 20. 二維碰撞檢測有趣
- 21. 最好的二維碰撞檢測
- 22. 二維碰撞檢測不起作用
- 23. AS3二維矩形碰撞阻塞
- 24. 二維碰撞解析系統
- 25. 簡單的二維碰撞檢測C++
- 26. 二維地形+ java中的碰撞
- 27. 二維邊界框碰撞,牆壁
- 28. 二維多邊形對撞機不會導致與二維多邊形對撞機碰撞
- 29. AS3 +碰撞盒+ papervision3d + jiglib
- 30. 自定義碰撞盒
你使用的是引擎還是什麼?當您使用現有的遊戲引擎時,解決方案可能會有所不同,而不是自行構建所有內容。 – TheWhiteLlama
天真的做法?在矩形的每一邊採樣N個點,檢查是否有任何點在圓內。我很好奇數學上更高效的方法是什麼。 – arynaq
對不起,我沒有使用引擎,只有本地代碼。我絕對對最有效的方法感興趣,因爲它會導致更好的碰撞檢測 – slayerpjo