Проверьте, содержит ли прямоугольник другой прямоугольник с определенным расстоянием между границами
Я пытаюсь написать небольшую программу, чтобы проверить, содержит ли один прямоугольник второй прямоугольник, и расстояние между ними должно быть меньше определенного числа, например 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.
Так что невозможно проверить расстояние до моего знания...