我有 2 个六面体。唯一的保证是它们每个都有 8 个 vertex3f(具有 x、y 和 z 分量的顶点)。鉴于此,我如何才能确定它们是否发生碰撞?
最佳答案
在我试图回答它时你删除了你的最后一个问题并让我失去了我的帖子后,我犹豫要不要回答。请不要再这样做了。无论如何:
不一定是最优的,但显然是正确的,基于 constructive solid geometry :
- 将两个实体分别表示为 6 个半空间的交集。请注意,这取决于凸性而不是其他,并且扩展到具有更多边的实体。我对半空间的首选表示是在每个表面上选择一个点(例如,一个顶点)和该表面的向外指向的单位法 vector 。
- 通过将所有 12 个半空间视为新实体的定义半空间来使两个实体相交。 (此步骤纯粹是概念性的,可能不涉及任何实际代码。)
- 计算新实体的表面/边缘表示并检查它是否为空。一种方法是首先为 12 个半空间中的每一个填充一个表面/边缘表示,边缘在 2 个实体的边界之外,然后将其边缘与其余 11 个半空间中的每一个相交。
这听起来像是一些工作,但并不复杂。只有点积、叉积(以获得初始表示)和投影。
关于c++ - 两个一般六面体之间的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648285/