軸對齊矩形相交
回答
這可能是有點複雜的面試,要看是什麼樣的工作, 這是一個幾何計算一種算法,
答案可以在這裏找到: http://www.cs.princeton.edu/~rs/AlgsDS07/17GeometricSearch.pdf
下面是在DuduAlul的鏈接中提出的交集算法的簡要說明。
該解決方案需要使用能夠執行範圍查詢的搜索樹。範圍查詢要求K1和K2之間的值的所有項目,並且它應該是O(R + log N)操作,其中N是樹項目的總數,R是結果的數目。
該算法採用掃描方式:
1)排序的所有左,右邊緣的矩形,根據自己的X值,到列表L.
2)創建一個新的空範圍搜索樹T,爲矩形的頂部Y的排序/塔底
3)創建獨特的矩形對
4)導線L的升序的一個新的空的結果集RS。爲以L所有的V:
如果V.isRightEdge()
T.remove(V.rectangle.top)
Ť .remove(V.rectangle.bottom)
其他
對於所有u在T.getRange(V.rectangle.top,V.rectangle.bottom)
RS.add (< V.rectangle,U.rectangle>)
T.add(V.rectangle。頂部)
T.add(V.rectangle.bottom)
5)返回RS
的時間複雜度是O(R + N日誌N),其中R是交叉點的實際數量。
- 編輯 -
我想通了,解決的辦法是不完全正確 - 在樹T的相交測試錯過某些情況下。樹應保持Y間隔而不是Y值,理想情況下應該是Interval Tree。
Sweep and prune是很多物理引擎解決這類問題的方法。
David Baraff's SIGGRAPH notes有一個很好的解釋,在7.2節邊界框下。
- 1. 非軸對齊的矩形交叉點
- 2. 點座標軸對齊矩形測試?
- 3. 在日期軸上對齊矩形
- 4. 圓和軸對齊的矩形之間的交點
- 5. 矩形相交
- 6. N矩形相交
- 7. 快速矩形到矩形相交
- 8. 如何對齊軸線中的R,使得兩個軸相交
- 9. 如何變換一個投影的3D矩形成2D軸線對齊矩形
- 10. 計算軸未對齊的兩個矩形之間的交集區域
- 11. 在圓內對齊矩形
- 12. 將一個軸對齊的矩形旋轉90度
- 13. 如何創建非重疊的非軸對齊的矩形?
- 14. Java矩形相交方法
- 15. 與Python相交的矩形
- 16. XNA矩形相交問題
- 17. 測量軸對齊盒(AAB)的截錐相交
- 18. Highcharts:與柱形圖的x軸對齊
- 19. 條形圖軸標籤的左對齊
- 20. D3條形圖左對齊x軸
- 21. 檢測旋轉矩形相交
- 22. 矩形在廣場上相交
- 23. 內置矩形相交功能?
- 24. 檢查的CGRect相交矩形
- 25. 碰撞和矩形/線相交
- 26. 粗線和矩形相交java
- 27. 負尺寸矩形如何相交?
- 28. 相交線的圓角矩形
- 29. 算法檢測軸對齊的矩形和定向的超橢圓之間的交集
- 30. Flot條形圖與X軸標籤對齊條形圖
這是一個很好的答案。我也在課堂上發現它 - 從csail.mit.edu手中搶走Google Interview_ – 2013-08-13 13:01:11