【问题标题】:Predict Collision Between 2 Uniform Circular Motion Objects预测 2 个均匀圆周运动对象之间的碰撞
【发布时间】:2021-07-12 19:06:27
【问题描述】:

这是我在论坛上的第一个问题,我的代数生锈了,所以请放纵^^'

所以我的问题是我想预测两个匀速圆周运动物体之间的碰撞,我知道它们的速度(弧度角速度)、到原点的距离(半径)、圆心的笛卡尔坐标。

我可以使用 t 时间(时间戳)获得每个对象的笛卡尔位置:

Oa.x = ra X cos(wa X t)

Oa.y = ra X sin(wa X t)

Oa.x: 对象 A x 坐标 ra: 圆 A 的半径 wa: 物体 A 的速度(以弧度为单位的角速度) t:时间(时间戳)

对象 b (Ob) 也是如此

我想找到这样的||Ca - Cb|| = (rOa + rOb)

rOa: 对象a的半径

平方和扩展给我这个: ||Ca-Cb||^2 = (rOa+rOb)^2

(ra * cos (wa * t) - rb / cos (wb * t))^2 + (ra * sin (wa * t) - rb / sin (wb * t))^2 = (ra+rb)^2

从中我应该得到一个可以求解 t 的二次多项式,但是我怎样才能找到一个条件来告诉我这样的 t 是否存在?并且可能,如何解决它?

【问题讨论】:

  • 这可能更适合math.stackexchange.com
  • 好的,我去那里试试,谢谢你的回答。
  • 两条轨迹的中心相同?
  • 我很确定你只需要用数字求解 t,这是你能做的最好的。
  • @Olivier 不,两条轨迹都有不同的中心

标签: algorithm math


【解决方案1】:

你的运动方程缺少一些我期望的东西:

a0(t) = omg0*t + ang0
x0(t) = cx0 + R0 * cos(a0(t))
y0(t) = cy0 + R0 * sin(a0(t))

a1(t) = omg1*t + ang1
x1(t) = cx1 + R1 * cos(a1(t))
y1(t) = cy1 + R1 * sin(a1(t))

其中t 是以 [sec] 为单位的时间,cx?,cy? 是以 [rad] 为单位的旋转中心 ang? 是以 [rad] 为单位的起始角度 (t=0)omg? 是以 [rad/sec] 为单位的角速度。如果对象的半径为r?,则当距离为 r0+r1

时会发生碰撞

所以你想找到最小的时间:

(x1-x0)^2 + (y1-y0)^2 <= (r0+r1)^2

这很可能会导致超越方程,因此您需要数值方法来解决这个问题。对于这样的事情,我通常使用Approximation search 来解决这个问题:

  1. t0 循环到某个合理的时间限制

    碰撞将以恒定频率发生,并且碰撞之间的时间可以被两个运动的周期整除,所以我会测试 lcm(2*PI/omg0,2*PI/omg1) 时间限制,其中 lcm 是最小公倍数

    不要用蛮力循环t通过所有可能的时间,但使用启发式(如上面链接的近似搜索)注意初始时间步长必须合理我会尝试dt = min(0.2*PI/omg0,0.2*PI/omg1)所以你至少有10个点沿着圆圈

  2. 求解t,使物体之间的距离最小

    但是,这将找到对象完全碰撞以使它们的中心合并的时间。因此,您需要减去一些恒定时间(或再次搜索),这将使您开始碰撞。这次你甚至可以使用二分搜索,因为距离是单调的。

  3. lcm(2*PI/omg0,2*PI/omg1)之后会出现下一次碰撞

    所以如果你找到了第一次碰撞时间tc0 那么

    tc(i) = tc0 + i*lcm(2*PI/omg0,2*PI/omg1)
    i = 0,1,2,3,...
    

【讨论】:

  • 感谢您的详细回答,我已经在使用类似的方法,但使用蛮力而不是近似搜索。这就是为什么我一直在寻找一种方法来优化我找到第一次碰撞的方法(tc0),但似乎超越方程对我来说太多了。再次感谢您花费宝贵的时间来帮助我:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多