2016-09-07 2 views
-2

내 코드에 무엇이 문제가 있는지 파악하는 데 많은 어려움을 겪고 있습니다. 사실, 두 개의 사각형이 겹치는 문제를 해결하는 데 매우 힘든 시간을 보내고 있습니다. 다음 코드한다 이론적으로 다음과 같은 직사각형 일 :두 개의 겹치는 사각형

Rect1 (2.5, 4)의 폭 = 2.5, 높이 = 43

Rect2 (1.5, 5)의 폭 = 0.5, 높이 = 3

이 문제를 해결하기 위해 Rectangle 클래스를 사용할 수 없습니다. 내가 한 것은 왼쪽 및 오른쪽 가장자리의 x 값과 두 사각형의 위쪽 및 아래쪽 가장자리의 y 값을 계산합니다.

제가 처음으로 고려한 것은 - 가능한 모든 경우를 다루지는 않습니다 - r2가 r1 내에있는 시나리오입니다.

(x1, y1) 및 (x2, y2)는 각각 직사각형 1 및 2의 중심을 나타냅니다.

right1 = x1 + w1/2; 
left1 = x1 - w1/2; 
bottom1 = y1 - h1/2; 
top1 = y1 + h1/2; 

right2 = x2 + w2/2; 
left2 = x2 - w2/2; 
bottom2 = y2 - h2/2; 
top2 = y2 + h2/2; 


overlap = ( (right2 < right1 && right2 > left1) && 
(bottom2 > bottom1 && bottom2 < top1) && 
(left2 > left1 && left2 < right1) && 
(top2 < top1 && top2 > bottom1)); 

다시 말하지만,이 시나리오가 모든 것을 포괄하지는 않습니다. 그러나 심지어 하나의 사각형이 위의 Rect1 및 Rect2 값을 입력으로 사용하여 하나의 사각형 안에 있는지 테스트하는 경우에도 overlapped는 false로 평가되지만 ... 이 아니어야합니다. 작동해야합니다. 나는 무엇을 잘못 했는가?

+4

"이 문제를 해결하기 위해 Rectangle 클래스를 사용할 수 없다는 것을 명심하십시오."제출하지 말고 코드를 사용하여 알려진 작동 구현과 비교하십시오. 이 문제를 파악하는 데 도움이 될 수 있습니다. –

+1

변수 이름이 아주 산발적이거나 혼란 스럽습니다. 어쩌면 당신이 그들을 통과하고 더 좋은 이름을 골랐다면, 당신은 약간의 계산 문제를 발견 할 수 있습니다. – byxor

+0

@BrandonIbbotson 내 변수 이름이 너무 혼란 스럽습니까? 왼쪽/오른쪽/위/아래는 직사각형의 가장자리를 나타내며이 값에 대한 계산은 코드 블록 위에 표시됩니다. X1, Y1, X2, Y2는 중심이고, W1, H1, W2, H2는 각각 너비와 높이입니다. – AleksandrH

답변

0

수평면과 수직면이 교차하는 경우 사각형이 겹칩니다. 기본적으로 각 치수에 대해 두 줄이 겹치는 지 확인하는 경우입니다.

라인 X1 여부 체크 -> X2는 선 X3 중첩 -> X4는 첫 번째 행은 제 끝나기 전에 시작되고 그 시작 후 종료하거나 코드 여부 :

x1 <= x4 && x2 >= x3 

에 -> X2, Y2 및 다른 X3, Y3 인 - 쉽게 계산> X4, Y4 (

(x1 <= x4 && x2 >= x3) && (y1 <= y4 && y2 >= y3) 

..where 한 직사각형 X1, Y1이다 모두 측정하기 위해 시험을 적용 직사각형이 번역 시작 위치 및 너비).

관련 문제