下午好。
我的情况:
- 在二维空间中。
- 输入:一组矩形(也有重叠的矩形)。
- 矩形坐标是整数类型。
- 矩形大小和矩形位置没有任何限制(仅整数范围)。
- 没有矩形的宽度=0 或高度=0。
- 我需要找到:所有包含输入点的矩形(带有整数坐标)。
问题:
- 保持矩形的有效结构是什么?
- 在这种情况下什么算法是有效的?
- 什么算法只对添加矩形而不删除有效?
谢谢 :-)。
下午好。
我的情况:
问题:
谢谢 :-)。
在 java 中你可以使用 shape.contains
但一般来说,假设一个矩形是由 (x,y,width,height) 定义的
如果 (pt.x >= x && pt.x <= x + 宽度 && pt.y >= y && pt.y <= y + 高度) ...
如果集合中有所有矩形,则可以遍历集合并找到包含该点的矩形
看起来您的矩形集可能是动态的(“...用于添加矩形...”)。在这种情况下 - 二维区间树可能是解决方案。
一个矩形(left, top, right, bottom)
包含一个点(x, y)
if left < x < right
and top < y < bottom
(假设坐标向下增加,这是我见过的大多数硬件的情况;如果你的坐标向上增加,更传统的数学情况,交换top
和bottom
)。你不会比测试更有效率。
如果您将矩形视为“包含”一个点(如果它也在边界上),则将所有<
s替换为<=
.
至于如何处理矩形集合...我不知道。我认为按角坐标排序的列表会做一些事情,但我并没有真正看到它有多大好处......最多,你会平均将要检查的东西列表减少一半(最坏的情况仍然需要检查所有内容)。一大堆该死的一半仍然可以是一大堆。:)
这是一个简单的解决方案。