【问题标题】:Check if rectangle contains another rectangle with specific distance between borders检查矩形是否包含另一个具有特定边界距离的矩形
【发布时间】:2012-06-13 05:19:18
【问题描述】:

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

【问题讨论】:

  • 矩形总是正交的吗?
  • 是的,它们的轴总是对齐的。

标签: java 2d awt java-2d


【解决方案1】:

您可以使用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);

【讨论】:

  • Xes 它解决了这个问题。谢谢。但是我正在解决的主要问题并没有解决。我为此创建了一个单独的线程。 [stackoverflow.com/questions/10959703/…。如果大家对这个问题有任何专业知识,可以帮助我。
【解决方案2】:

示例代码等?

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

伪代码:

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

等等等等

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 你如何计算 leftBorder、rightBorder 等的值。我在 rectnagle 类中没有看到任何 API
    • @user613114:你可以用你想要的任何值来定义它们。
    【解决方案4】:

    在 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.
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多