'Simple yet realistic billiard ball acceleration [closed]

I have a simple 2D game of pool. You can give a ball some speed, and it'll move around and hit other balls. But I want a ball to stop eventually, so I added some acceleration, by running this code every frame:

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;
}

And it works... But I find it weird, not realistic. I have no physics knowledge, but I'm pretty sure friction should not depend on speed.

How can I improve physics of slowing down without too much complexity?



Solution 1:[1]

The rolling friction formula is this: F_k,r?=?_k,r_?Fn. It only factors in the properties of the surface (?_k) and the force on the ball (r_?Fn). This should decelerate with a constant value, just adjust it until it looks roughly correct.

Example code:

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 }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 lxhom