轴对齐矩形相交
回答
这可能是有点复杂的面试,要看是什么样的工作, 这是一个几何计算一种算法,
答案可以在这里找到: 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