连续物理引擎的碰撞检测技术

Gri*_*fin 5 algorithm simulation physics 2d collision-detection

我正在研究一种纯粹连续的物理引擎,我需要选择算法来进行宽窄相位碰撞检测."纯粹连续"意味着我从不进行交叉测试,而是希望找到在碰撞发生之前捕获每个碰撞的方法,并将每个碰撞放入由TOI订购的"计划碰撞"堆栈中.

广泛相位 我能想到的唯一连续宽相方法是将每个物体包围在一个圆圈中并测试每个圆圈是否会与另一个圆圈重叠.然而,这似乎非常低效,并且没有任何剔除.

我不知道今天的离散碰撞剔除方法(例如四叉树)可能存在哪些连续模拟.我怎样才能防止诸如离散引擎之类的不适当和毫无意义的广泛测试呢?

狭窄的阶段
我设法使狭窄的SAT适应连续检查而不是离散,但我确信在你们可能遇到的论文或网站中还有其他更好的算法.
您建议我使用哪种快速或准确的算法以及每种算法的优点/缺点是什么?

最后注意:
我说技术而不是算法,因为我还没有决定如何存储不同的多边形,这些多边形可能是凹的,凸的,圆的,甚至有孔.我计划根据算法的要求做出决定(例如,如果我选择将多边形分解为三角形或凸形的算法,我将简单地以这种形式存储多边形数据).

Adr*_*thy 5

你说圈子,所以我假设你有2D物体.您可以通过添加时间维度将2D对象(或其边界形状)扩展为3D,然后您可以使用常规技术检查一组3D对象之间的静态碰撞.

例如,如果(x,y)中的圆圈以恒定速度向右移动(+ x)​​,那么,当您使用时间维度扩展它时,在(x,y,t)中有一个对角圆柱体.通过在这些3D对象之间进行交叉(只需将时间视为z),您可以看到两个对象是否会相交.如果点P是一个交点,那么只需通过观察Pt即可知道该交点的时间

这也推广到了更高的维度,尽管数学变得很难(无论如何).

如果对象具有复杂路径,则碰撞检测可能会很棘手.例如,如果您的圆受重力影响,则挤出的时空对象是抛物线球形扫描而不是简单的圆柱体.您可以稍微填充边界对象并在较短的时间段内使用线性近似并迭代,但我不确定这是否违反了连续的意思.