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

如何计算带摩擦力的小球运动模拟中抵达目标坐标的耗时

小球到达目标坐标的时间计算公式

核心原理

你的小球做的是方向恒定、受固定摩擦减速的匀变速直线运动,符合经典匀变速位移公式,直接通过一元二次方程求根即可得到所需时间。

公式推导

匀变速直线运动位移公式为:
s = v₀t + ½at²
其中参数对应你的代码逻辑:

  • s:小球初始位置到目标的直线距离,单位为像素,对应代码Math.sqrt(dx*dx + dy*dy)
  • v₀:初始每帧移动速度,对应代码velocity * 100(updateBall每100ms执行一次,乘以100得到每帧移动的像素数)
  • a:加速度,摩擦减速时为负值,值为-friction * 100(每帧速度减少friction,对应每帧的加速度为负的该值)
  • t:所需的updateBall执行帧数

整理为一元二次方程形式:
0.5 * f * t² - v₀ * t + s = 0
(f为每帧减速度,值为friction * 100)

代入一元二次方程求根公式,取符合物理逻辑的较小正根(大根是速度降为负数后反向移动回到目标点的时间,不符合你速度降到0就停止的逻辑),得到帧数计算公式:
t = (v₀ - √(v₀² - 2*f*s)) / f

转换为毫秒直接乘以100即可:
总毫秒数 = t * 100

示例验证

你给出的测试参数:

  • 目标距离s ≈ 223.6068像素
  • 初始每帧速度v₀ = 0.05 * 100 = 5像素/帧
  • 每帧减速度f = 0.0003 * 100 = 0.03像素/帧²
    代入计算得t ≈ 53.22帧,乘以100得到约5322毫秒,和你预期的5300ms完全吻合。

注意事项

  • 计算前需要先判断v₀² >= 2*f*s,如果该条件不成立,说明根号内为负数,小球减速到0时还没到达目标,无法抵达
  • 代码中取Math.floor(t)得到的是需要完整执行的updateBall次数,若需要更高精度可以额外计算剩余距离所需的时间补全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:54:00