2011-11-09 4 views
0

저는 게임 프로그래밍에 익숙하지 않고 C#에서 오래된 GamePanel을 다시 가져오고 싶습니다.더러운 직사각형을 결합하는 알고리즘

선택한 영역 만 다시 그리는 목적으로 더티 영역을 나타내는 두 개 이상의 직사각형을 하나씩 결합하는 알려진 퍼포먼스 알고리즘이 있는지 궁금합니다.

+2

교차 된 직사각형을 별도로 다시 칠하는 데 드는 추가 비용은 교차점을 두 번 다시 그립니다. 결합 된 사각형을 다시 그리는 데 드는 추가 비용은 불필요하게 일부 영역을 다시 그리는 것입니다. 직사각형의 모든 병합은 병합 비용을 고려해야하며 비용이 이익보다 높으면 병합을 취소해야합니다. – Dialecticus

답변

0

당신은 너무 같은 것을 사용할 수 있습니다

// Computes the coordinates of the rectangle smallest 
// rectangle emcompassing all given rectangles 
int minX, minY, maxX, maxY; 
minX = minY = MAX_INT; 
maxX = maxY = -MAX_INT; 
loop over all rectangles in var rect { 
    if(rect.minX < minX) 
     minX = rect.minX 
    if(rect.minY < minY) 
     minY = rect.minY 
    if(rect.maxX > maxX) 
     maxX = rect.maxX 
    if(rect.maxY > maxY) 
     maxY = rect.maxY 
} 

당신은 그러나 최초의 구형 교차로를 확인 할 수 있습니다. 이렇게하면 전혀 겹치지 않는 사각형을 결합하는 것을 피할 수 있습니다.

관련 문제