重叠矩形(Java)

时间:2016-12-26 20:49:44

标签: java

如果两个矩形重叠,你能解释一下这段代码发现方式背后的逻辑吗?

public static boolean overlaps(GRectangle r1, GRectangle r2) {
    return (r1.getX() < r2.getX() + r2.getWidth())
        && (r1.getX() + r1.getWidth() > r2.getX())
        && (r1.getY() < r2.getY() + r2.getHeight())
        && (r1.getY() + r1.getHeight() > r2.getY());
}

2 个答案:

答案 0 :(得分:0)

要使两个矩形重叠,它们必须在水平和垂直方向上重叠。前两个条件测试水平重叠,后两个测试垂直重叠。

要测试单个维度中区域的重叠,您需要考虑矩形重叠的可能方式。一种可能性是第一个矩形的左边缘位于第二个矩形的右边缘的右侧,因此它们之间存在空间。第二种可能性反之亦然:第一个矩形的右边缘是第二个矩形的左边两个。如果这两种可能性都是假的,则必须存在重叠,因此if语句测试这两种情况的相反情况。

因为使用小于/大于且不小于或等于/大于或等于,所以触摸但不重叠的矩形将不被视为重叠。

答案 1 :(得分:0)

第一个条件检查以确保r1的左侧不在r2右侧的右侧。如果是这种情况,则矩形显然不会重叠。

其他条件检查类似的事情:

条件2确保r1的右侧位于r2左侧的右侧。

条件3确保底边r1低于r2的顶部。

条件4确保r1的顶部高于r2的底部。

如果这些条件中的任何一个失败,则矩形无法重叠。当所有条件都是true时,它们会激动地重叠。

旁注:我假设坐标系左下角有(0,0)。对于坐标系的任何其他方向或反演,同样的基本逻辑也是如此。