【发布时间】:2012-06-13 05:19:18
【问题描述】:
我正在尝试编写小程序来检查一个矩形是否包含第二个矩形,并且它们的边界之间的距离应该小于某个特定数字,例如 100 或 50。 当我使用 Rectangle.contains 方法时,它不关心两个矩形的边界之间的距离。 有什么办法可以实现吗?
【问题讨论】:
-
矩形总是正交的吗?
-
是的,它们的轴总是对齐的。
我正在尝试编写小程序来检查一个矩形是否包含第二个矩形,并且它们的边界之间的距离应该小于某个特定数字,例如 100 或 50。 当我使用 Rectangle.contains 方法时,它不关心两个矩形的边界之间的距离。 有什么办法可以实现吗?
【问题讨论】:
您可以使用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);
【讨论】:
示例代码等?
即便如此,您仍需要执行以下操作: 除非我弄错了。
伪代码:
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
等等等等
【讨论】:
如果矩形是正交的,我假设您调用了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 供您定义。
【讨论】:
在 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.
因此无法检查我所知道的距离......
【讨论】: