检查矩形是否包含另一个边界之间具有特定距离的矩形

时间:2012-06-09 12:06:45

标签: java 2d awt java-2d

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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

等等

答案 2 :(得分: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_BORDERRIGHT_BORDERTOP_BORDERBOTTOM_BORDER供您定义。

答案 3 :(得分:0)

在Rectangle2d中,我们有

boolean contains(double x,double y)

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

boolean contains(double x,double y,double w,double h)

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

因此无法检查我的知识距离......