kyuseo의 게임 프로그래밍

UnionRect , InflateRect , IntersectRect, OffsetRect :: CRect 교집합,이동,증가 함수들 본문

C++ 개발

UnionRect , InflateRect , IntersectRect, OffsetRect :: CRect 교집합,이동,증가 함수들

kyuseo 2007. 10. 24. 13:44

개요..

 

RECT 구조체를 교집합, 이동, 증가하기 등을 처리할 경우 직접 코드를 작성하여도 좋지만, 이미 제공되는 함수도 쓸만한 것들이 많이 있습니다.

 

 

쓸만한 Rect 관련 API 함수

 

BOOL UnionRect(

LPRECT lprcDst, // destination rectangle
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle );

 

두개의 사각형으로 하나의 사각형으로 합한다.

면적이 0이면 FALSE 아니면 TRUE 를 리턴한다.

   

 

BOOL InflateRect(

LPRECT lprc, // rectangle
int dx, // amount to adjust width
int dy // amount to adjust height );

 

dx 만큼 좌측은 빼주고 우측을 더해주어 전체 가로면적을 Width + dx*2 만큼 증가하고

dy 만큼 위쪽은 빼주고 아래쪽을 더해주어 전체 세로면적을 Height + dy*2 만큼 증가한다.

 성공시 TRUE, 실패시 FALSE 을 리턴한다.

 

 

BOOL IntersectRect(

LPRECT lprcDst, // intersection buffer
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle );

 

두개의 사각형의 교집합을 구한다.

교집합이 없다면 FALSE 을 있다면 TRUE 을 리턴한다.

   

 

BOOL OffsetRect(

LPRECT lprc, // rectangle
int dx, // horizontal offset
int dy // vertical offset );

 

사각형을 dx, dy 만큼 이동시킨다.

성공시 TRUE, 실패시 FALSE 을 리턴한다.

 

 

 

CRect 에도 비슷한 함수들이 존재합니다.

 

    CRect rc1( 10, 10, 100, 100 );

    CRect rc2( 20, 20, 200, 200 );

 

    CRect rc3;

    rc3.UnionRect( rc1, rc2 );

 

    ASSERT( rc3 == CRect( 10, 10, 200, 200 ) );