2014-03-26 2 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] 

를이 코드 :이 라인은 1 개 픽셀이라고 말을 쓸모

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()); 

있지만,이 Line2D.Double을 사용하는 다른 방법이 될 수 없기 때문에 . 실제로 Java의 경우이 수직선은 0 픽셀 너비 경계이므로 다른 모양과 결코 교차하지 않습니다. 비 수직 및 비 수평선의 경우 경계가 인 경우 교차합니다. 이 방법은 교차를 계산하는 방법에 대한 자세한 내용은 RectangularShape.intersects() 자바 독을 확인할 수 있습니다

boolean intersect = line2d.intersects(rect2d); 

:

직접 모양을 교차를 계산하기 위해 경계를 사용하지만하지 마십시오.

+0

답변 해 주셔서 감사합니다. 'line2d.getBounds2D(). intersects (rect2d);가'false'를 반환하는 이유는 무엇입니까? 선의 경계 상자가 너비가 없기 때문입니까, 아니면 선의 경계 상자가'rect2d' 안에 있고 경계를 만지지 않았기 때문입니까? –

+0

선의 테두리 상자에 너비가 없기 때문에. 나는 사각형을 가로 지르는 매우 긴 선을 시도해 보았고 또한 false를 반환했다. – xav

+0

그리고 20 * 20의 'rect2'가 완전히 'rect1'안에 있고 그 경계에 닿지 않는다면 어떻게 될까? 무엇 rect1.intersects (rect2) 반환됩니까? –

0

문서의 herehere에서 첫 번째는 false를 반환하고 두 번째는 적어도 선의 크기 크기를 나타내는 경계 상자를 반환합니다.

+0

In 이 예제에서는'Rectangle2D.intersectsLine()'메서드는 사용되지 않습니다 (그러나'intersects()'). – xav

관련 문제