2013-05-27 2 views
1

java.awt.Rectangle을 사용하여 두 개의 사각형 사이의 교차를 계산할 때 작업을 개발하고있었습니다.java.awt.Rectangle. intersection()

출력이 예상했던 것과 다른 것을 깨달았습니다. 나는이 방법이 어떻게 작동하는지 이해하지 못했는지 잘 모르겠습니다. 여기 예제에서 값 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은 왼쪽 위 모서리임을 제안합니다. 당신의 사각형의

답변

0

반대 모서리 (0,10),(5,18)(3,15),(20,29), 그래서 교회법 (3,15),(5,18), 그래서 결과가 예상 하나라고 생각합니다. 결과로 나오는 모서리의 반대쪽 모서리는 첫 번째 모서리의 오른쪽 하단과 두 번째 모퉁이의 왼쪽 상단에 있습니다.

편집 : 그것이 작동하는 방법은 다음과 같습니다 시작점이 (x,y)이며, 측면은 시작점에 widthand 높이를 추가 계산 때문에 반대 코너가 될 것입니다 (x+width,y+height)

최종 참고 사항 : (0,0)는 캔버스의 왼쪽 위 모서리입니다. 다음은 예제입니다. (0,0,4,4) and (2,2,4,4) intersection is (2,2,2,2) : (2 2) 당신이 점점 대답은 corre이

enter image description here

+0

문서를 기대하고 답을 주어야한다은 (x, y)가 왼쪽 상단 모서리를 만드는 것을 말한다. r1 (0, 10)은 왼쪽 위 구석이므로 반대 구석은 (5, 2)이어야합니다. 마찬가지로, r2에 대해 (3, 15) -> (20, 1)? – muhamadto

+0

아니요, 반대쪽 모서리는 클래스 설명서 페이지의 (0 + 5,10 + 8) –

+1

입니다 (http://docs.oracle.com/javase/6/docs/api/java/awt/Rectangle.html#Rectangle). (int, int, int, int) : 왼쪽 위 모서리가 (x, y)로 지정된 새 Rectangle을 만듭니다. – muhamadto

3

왼쪽 상단 하나 (2 + 2,2 + 2) 일을 반대 구석을하다 ct. 이 방법은 다음과 같이 작동합니다.

1 사각형 :

  • X 좌표 : 0
  • Y 좌표 : 10
  • 폭 : 5
  • 높이 : 8

2 직사각형 :

  • X 좌표 : 3
  • Y 좌표 15
  • 폭 : 17
  • 높이 : 교점 14

X 및 Y 좌표가 동일한 두 번째 사각형으로.너비는 5-3 = 2이고 높이는 18-15 = 3입니다.

+1

(x, y)를 좌상 구석 또는 좌상 구석이라고 생각한다면 대답 해주십시오. 문서에서 좌상이라고 말하고 있기 때문에 물어볼 것입니다. 대답은 @pablo Lazano의 답변입니다. 왼쪽 하단! 나는 당신이 혼란의 원천을 이해하고 있기를 바랍니다. – muhamadto

+1

내 대답은 (x, y) 좌표를 좌상 구로 만 고려한 것입니다. (0,10)은 첫 번째 사각형의 왼쪽 위 모서리입니다. 마찬가지로 (3,15)는 두 번째 직사각형의 왼쪽 위 모서리입니다. 교차 부분의 경계는 (3,15), (5,15), (3,18) 및 (5,18)입니다. 출력은 {3,15,2,3}입니다. – Ananth

2

이 또한 문제가있었습니다. 내가 생각하는 방식은 사용 된 격자가 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); 

}

이 당신에게 당신이

관련 문제