Я работаю над проблемой алгоритма, чтобы попытаться определить, перекрываются ли два прямоугольника друг с другом.Определить, перекрываются ли два прямоугольника
Предположим L1
и R1
являются верхний левый и нижний правый первого прямоугольника, и L2
и R2
в верхнем левом и нижнем правом углу второй прямоугольника.
я решил, что это было легче сначала определить, когда прямоугольники не пересекаются, а вот мои правила:
L2.x >= R1.x // rectangle 2 is right of rectangle 1
R2.x <= L1.x // rectangle 2 is left of rectangle 1
R2.y <= L1.y // rectangle 2 is top of rectangle 1
L2.y >= R1.y // rectangle 2 is bottom of rectangle 1
Итак, вместе взятые, мы берем not
этого, а это значит, всякий раз, когда условия для не перекрытия удовлетворяются, то прямоугольники перекрываются.
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;
}
Я чувствую, что я делаю это неправильно. Пока я все нарисовал на листе бумаги, чтобы решить эту проблему, я чувствую, что у меня что-то не хватает. Что я сделал не так?
Test Cases:
// Rectangle 2 is two x-units away from 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");
}
Выход:
Overlapping
Глядя на этот ответ, я совсем близко, но, кажется, я перевернул верх/низ условия: http://www.geeksforgeeks.org/find-two-rectangles-overlap/
испытаны ли вы его? – sstan
@sstan да, пожалуйста, проверьте править – theGreenCabbage
Есть ли причина, по которой вы не используете класс Polygon и просто вызываете Polygon.intersects (Rectangle2D)? – Kylar