简单而逼真的台球加速

Simple yet realistic billiard ball acceleration

我有一个简单的 2D 台球游戏。你可以给一个球一些速度,它会四处移动并击中其他球。但我希望球最终停止,所以我添加了一些加速度,每帧 运行 这段代码:

balls[i].ax = -balls[i].vx * 0.1;
balls[i].ay = -balls[i].vy * 0.1;
...
if(hypot(balls[i].vx, balls[i].vy) < 0.2){
    balls[i].vx = 0;
    balls[i].vy = 0;
}

它有效...但我觉得它很奇怪,不现实。我没有物理知识,但我很确定摩擦力不应该取决于速度。

如何在不过于复杂的情况下改进减速的物理原理?

滚动摩擦公式是这样的:F_k,r =μ_k,r_ Fn。它仅考虑表面特性 (μ_k) 和球上的力 (r_ Fn)。这应该以恒定值减速,只需调整它直到看起来大致正确。

示例代码:

x = 1 // mess around with this until it looks right
if (ball.xVelocity > x) { ball.xVelocity -= x } else { ball.xVelocity = 0 }
if (ball.yVelocity > x) { ball.yVelocity -= x } else { ball.yVelocity = 0 }