1

我有 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++

4

1 回答 1

0

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

所以将“or”取反成一堆“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()

换句话说,它们相交当且仅当它们在投影到所有三个轴上时相交。“只有当”的方向是显而易见的;您可以通过考虑点位于长方体内部意味着什么来证明“如果”方向。

于 2013-09-23T03:37:21.887 回答