2012-02-21 3 views
0

나는이 문제에 대한 다른 솔루션이 있다는 것을 알고,하지만 난 배우고 그 목적을 위해 내 알고리즘이 여기에충돌 감지 수학 좌표와

가 작동하는 방법을하지 않는 이유를 이해하고자하는 내 솔루션은 작동합니다

그것은 각 사각형의 네 꼭지점의 좌표를 얻는다는 그들을 변환 그래서 그들은 0을 기준으로합니다, 0이 아니라 사각형 '기원보다는, 그들 각각이 공식 사용 회전 :

rotatedX = unrotatedX * cos(radiansOfCounterClockwiseRotation) - 
      unrotatedY * sin(radians); 

rotatedY = unrotatedX * sin(radians) + y * cos(radians); 

와 좌표로부터 '그럼 X 및 좌상 감산에 의해 분리를 비교하는 축 (Y) 값 및 우측 하단 꼭지점 계산 기원

'는 그들이 사각형에 상대적 있도록 변환 두 개의 직사각형의 평행 한 모서리 쌍 각각에 대해 1) 오른쪽 위 버텍스의 좌표.

그런 다음 축에있는 회전 된 각 정점에 대한 x 값을 계산합니다. 이 공식 :

,210의 축선과 정점을 통과하는 축에 수직 인 선 사이의 교차점을 얻기에서 유래

이들 각 축의 값 체크를 비교 여부 :

maxXValueForRect0 >= minXValueForRect1 AND minXValueForRect0 <= maxXValueForRect1; 

모든 축에 해당하는 경우 충돌이 발생하면

그러나 디버깅하는 동안 직사각형의 위치와 크기에 관계없이 최소 x 값 영역이 항상 최대 값보다 작음을 발견했습니다

아무도 나에게 무엇이 잘못되었는지 말해 줄 수 있습니까?

+0

나는 그림이 도움이된다고 생각합니다. .) –

답변

0

이 코드는 완벽하게 작동하며 코드 자체에서 심각하게 작은 오류가 발생하여 두 개의 정점 그룹이 회전 한 후 첫 번째 사각형에 상대적으로 변환됩니다. 그래서 여기에 제시된 논리는 견고합니다. 내가 한 것처럼 어리석은 실수를 범하지 않는다면 제공된 논리는 확실합니다. D

+1

사소한 오류가 무엇입니까? 그 정보로 답을 편집하십시오. – jackJoe