在这种情况下,intersects()会返回什么?

时间:2014-03-26 22:08:00

标签: java intersection java-2d

有一个名为Rectangle2D.Double的{​​{1}}个对象和一个名为rect2d的{​​{1}}个对象。

请考虑以下情况:

enter image description here

问题1:

这行代码会返回什么?

Line2D.Double

问题2:

line2d 的宽度/厚度为1像素。它的高度/长度是20像素。

boolean intersect = line2d.getBounds2D().intersects(rect2d); 返回的line2d对象的宽度和高度值是多少?

2 个答案:

答案 0 :(得分:1)

它将返回:

false
java.awt.geom.Rectangle2D$Double[x=10.0,y=10.0,w=0.0,h=20.0]

使用此代码:

Line2D.Double line2d = new Line2D.Double(10, 10, 10, 30);
Rectangle2D.Double rect2d = new Rectangle2D.Double(0, 0, 100, 100);

boolean intersect = line2d.getBounds2D().intersects(rect2d);
System.out.println(intersect);
System.out.println(line2d.getBounds2D());

虽然说一条线是1像素是没用的,因为它不能使用Line2D.Double。 实际上,对于Java来说,这条垂直线为0像素宽度边界,这就是为什么它永远不会与任何其他形状相交的原因。对于非垂直和非水平线,其边界相交。

不要使用边界来计算交集,而是直接使用Shape:

boolean intersect = line2d.intersects(rect2d);

您可以查看RectangularShape.intersects() Javadoc,了解有关此方法如何计算交集的更多信息。

答案 1 :(得分:0)

从文档herehere开始,第一个会返回false,第二个会返回一个至少是该行尺寸大小的边界框。