检测2个长方体是否发生碰撞的算法

时间:2013-09-23 01:31:45

标签: c++ algorithm math

我有4个位置,有X,Y和Z分量。前2个向量代表2个范围,另一个向量代表另一个长方体的另外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)。第二个长方体从(15,30,15)开始,大小为(30,60,30))

我想要做的是检查2个长方体是否正在碰撞(接触或穿过)给出这些向量。另外,我正在使用C ++

1 个答案:

答案 0 :(得分:0)

如果一个长方体的右侧在另一个长方体的左侧之前,或者一个长方体的顶部低于另一个长方体的底部,或者一个长方体的前部在另一个长方体的后面,则它们不会相交。否则,他们会这样做。

所以将“ors”否定为一堆“ands”来获取:

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()

换句话说,它们相交,当且仅当它们在投影到所有三个轴上时相交。 “唯一的”方向是显而易见的;你可以通过考虑一个点在长方体内的意义来证明“如果”的方向。