如何检查给定位置的矩形是否存在

How to check if a rectangle at a given position exists

我正在尝试在网格上绘制不同大小的矩形以进行 uni 分配。所以我想做的是用蓝色绘制和着色它们。但我想先检查给定位置是否存在矩形。库中是否有用于此的方法,或者我是否必须开发该方法。在后一种情况下,我应该从哪里开始?

谢谢!

假设您有一个矩形的 LTRB (left/top/right/bottom) 表示。您可以像这样检查一个点 (x,y) 是否在矩形内:

boolean pointInRect(int x, int y, int l, int t, int r, int b)
{
     return x >= l && x <= r && 
            y >= t && y <= b;
}

请注意,如果您使用 java.awt.Rectangle,已经有一个 contains 方法可以执行此操作,但我不确定是否会考虑 "cheating"学校作业的背景。

所以给定一个位置,您可以遍历您拥有的矩形列表(与您在屏幕上绘制的相同)并查看哪个包含 point/position。

如果您想在比线性时间更快的时间内完成此操作,您可以使用四叉树或将矩形划分为固定的 NxM 网格。在后一种情况下,您可以只检查属于鼠标光标所在的同一网格单元格的矩形。不过,对于这项任务来说,这可能有点过头了。

编辑

经过反复讨论,我认为对您的情况更有帮助的是测试一个矩形是否与另一个矩形重叠。

// Returns true if two solid rectangles intersect.
bool rectIntersect(int l1, int t1, int r1, int b1,
                   int l2, int t2, int r2, int b2)
{
     return l1 <= r2 && r1 >= l2 &&
            t1 <= b2 && b1 >= t2;
}

使用此功能,无论何时您想添加一个新矩形,您都可以遍历现有的矩形,看看它们中的任何一个是否与您要添加的新矩形相交。这不是最有效的方法,但它应该会为您提供所需的行为。