有效地确定3D盒子的交集

时间:2012-08-15 16:32:37

标签: collision-detection physics simulation intersection

我正在尝试开发一种算法来确定两个盒子(但我认为它适用于任何凸多面体)相交。我将用它来进行碰撞检测。

每个多面体的状态表示为它的质心的平移向量,以及一个方向矩阵(3x3正交表示对象空间坐标)。

我的一般想法是取两个多面体的每个面,找出它的平面方程(通过应用多面体方向和平移分量),并遍历另一个多面体的每个顶点,并确定是否所有它们位于飞机的同一侧,如果是,我确定两个物体不相交。

关于碰撞检测部分,我将检测它们是否相交,如果它们确实存在,我会在它们触摸的时刻进行二分搜索,并在那一刻尝试通过找到另一个物体的顶点找到碰撞的顶点最接近我之前发现的确定接触点的平面。

我的问题是,这个算法是否正确,如果是,那是否有点矫枉过正?我能以某种方式省去一些检查,或加快这个过程吗?

1 个答案:

答案 0 :(得分:1)

我认为您的算法是正确的,并且效率与您将获得的一样高效。要清楚你需要检查两个多面体的每个面,如果你发现任何情况,其他多面体的每个顶点都在无限平面的“外面”那么没有交集。

表现:

1个预先计算封闭球体,这样您就可以进行初步的“粗略”检查

2预先计算所有向外法线向量并通过旋转变换进行预测 - 应该比做一堆交叉产品便宜,

我认为找到交点的“点”可以使用相同的算法完成,并假设在交叉和非交叉状态之间进行线性插值,并寻求一个顶点恰好在一个平面上的解。