在二维平面上查找两个物体是否会发生碰撞的算法

4
我试图确定在以下情况下Object1是否会与Object2碰撞:

1)对象的边界框(使用有界框碰撞检测)

2)对象的速度

3)对象的当前位置(x,y坐标)

4)对象的方向(上、下、左或右)

为了形象化一些,想象一下物体在二维网格上移动,它们只能在该网格线上移动。

因此,根据上述信息,我需要一种高效但易于理解的算法来确定这些对象是否会发生碰撞。通过高效,我的意思是花费在计算上的时间最小化。伪代码或链接都可以。


边界框是否总是轴对齐的? - tzaman
3个回答

2

首先,在X轴上找到盒子将重叠的时间间隔。 其次,在Y轴上找到盒子将重叠的时间间隔。 最后,检查两个时间间隔是否重叠。如果是这样,那么两个时间间隔中共同存在的最早时间点就是它们相撞的时刻。


还是不太明白怎么做。也就是说,我该如何找到时间间隔。 - lotad
找出速度差异,然后假设一个物体以该速度移动,而另一个物体静止不动。找到描述这种运动随时间变化的线性方程。解决左1 = 右2 和右1 = 左2 两种情况。这些是您区间的边界。 - tdammers
我的意思是,我知道如何获取时间间隔,只是不知道如何在不同的方向上处理它。 - lotad
如果两个物体的速度相等呢? - lotad
算了吧,速度是一维向量,所以如果速度相同,它们永远不会碰撞。 - lotad

2

对我来说这是正确的答案(我正在寻找球体与球体的交点)。您现在可以使用“[linktext](http://www.example.com)”符号嵌入链接。另外,请添加作者姓名和书名。 - ceztko

1

你最好的方法是找出:

  1. x坐标将重叠的线性时间范围(可能永远不会)
  2. y坐标将重叠的线性时间范围(可能永远不会)

然后测试两个时间范围是否相交。这将作为额外的奖励给出碰撞时间。

总体而言,这将是一个简单的常数时间操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接