我试图设计一个具有连续碰撞检测的2D物理引擎。对象存储为非旋转线段列表。因此,我可以通过查找任意两个对象之间每对线段之间的碰撞时间来检测碰撞。两条移动线段(或一条移动线段和一个点)的交集
我想找到两个移动的线段以相同的方向移动的交点之间的交点的确切时间确切的,这证明是困难的。
我发现我可以通过查找线段上每个点与另一个线段(反之亦然)之间的碰撞时间来进一步简化问题。这可能是计算效率低下的问题,因此两条线段的一般解决方案将是理想的答案。我也可以忽略线条平行的情况(我想将线条/点与“无碰撞”共享相同的位置和速度)。
如果答案是“不可能”到正好找到这个交点时间,我会接受它作为一个解决方案。任何有关这个问题的帮助将不胜感激。
编辑:根据维基百科的上一个Line segment文章,与端点A = (a_x, a_y)
和C = (c_x, c_y)
,为线段的一般公式线段看起来是这样的:
对于线 - 段 - 点相交,将代替
p_x + p_v * t
对于a_x
(左侧o NLY,右侧就是p_x
)p_y + p_v * t
为a_y
(左侧只,右侧就是p_y
)q_x + q_v * t
为c_x
(仅左侧,右侧就是q_x
)q_y + q_v * t
为c_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?下面是完整的方程: