【问题标题】:Wrong result from Rectangle.contains() in javajava中 Rectangle.contains() 的错误结果
【发布时间】:2019-09-16 12:50:30
【问题描述】:

看来Rectangle 中的contains() 方法不包括右下角。

例如下面的代码返回“false”;

Rectangle r = new Rectangle(0,0,100,100);
System.out.println(r.contains(100, 100));

【问题讨论】:

  • Rectangle API 没有明确说明包含或排除,很遗憾`...... docs.oracle.com/javase/8/docs/api/java/awt/…
  • 对我来说似乎是正确的行为。这些坐标是屏幕上的实际像素,而不是数学点。包含(0,0)(100,100) 的矩形必须具有至少101 像素的宽度和高度。

标签: java awt rectangles java-2d


【解决方案1】:

引用自 Rectangle API (Java 8):

公共矩形(int x, 整数, 整数宽度, int height)
构造一个新的 Rectangle,其左上角指定为 (x,y),其宽度和高度为 由同名的参数指定。

使用以 (0,0) 开头的 Point 的宽度和高度表示 Rectangle 的点从 (0,0) 到 (99,99) - 宽度为 100 像素,高度为 100 像素,基于在 (0,0) 的给定起始像素上,该像素始终包含在 Rectangle 中。

这意味着 (100,100) 确实不会包含在构造的Rectangle 中。根据上述逻辑,(100,100) 将包含在以下内容中(使用online java compiler 验证):

Rectangle r = new Rectangle(1,1,100,100);

参考资料:

【讨论】:

    【解决方案2】:

    根据接受的答案和我自己的经验,(x,y)是左下角时,API似乎错误地指出“左上角”是(x,y)。

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多