簡體   English   中英

java中的兩行碰撞檢測(Android)

[英]Collision detection of 2 lines in java (Android)

很簡單的問題。 如何使用Java繪制的線條實現碰撞檢測? 只是線條。 沒有矩形,圓形或圖像,位圖......只是線條。

順便說一句,這些線不直。 它們由數百條非常小的線條構成,這些線條代表玩家的移動(當他們移動時他們的gps坐標),因此當玩家移動時,它們會在整個地方蜿蜒。 所有線都連接在一起。 一行的終點是下一行的起點,依此類推。 在這方面,這是一條不間斷的路線。 沒有差距。

我嘗試將行的起始點的x,y值存儲在一個數組中,然后遍歷此數組以確定該點之前是否已被訪問過。 如果玩家再次訪問精確的坐標,這很好,但是如果他在這些記錄點之間的某個位置怎么辦?

如果它有幫助,這就是問題的背景。 但主要問題是我的重點。 如何在Java中實現線路的碰撞檢測?

據我所知,你正在以適當的方式做到這一點。 我建議可能通過坐標位置對線進行散列,以便減少線檢查。 如果估計更大的直線(由平均較小的線組成)並用於檢查,您還可以減少檢查的數量。

如果我理解正確,你的問題不是嚴格的行交叉(可以在網上輕松找到),但如何處理數百個?

也許您應該考慮數據的空間結構來限制計算。 以“ 四叉樹 ”為例。

您只能在所有坐標的子集上測試交點。

您所謂的一行,您可以調用List<Line2D> - 直線段列表。 如果你有List<Line2D> aList<Line2D> b ,那么你想要將a中的每一行與b中的每一行進行比較。 我假設你可以看到如何找到兩個直線段的交叉點 - 或者Line2D甚至會為你做這個 例如:

for(Line2D line1 : a) {
   for(Line2D line2 : b) {
      if(a.intersectsLine(b)) {
         return true;
      }
   }
}
return false;

現在這段代碼不會很快,但可能足夠快。 如果它太慢,那么你將不得不考慮優化 - 這可以通過多種方式完成,四邊形或一維排序是兩個明顯的簡單步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM