1

当我决定使用 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) 值视为左下角,而类文档建议它们是左上角!

4

3 回答 3

3

你得到的答案是正确的。该方法是这样工作的。

第一个矩形:

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

第二个矩形:

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

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

于 2013-05-27T11:05:19.547 回答
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);

}

这应该会给你你期望的答案

于 2015-02-10T05:33:59.990 回答
0

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

编辑:它的工作方式是:起点是(x,y),边是通过将宽度和高度添加到起点来计算的,所以对角将是(x+width,y+height)

最后说明:(0,0)是画布的左上角:这里是一个例子:(0,0,4,4)和(2,2,4,4)的交点是(2,2,2 ,2):(2,2) 是左上角,(2+2,2+2) 是对角

在此处输入图像描述

于 2013-05-27T10:54:12.640 回答