有一个名为Rectangle2D.Double
的{{1}}个对象和一个名为rect2d
的{{1}}个对象。
请考虑以下情况:
问题1:
这行代码会返回什么?
Line2D.Double
问题2:
line2d
的宽度/厚度为1像素。它的高度/长度是20像素。
boolean intersect = line2d.getBounds2D().intersects(rect2d);
返回的line2d
对象的宽度和高度值是多少?
答案 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)