gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:19:06 28 4
gpt4 key购买 nike

我一直在寻找游戏/模拟解决方案,以便在时间流逝时寻找距离,但这不是我要找的。

我正在寻找一个 O(1) 公式来计算(0 或 1 或 2)时钟时间,其中两个圆圈彼此之间的距离恰好为 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 可能有一个 collide(p1, p2) 方法)

最佳答案

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

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

  • 让我们将时间定义为 t
  • 因为我们使用的是两个维度,所以我们可以称我们的维度为 x & y
  • 首先让我们将圆的 t = 0 处的两个中心点定义为 a 和 b
  • 我们也将 a 和 bt = 0 处的速度分别定义为 u 和 v
  • 最后,假设 a 和 b恒定加速度分别为 o 和 p
  • 关于时间 t 的任意一维位置(我们称之为 i)的方程式如下: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) - by.y(t))^2)
  • 使用沿维度的位置公式,我们可以将距离方程中的所有内容替换为 t 和我们之前定义的常数。为了简写,我们将调用函数 d(t);
  • 最后使用该等式,我们将知道 d(t) = a.radius + b.radius 处的 t 值是碰撞开始或结束的位置。
  • 用二次公式表示,我们将半径向左移动,得到 d(t) - (a.radius + b.radius) = 0
  • 然后我们可以扩展和简化生成的方程式,以便一切都根据 t 和给定的常数值。使用二次公式求解正值和负值。
  • 这也会处理错误,因为如果您得到两个永远不会碰撞的对象,您将得到一个未定义或虚数。

您应该能够相当轻松地将其余部分翻译成代码。我的 atm 时间不多了,我会尽可能写出一个简单的解决方案。

关于physics - 计算两个圆之间的碰撞时间 - 物理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43577298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com