计算两个圆圈之间的碰撞时间 - 物理
我一直陷入游戏/模拟解决方案中,以便在时间运行时找到距离,而这不是我正在寻找的。计算两个圆圈之间的碰撞时间 - 物理
我正在寻找一个O(1)公式来计算(0或1或2)时钟时间(s),其中两个圆圈完全相互为r1 + r2距离。负面的时间是可能的。有可能两个圆圈不会相撞,并且它们可能没有交叉点(例如,当两辆汽车在相反方向上行驶过于接近道路中间时彼此“剪辑”),这会弄乱我所有的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)方法)
有一个简单的( - )解决方案。你已经提到使用二次方程式是一个好的开始。
首先定义您的问题,其中二次公式可以有用,在这种情况下,中心之间的距离,随着时间的推移。
- 让我们来定义时间
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
。 - 我们知道两个2D点之间的距离在任何时候
t
是((a.x(t) - b.x(t))^2 + (a.y(t) - b.y(t))^2)
- 平方根算了笔的条款,我们定义的常量使用沿着维度,我们可以替代的距离公式的一切位置的公式早。为简写起见,我们将调用函数
d(t)
; - 最后使用该公式,我们将知道值是
d(t) = a.radius + b.radius
是碰撞开始或结束的地方。 - 为了把这个二次方程式方面我们移动半径向左所以我们得到
d(t) - (a.radius + b.radius) = 0
- 然后,我们可以扩展和简化结果方程等等一切都在
t
条款和我们得到的常数值。使用该解决方案为正数&负值与二次公式。 - 这也会处理错误,因为如果你得到两个永远不会碰撞的对象,你将得到一个未定义或虚构的数字。
你应该可以很容易地将其余的代码翻译成代码。我没有时间atm,并会尽我所能写出一个简单的解决方案。
对象是否具有恒定的速度?如果是这样,你应该简单地能够解决_t_。什么不起作用? – pingul