【问题标题】:How to determine if a square is inside a rectangle?如何判断正方形是否在长方形内?
【发布时间】:2011-02-04 21:46:13
【问题描述】:

各位,

在 Java 中,我想知道如何确定一个正方形是否在一个矩形内,或者是否在边缘接触或在一个角上接触,如果这些给出:

  • 正方形的x和y坐标,正方形的宽度
  • 矩形的x和y坐标,矩形的宽度和长度

我知道我必须使用 Math.abs() 并找到 x 和 y 坐标的差异,但我无法用数学方法表述问题。

顺便说一下,所有数据类型都是双精度的。

即使您不了解 Java,我们也会非常感谢您对这个问题的数学表述的想法。

提前致谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    不管使用什么语言,都可以通过下面的朴素算法来判断。

    测试正方形的所有点是否都在矩形内。您可能希望以这样一种方式定义函数,即如果一个正方形点接触矩形的线,则认为它在内部。

    【讨论】:

      【解决方案2】:

      只检查左上角是否在矩形的范围内,然后比较宽度和高度的长度。以下是一个简化的答案,正如您所指出的,您需要实现 Math.Abs​​() 来纠正负坐标。

      bool IsInside(Square s, Rectangle r) {
          if (s.x < r.x) return false;
          if (s.y > r.y) return false;
          if ((r.Width - r.x) < (s.Width - s.x)) return false;
          if ((r.Height - r.y) < (s.Width - s.y)) return false;
      
          return true;
      }
      

      【讨论】:

      • 我有矩形和正方形中心的坐标。
      • 然后取一半宽度并从 x 坐标中减去它以达到左边界等
      【解决方案3】:

      由于您没有将此问题标记为,我假设您可以使用标准库方法:

      static boolean isSquareInRectangle(sx, sy, sw, rx, ry, rw, rh) {
          Rectangle2D s = new Rectangle2D.Double(sx, sy, sw, sw),
                      r = new Rectangle2D.Double(rx, ry, rw, rh);
          return r.contains(s);
      }
      

      【讨论】:

        【解决方案4】:

        这是作业吗?

        解决方案的要点是检查边界。喜欢:

        boolean inside=square.x>=rectangle.x && square.x+square.width<=rectangle.x+rectangle.width
          && square.y>=rectangle.y && square.y+square.width<=rectangle.y+rectangle.height;
        

        【讨论】:

          猜你喜欢
          • 2022-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多