我有大量的2D線段。我想用 kd-tree結構來表示它們,然後通過線段找到 特定線段。有關如何使用kd-tree做到這一點的任何想法?如何在kd-tree中表示線段
3
A
回答
3
段應該位於它相交的每個kd樹葉中。也就是說,假設線段由一對點(p1, p2)
表示,則應該在kd樹節點中存儲對此線段的引用。這個線段應該在它通過的每個kd-tree節點中,這部分不同於處理點時,其中每個點只存儲在1 kd樹節點內。
拆分kd樹節點時,可以在水平或垂直線上分割。如果至少有一個端點位於左側子樹中,則線段位於「左側」子樹中。對於正確的子樹同樣如此。
您應該通過做一些類似於線段端點的點查詢來找到附近。也就是說,查看查詢端點附近的所有kd-tree樹葉。
然後,對於這些分檔中的潛在分段,您可以通過查看從查詢端點到候選分段的垂直線的長度來進行精確的長度比較,反之亦然(將候選線端點與查詢進行比較線)。
如何做到這一點的細節在這裏回答:Shortest distance between a point and a line segment。你應該做4次測試,一行到另一行的端點,反之亦然,並取最小值。注意忽略投影點在線段外的情況的距離。
這可以工作,因爲線不曲線,所以兩條線之間的最近點必須位於其中一個端點。
0
你不能實現帶段的kd-tree。 kd-tree是專門爲k向量空間設計的,分段不是向量空間的一部分。想法是kd-tree使用超平面來分割kd-空間,如果你不在kd-向量空間中,那不是理想的。
但是,您需要的可能是Bounding Volume Hierarchy,https://en.wikipedia.org/wiki/Bounding_volume_hierarchy,這是一種用於碰撞檢測的技術。
相關問題
- 1. 蟒蛇sklearn KDTree
- 2. KDTree分裂
- 3. 如何在iOS圖表的折線圖中繪製分段線段?
- 4. Java中的KDTree實現
- 5. 如何表示反斜線
- 6. 在Python中保存KDTree對象?
- 7. 如何在Google地圖中顯示多個多段折線?
- 8. KDTree經度/緯度
- 9. 刪除KdTree節點
- 10. KDTree double type整數
- 11. KDTree蒙面陣列
- 12. Kdtree插入函數
- 13. libkdtree ++的問題(kdtree)
- 14. 怎樣用WEKA kdtree
- 15. 曲線在OpenGL中表示
- 16. 類段表示一個平面中的線段?
- 17. 如何在Python中擴展線段?
- 18. 如何在JavaFX中繪製多段線?
- 19. 如何創建貝塞爾曲線來表示平滑多段線?
- 20. 如何在Oracle中的表中顯示字段?
- 21. 在R中,如何創建輪廓線,其中線表示高程和顏色表示單獨值的大小?
- 22. 如何在PreferenceFragment中顯示分隔線?
- 23. 線程在Android中如何顯示?
- 24. 如何在ShinobiCharts中顯示網格線
- 25. 如何在IntelliJ中顯示水平線?
- 26. 如何在google api圖表的折線圖中顯示點值?
- 27. 如何在表格中顯示1條垂直線
- 28. 如何在Neo4j中表示網絡的線路
- 29. 如何在flex 4列表中顯示網格線?
- 30. 如何在Rails中表示這條路線?
你究竟是什麼意思? (你想要實現的查詢操作)'通過特定線段的線段找到附近... – leemes
@leemes:我將很快添加一張圖片 – niro
你確定「等距標記」(圍繞粗體的東西線應該表明相同的距離)你畫的是那種形狀?它不應該是線兩端的半圓? – leemes