gpt4 book ai didi

math - 寻找碰撞点(移动圆圈+时间)

转载 作者:行者123 更新时间:2023-12-02 00:29:52 25 4
gpt4 key购买 nike

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

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

是否可以反过来做:

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

是否可以确定两个圆的碰撞位置以达到最短旅行时间?

即圆 1 从 0,0 开始并以 1,0 的速度移动(每次向右移动 1 个单位)Circle 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 发生碰撞 - 但您可能会错过圆移动的碰撞点快速,或获得次优点等。

最佳答案

解决这个问题有两个关键:

  • 首先,在 t 时间内从 x2 可到达的点形成一个以 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) 方向上使用单位向量。

关于math - 寻找碰撞点(移动圆圈+时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461081/

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