java - Determine if two rectangles are overlapping -


i working on algorithm problem try determine whether 2 rectangles overlap each other.

assume l1 , r1 top-left , bottom-right of first rectangle, , l2 , r2 top left , bottom-right of second rectangle.

i determined easier first determine when rectangles don't overlap, , here rules:

l2.x >= r1.x // rectangle 2 right of rectangle 1  r2.x <= l1.x // rectangle 2 left of rectangle 1  r2.y <= l1.y // rectangle 2 top of rectangle 1  l2.y >= r1.y // rectangle 2 bottom of rectangle 1 

so put together, take not of this, means whenever conditions not overlapping satisfied, rectangles overlapping.

public static boolean isoverlap(l1, r1, l2, r2) {     if(!(l2.x >= r1.x) || !(r2.x <= l1.x) || !(r2.y <= l1.y) || !(l2.y >= r1.y)) {         return true;     }     return false; } 

i feel i'm not doing correctly. while drew out on piece of paper solve problem, feel missing something. did wrong?

test cases:

    // rectangle 2 two x-units away rectangle 1     // should not overlap     point l1 = new point(0, 0);     point r1 = new point(2, 2);      point l2 = new point(4, 0);     point r2 = new point(6, 2);      if(isoverlap(l1, r1, l2, r2)) {         system.out.println("overlapping");     } else {         system.out.println("not overlapping");     } 

output:

overlapping 

looking @ answer, quite close, seems flipped top/bottom conditions: http://www.geeksforgeeks.org/find-two-rectangles-overlap/

your criteria right. problem boolean negation. not (a or b) == (not a) , (not b). want not (out on right || out on left || out on top || out on bottom). translates

(not (out on right)) , (not (out on left)) ... 

that is,

public static boolean isoverlap(l1, r1, l2, r2) {   if(l2.x < r1.x && r2.x > l1.x && r2.y > l1.y && l2.y < r1.y) {     return true;   }   return false; } 

which might have struck long in first place. remember java has short-circuit evaluation && operator , stop earlier returning "non-overlapping" in order return "overlapping" (true) 4 conditions need evaluated , fulfilled.


Comments