java.awt.Rectangle中。路口()

时间:2013-05-27 10:44:53

标签: java awt rectangles

当我决定使用java.awt.Rectangle来计算两个矩形之间的交集时,我正在开发一个任务。

我意识到输出与我的预期不同。我不确定我是否理解这种方法是如何工作的。

对于此处示例中的值 java.awt.Rectangle[x=0,y=10,width=5,height=8] java.awt.Rectangle[x=3,y=15,width=17,height=14]

我希望交叉点为java.awt.Rectangle[x=3,y=10,width=2,height=8],但程序会打印java.awt.Rectangle[x=3,y=15,width=2,height=3]而不是!

这是我的代码:

public void printIntersection(){ 
    Rectangle r1 = new Rectangle(0, 10, 5, 8);
    Rectangle r2 = new Rectangle(3, 15, 17, 14);
    Rectangle r3 = r1.intersection(r2);

    System.out.println(r1);
    System.out.println(r2);
    System.out.println(r3);

}

任何人都可以通过指出我在这里缺少什么来帮助我吗?

更新: 我混淆的原因是代码将构造函数中的(x,y)值视为左下角,而类doc则表明它们是左上角!

3 个答案:

答案 0 :(得分:3)

你得到的答案是正确的。 方法就像这样。

第一个矩形:

  • X坐标:0
  • Y坐标:10
  • 宽度:5
  • 身高:8

第二个矩形:

  • X坐标:3
  • Y坐标:15
  • 宽度:17
  • 身高:14

对于交点,X和Y坐标与第二个矩形相同。宽度为5-3 = 2,高度为18-15 = 3

答案 1 :(得分:2)

我也遇到了麻烦。我想到的方式是使用的网格在y轴上反转。因为点0.0位于屏幕的左上角,点0,1低于该点而不是高于该点,您可以通过反转原始代码中的y轴来获得您期望的答案。

例如。

public void printIntersection(){ 
Rectangle r1 = new Rectangle(0, 10 * -1 , 5, 8);
Rectangle r2 = new Rectangle(3, 15 * -1, 17, 14);
Rectangle r3 = r1.intersection(r2);

System.out.println(r1);
System.out.println(r2);
System.out.println(r3);

}

这应该给你一个你期待的答案

答案 2 :(得分:0)

矩形的对角是(0,10),(5,18)(3,15),(20,29),因此交点是(3,15),(5,18),所以我认为结果是预期的。请注意,结果的对角是第一个的右下角和第二个的左上角。

编辑:它的工作方式是:起点为(x,y),计算边数并将widthand高度添加到起点,因此对角将为(x+width,y+height)

最后的注释:(0,0)是画布的左上角: 这是一个例子:(0,0,4,4)和(2,2,4,4)交叉点是(2,2,2,2):( 2,2)是左上角和(2) + 2,2 + 2)位于角落

enter image description here