어떻게 두 사각형 이 교차 하 는 지 판단 합 니까?

참조:http://www.cnblogs.com/0001/archive/2010/05/04/1726905.html
직사각형 이 1 대 점 으로 표현 된다 고 가정 하면 (minx, miny) (maxx, maxy) 두 개의 사각형 이다. 
 
 
rect1{(minx1, miny1)(maxx1, maxy1)}  
 
 
rect2{(minx2, miny2)(maxx2, maxy2)}  
교차 결 과 는 반드시 직사각형 입 니 다. 이 교차 사각형 rect {(minx, miny) (maxx, maxy)} 을 구성 하 는 점 대 좌 표 는: 
 
 
 
minx  
=  
max(minx1,  
minx2)  
 
 
 
miny  
=  
max(miny1,  
miny2)  
 
 
 
maxx  
=  
min(maxx1,  
maxx2)  
 
 
 
maxy  
=  
min(maxy1,  
maxy2)  
 
 
만약 에 두 사각형 이 교차 하지 않 으 면 계 산 된 점 은 좌표 에 만족 할 것 이다. 
 
( minx 

maxx) 혹은 (miny 

maxy ) 
 
 
교차 여 부 를 판정 하고 교차 사각형 이 무엇 인지 이 방법 으로 하나 로 계산 하여 완성 할 수 있다.
이 알고리즘 의 결과 에서 우 리 는 아래 의 두 가지 내용 을 간단하게 생 성 할 수 있다.
교차 사각형:  (minx, miny) (maxx, maxy)
2 면적: 면적 의 계산 은 판정 과 함께 할 수 있다.        if ( minx>maxx ) return 0;         if ( miny>maxy ) return 0;         return (maxx-minx)*(maxy-miny)
 
두 번 째 방법
 
두 사각형 이 교차 하 는 조건: 두 사각형 의 중심 거 리 는 X 와 Y 축 에서 두 사각형 의 길이 나 너비 의 절반 의 합 보다 작다. 이렇게 두 번 으로 나 누 어 판단 하면 된다.
bool CrossLine(Rect r1,RECT r2)
{
if(abs((r1.x1+r1.x2)/2-(r2.x1+r2.x2)/2)<((r1.x2+r2.x2-r1.x1-r2.x1)/2) && abs((r1.y1+r1.y2)/2-(r2.y1+r2.y2)/2)<((r1.y2+r2.y2-r1.y1-r2.y1)/2))
return true;
return false;
}


좋은 웹페이지 즐겨찾기