我一直在寻找游戏/模拟解决方案,以便在时间运行时寻找距离,而这并不是我想要的。
我正在寻找一个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)方法
答案 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
的初始位置。i
是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
和我们给出的常数值。使用这个解决正面和正面;二次公式的负值。您应该能够非常轻松地将其余内容翻译成代码。我已经没时间了,我会尽可能地写出一个简单的解决方案。