当我决定使用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则表明它们是左上角!
答案 0 :(得分:3)
你得到的答案是正确的。 方法就像这样。
第一个矩形:
第二个矩形:
对于交点,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)位于角落