我有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 ++
答案 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()
换句话说,它们相交,当且仅当它们在投影到所有三个轴上时相交。 “唯一的”方向是显而易见的;你可以通过考虑一个点在长方体内的意义来证明“如果”的方向。