2009-10-11 12 views
12

편집 :찾기 (C#에서) 두 사각형의 중첩 영역

나는 누군가가 관심 (프레드릭에게 감사) 인 경우 문제 해결하는 데 사용

간단한 코드 :

int windowOverlap(Rectangle rect1, Rectangle rect2) 
    { 
     if (rect1.IntersectsWith(rect2)) 
     { 
      Rectangle overlap = Rectangle.Intersect(rect1, rect2); 
      if (overlap.IsEmpty) 
       return overlap.Width * overlap.Height; 
     } 

     return 0; 
    } 

원래 질문 :

2 개의 직사각형이 겹치는 지 여부와 겹치는 부분을 계산하는 경우 신속하고 더러운 방법을 알고 싶습니다. 호기심을 위해서 나는 두 직사각형의 모든 선이 수직 또는 수평이거나 2 개의 직사각형의 일반적인 경우에 관심이 있지만 실제로 필요한 유일한 대답은 사례 1입니다.

A.Intersects를 들어

double areaOfOverlap(Rect A, Rect B) 
{ 
    if (A.Intersects(B)) 
    { 
     // calculate area 
     // return area 
    } 

    return 0; 
} 

() 나는 분리 축 테스트를 사용하여 생각했지만, 사각형은 수평선과 수직선이있는 경우 더 간단한 (빠른)이 : 나는의 라인을 따라 생각하고 있어요 확인하는 방법?

그리고 교차하는 영역을 계산하는 데는 직사각형이 수평선과 수직선 인 경우 빠른 방법이 있습니까?

마지막으로, 이것은 질문과 관련이 없지만 컴퓨터 그래픽에 대한 수학을 검토 할 수있는 좋은 책/웹 페이지에 누군가의 조언을 제공해 주시면 감사하겠습니다. 나는 대학에서 잠시 동안 나가 모든 것을 잊고있는 것처럼 느낀다! 다른 누구나 그 문제가 있습니까?

(참고 :. 좀 더 복잡한 것 같다 직접 질문에 대답하지 않습니다 this 다른이 질문에 있음) 작업을 수행 Rectangle.Intersect 방법을 어쩌면

+0

수평 사각형이 수직 사각형이 어느 쪽을 따라 당신은

가 편집 마이크

this page on Wikipedia?

봤어 –

+4

** if (overlap.IsEmpty) ** 은 이어야합니다 ** if (! overlap.IsEmpty) ** – ReinierDG

답변

11

내가 질문을 잘못 해석을하지만, 그렇지 않습니다? 교차 영역을 반환하면 쉽게 그 영역을 계산할 수 있습니다.

+0

예, 그게 전부입니다 :). 감사! – Evan

1

기본 충돌 감지와 비슷합니다. 프레드릭 내가이 일을했다 동시에 그의 반응은, 그의 대답은 내 upvote에 (도착합니다 :

+0

감사합니다. 사이트를 확인해 보겠습니다. – Evan

관련 문제