Time-step independent friction model

AI Thread Summary
The discussion revolves around implementing time-step independent physics in a programming project, specifically focusing on the calculation of friction. The original code structure attempts to calculate acceleration, movement, and friction but encounters issues with achieving time-step independence. A participant points out that the method used for calculating movement is incorrect, as it combines velocity and acceleration improperly. They suggest a correction to the movement calculation to ensure accurate distance computation. The original poster acknowledges a typo and considers the feedback for optimization. The conversation emphasizes the importance of correctly implementing physics calculations to achieve realistic simulation results, particularly in the context of friction and motion.
TK
Messages
5
Reaction score
0
Help with Friction

Greetings , all fellow scientists!




I've been struggling with time-step independent physics for a programming project. The problem is that it doesn't seem to be time-step independent after all. Here's some of it in a pseudo-code form. It seems to be the friction part where it goes wrong. The reason I'm calculating friction like that anyway is because this way has a nice property of limiting the speed. ( Should implement surface friction and drag separately for better simulation though. ) The following gets executed at varying intervals. Hope the variable names are self-explanatory.
Code:
``calc acc vector without friction
acc_x = time_step * ( move_force_x / mass )
acc_y = time_step * ( move_force_y / mass )
acc_z = time_step * ( move_force_z / mass )

``calc movement vector without friction
move_x = time_step * ( speed_x + ( acc_x / 2 ) )
move_y = time_step * ( speed_y + ( acc_y / 2 ) )
move_z = time_step * ( speed_z + ( acc_z / 2 ) )

``calc and apply friction
move_force_x = move_force_x - ( move_x * friction_coefficient )
move_force_y = move_force_y - ( move_y * friction_coefficient )
move_force_z = move_force_z - ( move_z * friction_coefficient )


``calc acc vector
acc_x = time_step * ( move_force_x / mass )
acc_y = time_step * ( move_force_y / mass )
acc_z = time_step * ( move_force_z / mass )

``calc movement vector
move_x = time_step * ( speed_x + ( acc_x / 2 ) )
move_y = time_step * ( speed_y + ( acc_y / 2 ) )
move_z = time_step * ( speed_z + ( acc_z / 2 ) )

``calc new speed
speed_x = speed_x + acc_x
speed_y = speed_y + acc_y
speed_z = speed_z + acc_z

``calc new pos
pos_x = pos_x + move_x
pos_y = pos_y + move_y
pos_z = pos_z + move_z

And now in a shorter form joining the coordinates to vector-type variables. Could have only posted that one but then the variable names would have been less self-explanatory.
Code:
``calc acc vector without friction
V_acc = time_step * ( V_move_force / mass )

``calc movement vector without friction
V_move = time_step * ( V_speed + ( V_acc / 2 ) )

``calc and apply friction
V_move_force = V_move_force - ( V_move * friction_coefficient )


``calc acc vector
V_acc = time_step * ( V_move_force / mass )

``calc movement vector
V_move = time_step * ( V_speed + ( V_acc / 2 ) )

``calc new speed
V_speed = V_speed + V_acc

``calc new pos
V_pos = V_pos + V_move

Maybe it's more like a mathematical question but anyway it is wrong to separate those sciences. The physics are not complex here and that's why I thought it'd do with lesser explanation on what it is supposed to do and so on. In case the above is how it should be after all I'll take a look at the part where it calculates the time-step in the 1st place.
Thanks in advance!




All the best!


TK
 
Last edited:
Physics news on Phys.org
I do not see any way that your calculations can be time step independent, please provide more information about what you mean.

move_x = time_step * ( speed_x + ( acc_x / 2 ) )

This will not give you the correct position. You are adding a velocity to an acceleration, you need to do this:

move_x = time_{step} * (speed_x + (time_{step} * \frac {acc_x} 2))

to get a distance.
 
Hiya , Integral!


Thank You for a really fast reply! Thought I'd have to wait atleast until tomorrow morning.
Anyway , it should be a nice , little optimization. Follow the flow of the code...
Code:
``calc acc vector without friction
V_acc = time_step * ( V_move_force / mass )

``calc movement vector without friction
V_move = time_step * ( V_speed + ( V_acc / 2 ) )
...acceleration is premultiplied with time-step. Should of have made it clearer though and perhaps named the variable differently.
 
Last edited:
Had a mistype( typo ) there...
``calc and apply friction
move_force_X = move_force_x - ( move_x * friction_coefficient )
move_force_X = move_force_y - ( move_y * friction_coefficient )
move_force_X = move_force_z - ( move_z * friction_coefficient )
This is not the case with the real thing though.
So , has anyone got any ideas? Thank You!
 
Has anyone got any ideas?
 
The rope is tied into the person (the load of 200 pounds) and the rope goes up from the person to a fixed pulley and back down to his hands. He hauls the rope to suspend himself in the air. What is the mechanical advantage of the system? The person will indeed only have to lift half of his body weight (roughly 100 pounds) because he now lessened the load by that same amount. This APPEARS to be a 2:1 because he can hold himself with half the force, but my question is: is that mechanical...
Hello everyone, Consider the problem in which a car is told to travel at 30 km/h for L kilometers and then at 60 km/h for another L kilometers. Next, you are asked to determine the average speed. My question is: although we know that the average speed in this case is the harmonic mean of the two speeds, is it also possible to state that the average speed over this 2L-kilometer stretch can be obtained as a weighted average of the two speeds? Best regards, DaTario
Some physics textbook writer told me that Newton's first law applies only on bodies that feel no interactions at all. He said that if a body is on rest or moves in constant velocity, there is no external force acting on it. But I have heard another form of the law that says the net force acting on a body must be zero. This means there is interactions involved after all. So which one is correct?
Back
Top