2014-03-26 67 views
1

有一個名爲rect2d的對象Rectangle2D.Double和一個名爲line2d的對象Line2D.Double在這種情況下會返回什麼?

請考慮以下情況:

enter image description here

問題1:

什麼會這行代碼的回報?

boolean intersect = line2d.getBounds2D().intersects(rect2d); 

問題2:

line2d寬度/厚度爲1個像素。它的高度/長度是20像素。

line2d.getBounds2D()返回的Rectangle2D對象的寬度和高度值是多少?

+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像素寬度邊界,這就是爲什麼它不會與任何其他形狀相交的原因。使用非垂直和非水平線時,其範圍相交。

不要使用邊界來計算交集,而是直接的形狀:

boolean intersect = line2d.intersects(rect2d); 

您可以檢查RectangularShape.intersects() Javadoc獲得此方法的計算交集的更多信息。

+0

感謝您的回答。 'line2d.getBounds2D()。相交(rect2d);'返回'false'是什麼原因?是因爲線的邊界框沒有寬度,還是因爲線的邊界框在'rect2d'內,但沒有觸及邊界? –

+0

因爲線的邊界框沒有寬度。我嘗試了一個非常長的線,穿過矩形,它也返回了'假' – xav

+0

如果尺寸20 * 20的'rect2'完全在'r​​ect1'內,而不是觸及它的邊界?什麼將rect1.intersects(rect2)返回? –

0

從文檔herehere中,第一個將返回false,第二個邊框至少是該行的尺寸大小。

+0

In在這個例子中,'Rectangle2D.intersectsLine()'方法不被使用(但是'intersects()') – xav

相關問題