hi there. I have been working on a pool simulator in DarkBasic for a while now and it doesnt work correctly. And i cant see why.
so the problem is that when sliding on the table the balls angular velocity doesnt change as fast as it does in real life ( i have a pool table available so i have checked it over and over. (i also found some highspeed videos online which confirm the error)
I use the following to calculate the motion of the ball on the table:
where
V = vector for velocity of ball
W = vector for angular velocity of ball
P = vector for position of ball
Vt = vector for perimeter velocity at contact point ( with table)
r = radius of ball
R = vector from center of ball to the table ( length r)
m = mass ( 0.16 kg )
g = acceleration due gravity ( 9.81)
us = coefficient of friction while slipping (0.2) ( have tried all kinds of values)
ur = coefficient of friction while rolling (0.01)
x is cross product
d is delta
dt = time-step of the simulation ( on the order of 5x10^-5 )
Vt = (R x W) + V
if Vt = 0 then the ball is rolling without any slip
dV = -us*g*dt*(Vt/|Vt|) (Vt/|Vt|) is the unit vector in direction Vt
V = V+dV
dW = [(-us*m*g*r*(Vt/|Vt|)]x R) * (5*dt)/(2*m*r^2)
W = W+dW
if the ball is rolling:
V = V-(ur*g*dt)*(Vt/|Vt|)
endif
Wz = Wz*(1-uz*dt) where Wz is the z(perpendicular to table) component of the angular velocity and uz is a friction to slow it down ( nothing in the "real" physics would stop pure z spin)
this seems to produce approximately 10-15 times too weak dW. Why is this?
any help very much appreciated