【发布时间】:2012-01-07 02:13:44
【问题描述】:
我正在开发一个纯连续物理引擎,我需要选择用于广泛和窄相碰撞检测的算法。 “纯连续”意味着我从不进行交叉测试,而是想找到方法在每次碰撞发生之前捕获它,并将每个碰撞放入由 TOI 排序的“计划碰撞”堆栈中。
广泛阶段 我能想到的唯一连续的宽相位方法是将每个物体围成一个圆圈并测试每个圆圈是否会与另一个圆圈重叠。然而,这似乎非常低效,并且缺乏任何剔除。
我也不知道对于当今的离散碰撞剔除方法(例如四叉树)可能存在哪些连续类似物。 我应该如何防止像离散引擎那样的不适当和无意义的广泛测试?
窄相
我已经设法使窄 SAT 适应连续检查而不是离散检查,但我确信在你们可能遇到的论文或网站中还有其他更好的算法。
各种快速或准确你建议我使用哪些算法,每种算法的优点/缺点是什么?
最后说明:
我说技术而不是算法,因为我还没有决定如何存储不同的多边形,这些多边形可能是凹的、凸的、圆形的,甚至有孔。我计划根据算法的要求对此做出决定(例如,如果我选择一种将多边形分解为三角形或凸形的算法,我将简单地以这种形式存储多边形数据)。
【问题讨论】:
-
assert( Make_a_list == not_constructive_close) -
如果您还不知道,我会推荐 Real-time Collision Detection 作为一个很好的资源。
-
你是如何实现你的动态的,你是否以持续的方式做到这一点?如果您的系统是线性的,那么您应该能够使用状态转换矩阵、碰撞条件和寻根器(如牛顿法)简单地求解下一次碰撞时间。如果您的系统不是线性的,那么无论如何您都必须使用时间步进器来解决动力学问题,除非您有额外的结构,在这种情况下您可能应该提到这一点。
-
@VladSeghete 以连续方式实施我的动态是什么意思?我的系统是线性的,所以我确实用根查找器解决了边界圆之间的碰撞时间,但我目前的问题是如何清除甚至可能不会相互接近的边界圆之间的测试。有没有办法用离散四叉树方法的连续模拟来组织我的碰撞空间?或者类似的东西?
-
如果物体可以旋转,我会说你的系统不是线性的。也就是说,一个顶点的轨迹一般不是直线。
标签: algorithm 2d collision-detection physics simulation