2016-12-26 5 views
-2

Можете ли вы объяснить логику того, как этот код обнаруживает, перекрываются ли два прямоугольника?Перекрывающиеся прямоугольники (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()); 
} 

ответ

0

Для перекрытия двух прямоугольников они должны пересекаться как по горизонтали, так и по вертикали. Первые два условия проверяют горизонтальное перекрытие и второе испытание для вертикального перекрытия.

Чтобы проверить перекрытие экстентов в одном измерении, вам необходимо рассмотреть возможные способы, которыми могут обладать прямоугольники не перекрытие. Одна из возможностей заключается в том, что левый край первого прямоугольника находится справа от правого края второго прямоугольника, так что между ними есть пробел. Вторая возможность - это наоборот: правый край первого прямоугольника равен двум левым от второго прямоугольника. Если обе возможности theses являются ложными, то должно быть перекрытие, поэтому оператор if проверяет противоположность обоих этих условий.

Поскольку используются меньше или больше и не меньше или равно или больше или равно, то прямоугольники, которые касаются, но не перекрываются, не будут считаться перекрывающимися.

0

Первое условие проверяет, чтобы левая сторона r1 не находится справа от r2. Если бы это было так, то прямоугольники могли бы не перекрываться.

Остальные условия проверить подобные вещи:

Условие 2 гарантирует, что правая сторона r1 находится справа от левой стороны r2.

Условие 3 гарантирует, что нижняя сторона r1 находится под верхней частью r2.

Условие 4 гарантирует, что верхняя часть r1 находится над дном r2.

Если какое-либо из этих условий не работает, невозможно, чтобы прямоугольники перекрывались. Они полностью перекрываются, когда все условия равны true.

Sidenote: Я предполагаю, что система координат имеет (0,0) в левом нижнем углу. Та же основная логика верна для любой другой ориентации или инверсии системы координат.

Смежные вопросы