所以,我想弄清楚一个函数,它可以让你确定两个任意旋转和大小的立方体是否相交。
如果立方体的旋转不是任意的(但锁定到特定的轴),则相交很简单;您可以通过检查它们的边界来检查它们是否在所有三个维度上相交,以查看它们在所有三个维度上是否交叉或在彼此内。如果它们交叉或仅在两个之内,则它们不会相交。此方法可用于确定任意立方体是否是交叉的候选对象,使用它们的最高/最低 x、y 和 z 来创建外部边界。
这是第一步。从理论上讲,根据这些信息,我们可以分辨出它们彼此位于哪个“边”上,这意味着我们可以从相交处消除一些四边形(边)。但是,我不能假设我们有这些信息,因为立方体的旋转可能会使简单地确定变得困难。
我的想法是取每一对四边形,找到它们平面的交点,然后确定这条线是否与每对边的至少一条边相交。如果任何一对边有一条与它们的任何边相交的交线,则四边形相交。如果没有相交,则两个立方体不相交。
然后,我们可以通过平面相交线与其边缘相交的位置来确定第二个立方体上相交的深度。
然而,这只是推测。有没有更好、更有效的方法来确定这两个立方体的交集?我可以想到许多不同的方法来做到这一点,而且我还可以看出它们在所需的计算量方面可能会有很大的不同。
我目前正在使用 Java,但 C/C++ 解决方案也很酷(我可以移植它们);甚至是伪代码,因为这可能是一个大问题。