【问题标题】:Collision detection between two accelerating spheres with no initial velocity?两个没有初始速度的加速球之间的碰撞检测?
【发布时间】:2014-08-06 07:43:31
【问题描述】:

最初,两个半径为 R1 和 R2 的非接触球体处于静止状态。
然后在时间=0 时分别给它们两个加速度 a1 和 a2。
找出它们是否会接触。它们的初始位置分别表示为 (x1,y1,z1)
和 (x2,y2,z2)。加速度在 3D 中具有各自的分量。它们
分别表示为 (a1i,a1j,a1k) 和 (a2i,a2j,a2k)。

球体成功碰撞的数学条件是什么?或者解决这类问题的编程思维应该是什么。

注意:如果您能就问题中提到的变量,即 r1,r2,x1,y1,z1,x2,y2,z2,a1i,a2i,a1j,a2j 给出令人满意的条件,那就太好了,a1k 和 a2k

【问题讨论】:

  • 我认为你可以只使用“如果 (x1,y1,z1) 和 (x2,y2,z2) 之间的距离小于两个半径之和 (r1+r2),那么他们正在碰撞)。
  • (x1,y1,z1) 和 (x2,y2,z2) 是初始位置,而不是球体的瞬时位置。此外,问题中提到的球体最初没有接触。
  • 嗯,所以你只有加速度和初始坐标,你需要知道是否有任何 't' 值,在该值处相交条件为真。这确实是一个有趣的问题,我个人不知道如何解决这个问题。赞成它的挑战。

标签: collision-detection physics collision game-physics bulletphysics


【解决方案1】:

使用给定的变量名:

  • 点1在时间0的位置是(x1,y1,z1)
  • 点2在时间0的位置是(x2,y2,z2)
  • 点1在时间t的位置为p1(t) = (x1,y1,z1) + 0.5 * (a1i,a1j,a1k) * t * t
  • 点2在时间t的位置为p2(t) = (x2,y2,z2) + 0.5 * (a2i,a2j,a2k) * t * t
  • 在时间 t 的交叉点条件是| p1(t) - p2(t) | < r1+r2

| ... |表示欧式距离,即| (x,y,z) | = sqrt(x*x+y*y+z*z)

这产生了条件:

sqrt((x1+0.5*a1i*t*t - x2+0.5*a2i*t*t)^2+
     (y1+0.5*a1j*t*t - y2+0.5*a2j*t*t)^2+
     (z1+0.5*a1k*t*t - z2+0.5*a2k*t*t)^2) < r1 + r2

如果有 t 条件为真,则球体在该时间点接触/相交。

我尝试将其输入 WolframAlpha 并求解 t,但没有成功。 实施一个纯粹的分析解决方案将是困难的,无论如何。

【讨论】:

  • 我将我的简单示例 ((0,0,1),(0,0,2),(0,0,1.2),(0,0,1.1)) 与 (r1+ r2)=0.1 作为(1+0.5*1.2*x*x) - (2+0.5*1.1*x*x) - 0.1 = 0 进入WolframAlpha 并收到4.69042 的答案,这似乎是合理的。 WolframAlpha 正在做什么来解决这个问题?
【解决方案2】:

非常感谢您帮助我。幸运的是,我找到了解决方案。我在这里与所有热衷于这个问题的人分享它。

【讨论】:

  • 这看起来是一个很好的答案。您是否有任何关于您的解决方案来源的更多链接或信息?
【解决方案3】:

它们是球体,因此如果它们的中心之间的距离小于它们的半径之和,它们就会重叠。 如果加速度使球体沿直线移动,则只需计算这些轨迹之间的距离,在 3D 中,它是它们的方向向量和将它们的两个应用点联合起来的向量的混合乘积(比如说,初始位置你的球体)除以它们的方向向量的叉积的模块。 之后,您应该看到第一个球体何时将位于与另一个轨迹的距离最小的点上。完成后,您只需计算该时刻第二个球体的位置,看看它们是否重叠

【讨论】:

  • 诚然,很难从视觉上想象这一点,我不确定我是否理解您的描述,但我认为球体(可能)碰撞的点不一定 i> 他们的轨迹距离最短的点。
  • @Marco13 的反对意见是正确的。例如,假设起始位置为 0,0,1 和 0,0,2,加速度分别为 0,0,1.2 和 0,0,1.1。第一个球体最终会通过第二个球体,但两条轨迹线上没有“最近”点。你也可以想象一个轻微的偏移,这样当两条线交叉时,它不是在交叉处,而是在球体碰撞的稍后某个点。
  • @Dane Again:我不确定 Adrien 是否真的声明碰撞发生在最近的点 - 对我来说,听起来像这样,但也许我误解了它
  • 当然,你是对的,我没有想过这种可能性:/
猜你喜欢
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多