我试图在网格上绘制不同大小的矩形以进行单一分配。所以我想做的是用蓝色绘制和着色它们。但我想首先检查在给定位置是否存在矩形。在这个库中有一个方法,或者我必须开发该方法。在后一种情况下,我应该从哪里开始?
谢谢!
答案 0 :(得分:1)
假设您有一个矩形的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
方法已经执行此操作,但我不确定这是否会在学校的背景下被视为“作弊”分配
所以给定一个位置,你可以遍历一个你拥有的矩形列表(你绘制到屏幕上的那些矩形),看看哪个包含点/位置。
如果您想以比线性时间更快的速度执行此操作,则可以使用四叉树或将矩形分区为固定的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;
}
使用此功能,无论何时想要添加新矩形,都可以遍历现有的矩形,看看它们中的任何一个是否与您尝试添加的新矩形相交。这不是最有效的方法,但它应该为您提供所需的行为。