본문 바로가기

MFC

MFC CRect 클래스의 IntersectRect 함수에 대해서

728x90
반응형
MFC의 CRect 클래스는 left, top, right, bottom 등의 네 개 포인트 좌표점을 멤버로 가진다.
네 개의 포인트 좌표점은 사각 영역을 구성하기 위한 요소이다.
left와 right 는 X 좌표축에 대한 위치값이고, top, bottom 은 Y 좌표축에 대한 위치값이다.

IntersectRect 함수는 두 개의 CRect 클래스형 인스턴스에 대해서 동작한다.
IntersectRect 함수는 두 개의 파라미터를 필요로 하는데, 이 중 앞의 파라미터로 전달된 CRect 영역과 뒤의 파라미터로 전달된 CRect 영역이 교차되는 영역을 구한다.
CRect::IntersectRect

CRect::IntersectRect

BOOL IntersectRect( LPCRECT lpRect1, LPCRECT lpRect2 );

intersect 는 사전적 의미<선, 면 등이> 교차하다, 엇갈리다 라는 뜻을 가지고 있다.

다음 세 가지 케이스는 IntersectRect 의 동작을 확인하기 위한 케이스이다.
각 케이스마다 두 개의 사각 영역이 사용된다. 각 케이스는
① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우
이다.

세 가지 케이스에 대해서 IntersectRect 함수를 사용한 예제코드는 다음과 같다.

① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우


각 케이스에서 눈여겨봐야 할 결과값은 bResultrectDiff 의 값이다.

첫 번째 케이스의 경우 큰 영역이 작은 영역을 포함한다.
이 경우 IntersectRect 함수의 리턴값 bResult 는 TRUE이다. 즉, 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 20, 80, 80 이다. 이 값은 두 번째 파라미터로 전달된 작은 사각 영역의 좌표값과 같은 값이다.
즉 첫 번째 파라미터로 전달된 큰 범위의 영역과 두 번째 파라미터로 전달된 작은 범위의 영역이 서로 교차된 영역인 작은 범위의 사각 영역이 구해지는 것이다.

두 번째 케이스는 두 사각 영역의 일부만이 겹쳐진 형태이다.
이 경우 IntersectRect 함수의 리턴값은 TRUE이다. 역시 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 80, 80, 100 이다. 이 값은 아래 그림에서 확인할 수 있듯이 겹친 영역이다.

세 번째 케이스는 두 사각 영역이 전혀 겹치지 않는 경우이다.
이 경우 IntersectRect 함수의 리턴값은 FALSE 이다. 즉 함수 실행이 실패하였음을 의미한다.
rectDiff 의 값은 0, 0, 0, 0 이다. 이 경우 rectDiff.IsRectEmpty() 또는 rectDiff.IsRectNull() 함수의 리턴값은 TRUE 이다.
세 번째 케이스에서와 같이 겹치는 영역이 존재하지 않는 경우를 확인할 수 있는 방법은
IntersectRect 함수의 리턴값이 FALSE 인 경우를 확인하거나
IsRectEmpty 또는 IsRectNull 함수를 사용하여 IntersectRect 함수의 실행으로 구해진 사각 영역이 비어있음을 확인하는 것이다.

반응형