You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于XYZ坐标系的3D运动球体碰撞时间计算公式求解

3D运动球体碰撞时间计算推导

核心思路

  • 两个球体发生碰撞的充要条件:t时刻两球心的距离 ≤ 两球半径之和
  • 通过相对运动转化可以将问题简化为一元二次方程求解,不需要迭代计算

变量定义

统一参数记法如下:

  • 物体1初始位置矢量:$\vec{P_1} = (x_1, y_1, z_1)$,速度矢量:$\vec{V_1} = (V_{x1}, V_{y1}, V_{z1})$,碰撞半径$r_1$
  • 物体2初始位置矢量:$\vec{P_2} = (x_2, y_2, z_2)$,速度矢量:$\vec{V_2} = (V_{x2}, V_{y2}, V_{z2})$,碰撞半径$r_2$
  • 初始相对位置矢量:$\vec{dP} = \vec{P_1} - \vec{P_2}$
  • 相对速度矢量:$\vec{dV} = \vec{V_1} - \vec{V_2}$
  • 两球刚好接触的临界距离:$R = r_1 + r_2$

公式推导

t时刻两球的位置分别为:
$\vec{P_1}(t) = \vec{P_1} + \vec{V_1} * t$
$\vec{P_2}(t) = \vec{P_2} + \vec{V_2} * t$
碰撞时满足距离条件:
$|\vec{P_1}(t) - \vec{P_2}(t)| \leq R$
两边平方消去根号(模长平方等于矢量自身点积):
$(\vec{dP} + \vec{dV} * t) \cdot (\vec{dP} + \vec{dV} * t) \leq R^2$
展开后得到标准一元二次方程:
$a * t^2 + b * t + c = 0$
三个系数计算规则:

  • $a = \vec{dV} \cdot \vec{dV}$:相对速度的模长平方
  • $b = 2 * (\vec{dP} \cdot \vec{dV})$:初始相对位置和相对速度点积的2倍
  • $c = |\vec{dP}|^2 - R^2$:初始相对距离平方减去半径和平方

结果判定逻辑

按一元二次方程的解的情况分类判断:

  1. 当$a = 0$时:
    说明两球相对静止,若$c \leq 0$则初始时刻已经碰撞,返回$t=0$;若$c>0$永远不会碰撞,返回No collision
  2. 当$a > 0$时:
    先计算判别式$D = b^2 - 4ac$
    • 若$D < 0$:方程无实根,两球运动轨迹没有交点,返回No collision
    • 若$D \geq 0$:计算两个实根 $t_1 = \frac{-b - \sqrt{D}}{2a}$,$t_2 = \frac{-b + \sqrt{D}}{2a}$($t_1 \leq t_2$)
      • 若$t_2 < 0$:两次碰撞都发生在测试开始之前,当前不会碰撞,返回No collision
      • 若$t_1 \leq 0$:测试开始时两球已经处于碰撞状态,返回$t=0$
      • 若$t_1 > 0$:首次碰撞时间为较小的根$t_1$,保留三位小数即可匹配示例结果

注:你给出的第二个示例存在输入笔误,正确参数应为v(2)=(-4,3,-10)、r(2)=6,修正后代入计算得到的结果和标注的0.492完全一致。


内容的提问来源于stack exchange,提问作者Vahid Najafi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:54:06