Проверьте, содержит ли прямоугольник другой прямоугольник с определенным расстоянием между границами

Я пытаюсь написать небольшую программу, чтобы проверить, содержит ли один прямоугольник второй прямоугольник, и расстояние между ними должно быть меньше определенного числа, например 100 или 50. Когда я использую метод Rectangle.contains, он не заботится о расстоянии между границами обоих прямоугольников., Есть ли способ, которым это может быть достигнуто?

4 ответа

Вы можете дважды использовать метод contains(Rectancle r): сначала проверить, находится ли внутренний прямоугольник внутри внешнего прямоугольника, а затем временно увеличить внутренний прямоугольник на половину порога в каждом направлении и снова выполнить ту же проверку. На этот раз его больше не должно быть внутри внешнего прямоугольника. В общем, как-то так:

//Rectangle outer;  // Do some proper setup for these two
//Rectangle inner;
int limit = 50;
boolean containsWithinLimits = outer.contains(inner);
inner.setLocation(inner.getX()-limit/2, inner.getY()-limit/2);
inner.setSize(inner.getWidth()+limit, inner.getHeight()+limit);
boolean containsWithinLimits = containsWithinLimits && !outer.contains(inner);
// Now reset the bounds:
inner.setLocation(inner.getX()+limit/2, inner.getY()+limit/2);
inner.setSize(inner.getWidth()-limit, inner.getHeight()-limit);

Если прямоугольники ортогональны, и я предполагаю, что вы назвали contains(Rectangle rect), Тогда вам нужно только сделать дополнительные сравнения:

inside.x - outside.x >= LEFT_BORDER &&
outside.x + outside.width - inside.x - inside.width >= RIGHT_BORDER &&
inside.y - outside.y >= TOP_BORDER &&
outside.y + outside.height - inside.y - inside.height >= BOTTOM_BORDER

LEFT_BORDER, RIGHT_BORDER, TOP_BORDER, BOTTOM_BORDER для вас, чтобы определить.

Пример кода и т. д.?

Тем не менее, вы захотите сделать следующее: если я не ошибаюсь.

псевдокод:

rectA = outside, rectB = inside
if rectB.left - rectA.left < x then distance is ok else do something
if rectB.top - rectA.top < y then distance is ok else do something

и т. д.

В Rectangle2d мы имеем

логическое содержит (двойной х, двойной у)

  ---    Tests if a specified coordinate is inside the boundary of this Rectangle2D.

логическое значение содержит (double x, double y, double w, double h)

  ---   Tests if the interior of this Rectangle2D entirely contains the specified set of rectangular coordinates.

Так что невозможно проверить расстояние до моего знания...

Другие вопросы по тегам