c++ - 两个一般六面体之间的碰撞检测

标签 c++ c algorithm collision-detection

我有 2 个六面体。唯一的保证是它们每个都有 8 个 vertex3f(具有 x、y 和 z 分量的顶点)。鉴于此,我如何才能确定它们是否发生碰撞?

最佳答案

在我试图回答它时你删除了你的最后一个问题并让我失去了我的帖子后,我犹豫要不要回答。请不要再这样做了。无论如何:

不一定是最优的,但显然是正确的,基于 constructive solid geometry :

  1. 将两个实体分别表示为 6 个半空间的交集。请注意,这取决于凸性而不是其他,并且扩展到具有更多边的实体。我对半空间的首选表示是在每个表面上选择一个点(例如,一个顶点)和该表面的向外指向的单位法 vector 。
  2. 通过将所有 12 个半空间视为新实体的定义半空间来使两个实体相交。 (此步骤纯粹是概念性的,可能不涉及任何实际代码。)
  3. 计算新实体的表面/边缘表示并检查它是否为空。一种方法是首先为 12 个半空间中的每一个填充一个表面/边缘表示,边缘在 2 个实体的边界之外,然后将其边缘与其余 11 个半空间中的每一个相交。

这听起来像是一些工作,但并不复杂。只有点积、叉积(以获得初始表示)和投影。

关于c++ - 两个一般六面体之间的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648285/

相关文章:

c - MPI 派生类型发送

php - 如何将字符串解析为php数组?

c# - 基于位值启用行为

c++ - 使用 Visual Studio 2010 : LNK4098 and LNK2005 运行 gtest

c++ - 有没有办法检查 std::random_device 是否实际上是随机的?

c - 如何使用 GCC 自动矢量化跨步写入?

C open() 为路径字符串返回 -1

C++ 通过调用 system() 获取变量集

c++ - 常量声明 - 语言差异?

javascript - 类型错误 : The comparison function must be either a function or undefined