2013-09-23 2 views
1

X, Y 및 Z 구성 요소가있는 4 개의 위치가 있습니다. 첫 번째 2 개의 벡터는 2 개의 익스텐트를 나타내며 다른 벡터는 다른 큐브oid의 다른 두 개의 익스텐트를 나타냅니다.2 개의 직육면체가 충돌하는 것을 감지하는 알고리즘

예 :

Vector3 firstCubeMax = Vector3(10, 10, 10); 
Vector3 firstCubeMin = Vector3(-10, -10, -10); 
Vector3 secondCubeMax = Vector3(0, 0, 0); 
Vector3 secondCubeMin = Vector3(-30, -60, -30); 

가 (0,0,0 크기 (20,20,20 처음 시작 직육면체)가 1 초간 (15, 30, 15)에서 시작하여 크기를 갖는다 . (30,60,30))

내가하고 싶은 것은 2 개의 직육면체가 충돌하는 (접촉하거나 통과하는) 벡터를 제공하는지 확인하는 것입니다. 또한 C++을 사용하고 있습니다.

+0

크기가 (30, 60, 30) 인 큐브가 무엇을 의미합니까? 그러면 입방체에 대해 이야기하고 있습니다. – Shredderroy

+0

@ Tawnos 아무것도, 시작하는 방법을 모르십시오 – Pacha

+0

@ Shredderroy 고정, 미안 해요. – Pacha

답변

0

하나의 직육면체의 오른쪽이 다른 쪽의 왼쪽보다 앞에 있거나 하나의 직육면체의 꼭대기가 다른 쪽의 밑면보다 아래에 있거나 하나의 직사각형의 정면이 다른 하나는 교차하지 않습니다. 그렇지 않으면, 그들은 그렇다.

그래서 얻을 "의 ands"의 무리에 "ORS를"부정 :

return firstCubeMin.x() < secondCubeMax.x() 
    && secondCubeMin.x() < firstCubeMax.x() 
    && firstCubeMin.y() < secondCubeMax.y() 
    && secondCubeMin.y() < firstCubeMax.y() 
    && firstCubeMin.z() < secondCubeMax.z() 
    && secondCubeMin.z() < firstCubeMax.z() 

다른 방법을 넣어, 그들은 교차하는 경우, 모든 세 개의 축에 투사 할 때이 교차하는 경우에만 가능합니다. "유일한 경우"방향은 분명합니다. 당신은 한 점이 직육면체에 있다는 것을 의미하는 것에 대해 생각함으로써 "만일"방향을 증명할 수 있습니다.

관련 문제