1

我正在尝试编写小程序来检查一个矩形是否包含第二个矩形,并且它们的边界之间的距离应该小于某个特定的数字,例如 100 或 50。当我使用 Rectangle.contains 方法时,它不关心两个矩形的边界之间的距离. 有什么办法可以实现吗?

4

4 回答 4

2

您可以使用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);
于 2012-06-09T12:33:21.280 回答
1

如果矩形是正交的,并且我假设您调用了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供您定义。

于 2012-06-09T12:17:08.627 回答
1

示例代码等?

即便如此,您仍需要执行以下操作:除非我弄错了。

伪代码:

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

等等等等

于 2012-06-09T12:13:57.787 回答
0

在 Rectangle2d 中,我们有

布尔包含(双 x,双 y)

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

布尔包含(双 x,双 y,双 w,双 h)

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

所以不可能检查我所知道的距离......

于 2012-06-09T12:13:48.347 回答