Java 检查两个矩形在任意一点是否重叠

2022-09-01 23:59:22

我有多个矩形和一个特殊的矩形:选择矩形。我想检查每个矩形是否包含至少一个位于选择矩形内的点。为清楚起见,下图如下:

Selection example


答案 1

背景:

矩形只能由其对角线之一来定义。
假设第一个矩形的对角线是 (x1, y1) 到 (x2, y2),
另一个矩形的对角线是 (x3, y3) 到 (x4, y4)

Sample

进行:

现在,如果这4个条件中的任何一个为真,我们可以得出结论,矩形没有重叠:

  1. x3 > x2 (或)
  2. y3 > y2 (OR)
  3. x1 > x4 (或)
  4. y1 > y4


否则,它们会重叠!

enter image description here

或者:

如果出现以下情况,矩形重叠

(x1 < x4) && (x3 < x2) && (y1 < y4) && (y3 < y2)



Leetcode 上的示例解决方案:https://leetcode.com/problems/rectangle-overlap/discuss/468548/Java-check-if-two-rectangles-overlap-at-any-point


答案 2

这将发现矩形是否与另一个矩形重叠:

public boolean overlaps (Rectangle r) {
    return x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y;
}