当我决定使用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类建议它们是左上角!
发布于 2013-05-27 18:54:13
矩形的对角是(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-27 19:05:20
你得到的答案是正确的。该方法的工作方式如下所示。
第一个矩形:
<代码>F211
第二个矩形:
<代码>F223
对于交叉点,X和Y坐标与第二个矩形相同。宽度为5-3=2,高度为18-15=3
发布于 2015-02-10 13:34:00
我在这方面也遇到了麻烦。我的想法是,使用的网格在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);}
这应该会给你你想要的答案
https://stackoverflow.com/questions/16771435
复制相似问题