【问题标题】:Finding point of collision (moving circles + time)寻找碰撞点(移动圈+时间)
【发布时间】:2011-11-19 15:18:41
【问题描述】:

对于两个直线运动的圆,计算碰撞时间很容易:http://twobitcoder.blogspot.com/2010/04/circle-collision-detection.html

这假设圆有固定的起点和固定的运动路径,并计算碰撞的时间。

是否可以反过来做:

圆1:起点X1,Y1,速度VX1,VY1(起点固定,直线运动轨迹固定),半径R1 圆2:起点X2,Y2速度标量(1m/sec等)(起点固定,速度固定,方向未知),半径R2

是否可以在最短行程时间内确定两个圆的碰撞位置?

I.E. 圆 1 从 0,0 开始,以 1,0 的速度移动(每次向右移动 1 个单位) 圆 2 从 5,5 开始,每次可以移动 1 个单位 碰撞位置是什么(或 VX2,VY2 圆 2 需要移入)才能使 2 个圆在最低时间 T 发生碰撞。 两个圆的半径都是1

在此示例中,解决方案将是圆 1 周围的某处,即在时间 3 的点 3,0。这个问题感觉相当复杂,因为您有未知变量:碰撞点、碰撞时间、VX2、VY2。虽然 VX2 和 VY2 会受到 |VX1|+|VX2| 的约束= 1。

问题的原因是告诉圈子 2 它应该移动到哪里才能“抓住”圈子 1。

蛮力解决方案是在每个时间间隔检查圆 1 的位置,并计算如果告诉圆 2 移动到该点,圆 2 是否会与圆 1 发生碰撞 - 但您可能会错过圆正在移动的碰撞点快,或获得次优点等。

【问题讨论】:

    标签: math game-physics mathematical-optimization continuous


    【解决方案1】:

    简单地解决这个问题有两个关键:

    • 首先,从x2 在时间t 到达的点形成一个以x2 为中心的圆。
    • 其次,圆可以接触的第一时刻必须是切线接触。

    这些结合起来告诉我们点x2(0)x2(T)、接触点和x1(T)都是共线的。

    如果我们绘制一个图表来显示这一点,我们会在 t 中得到一个二次方程:

    || x2(0) - x1(0) - v1 t ||^2 = (r1+r2+t)^2
    

    这对于 t 很容易解决。

    要获得v2 的方向,我们只需要使用x1(T)-x2(0) 方向上的单位向量。

    【讨论】:

    • Michael,请您指出哪些变量是二次方的“a”、“b”和“c”?我假设'x'是我们要解决的问题。谢谢!
    • 我在此处sites.google.com/site/therobotsbrain/files/… 以 PDF 形式进行了更清晰的描述,希望这会使事情变得更清晰(在堆栈溢出上写数学并不容易..)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多