【发布时间】:2012-02-01 16:04:44
【问题描述】:
我正在尝试设计一个具有连续碰撞检测功能的 2D 物理引擎。对象存储为非旋转线段列表。因此,我可以通过查找任意两个对象之间的每对线段之间的碰撞时间来检测碰撞。
我想找到两个沿恒定方向移动的移动线段之间相交的准确时间,但事实证明这很困难。
我发现我可以通过查找线段上每个点与另一个线段(反之亦然)之间的碰撞时间来进一步简化问题。它可能在计算上效率低下,因此两条线段的通用解决方案将是理想的答案。我也可以忽略线平行的情况(我想将共享相同位置和速度的线/点视为“无碰撞”)。
如果答案是“不可能”完全找到这个交叉点时间,我会接受它作为解决方案。任何有关该主题的帮助将不胜感激。
编辑:根据维基百科关于Line segment 的文章,对于具有端点A = (a_x, a_y) 和C = (c_x, c_y) 的线段,线段的一般方程如下所示:
对于线段--点交点,将替换
-
p_x + p_v * tfora_x(仅左侧,右侧仅p_x) -
p_y + p_v * tfora_y(仅左侧,右侧仅p_y) -
q_x + q_v * tforc_x(仅左侧,右侧仅q_x) -
q_y + q_v * tforc_y(仅左侧,右侧仅q_y) -
r_x + r_v * t为x -
r_y + r_v * t为y
对于线段 pq [(p_x, p_y), (q_x, q_y)],点 r (r_x, r_y),以 p_v == q_v 的速率移动!= r_v 可解为 t?这是完整的方程式:
【问题讨论】: