计算两个圆圈之间的碰撞时间 - 物理学

时间:2017-04-23 22:41:14

标签: physics collision

我一直在寻找游戏/模拟解决方案,以便在时间运行时寻找距离,而这并不是我想要的。

我正在寻找一个O(1)公式来计算(0或1或2)时钟时间(s),其中两个圆正好相距r1 + r2。负时间是可能的。可能两个圆圈不会碰撞,并且它们可能没有交叉点(就像2辆汽车在相反的方向上驾驶太靠近道路中间时“夹着”),这弄乱了我所有的mx + b的解决方案。

从技术上讲,应该可以进行单点碰撞。

我大约有100行代码,我确信必须有更好的方法,而且我甚至不确定我的测试用例是否正确。我最初的设置是:

dist( x1+dx1*t, y1+dy1*t, x2+dx2*t, y2+dy2*t ) == r1+r2

假设可以用毕达哥拉斯计算任何时间t的距离,我想知道距离中心的距离恰好是半径之和的两个时间点。我解决了a,b和c并应用了二次公式,我相信如果我假设它们是幻象物体,这将给我第一个碰撞时刻和碰撞的最后时刻,我可以假设它们之间的每一刻都是重叠的。

我的工作前提是2个物体不可能在t0重叠,这意味着“卡在彼此里面”的无限碰撞是不可能的。当斜率为0或无限时,我也会过滤并使用特殊处理,这是有效的。

我尝试计算距离,当物体1在交叉点时,它与物体2的距离,同样当o2处于交叉点时,但这不起作用,因为当它们可能发生碰撞时不在他们的十字路口。

当斜率相等但幅度不同时,我遇到了问题。

是否有一个简单的物理/数学公式?

编程语言没关系,伪代码会很好,或者没有复杂符号的任何数学公式(我不是数学/物理人员)......但没有更高的顺序(我认为python可能有已经碰撞(p1,p2)方法

1 个答案:

答案 0 :(得分:3)

有一个简单的(-ish)解决方案。你已经提到过使用二次公式,这是一个好的开始。

首先定义二次公式有用的问题,在这种情况下,中心之间的距离,随着时间的推移。

  • 让我们将时间定义为else if
  • 由于我们使用的是两个维度,因此我们可以调用维度t
  • 首先让我们将x & y圈中的两个中心点定义为t = 0
  • 我们也将a & b t = 0的速度分别定义为a & b
  • 最后,假设u & v常数加速度分别为a & b
  • 关于时间o & p的任何一个维度(我们称之为i)的位置等式如下:t i(t) = 1 / 2 * a * t^2 + v * t + i0;恒定加速度,a为初始速度,v为维度i0的初始位置。
  • 我们知道任何时候两个2D点之间的距离it的平方根
  • 使用沿着维度的位置公式,我们可以用t和我们之前定义的常数替换距离方程中的所有内容。为简便起见,我们将调用函数((a.x(t) - b.x(t))^2 + (a.y(t) - b.y(t))^2);
  • 最后使用该等式,我们将知道d(t)t是碰撞开始或结束的位置。
  • 根据二次方程式我们将半径移到左边,我们得到d(t) = a.radius + b.radius
  • 然后我们可以扩展和简化得到的等式,所以一切都是d(t) - (a.radius + b.radius) = 0和我们给出的常数值。使用这个解决正面和正面;二次公式的负值。
  • 这也会处理错误,因为如果你得到两个永不碰撞的对象,你会得到一个未定义或想象的数字。

您应该能够非常轻松地将其余内容翻译成代码。我已经没时间了,我会尽可能地写出一个简单的解决方案。