harro, thanks to the people who have helped/ commented on my post, though i might try to give something back. (ie, finished another step of my physics engine)
setup. have object in game world, and want it to move/ collided/ have forces act on it/ momentum
a potential solution. reduce each object to a 'force diagram' at the begining of each frame (quantify all the forces on the object) and resolve this in the world. (so, i have this force from gravity, this from velocity, now subtract the static coeeficent of resting on an object, if force still left then kinect coefficent and or whatever...)
the math.
SumForce = (velocity(old) * mass ) / time
SumForce += (acceleration forces in world(gravity & whatever)) * mass
SumForce -= restitance force if im resting on another object
Displacement = ((SumForce * time * time) + ( velocity(old) * time )) * 0.5
Velocity = (SumForce * time) / mass
_note. displacement is the average of old and new sumforce * t^2, I just think of it in terms of velocity, as i use it in collision....
perhaps this could be of sue to someone, derived from
F = ma and
x - x0 = vt + 0.5at^2
Hey,
I wrote a simple physics engine about a year ago which handled particles, spring-damper systems, and environments (friction, air resistance etc). One word of warning, at present, you're using Euler integration to calculate your values of Displacement and velocity:
s = u*t + 1/2*a*(t^2)
u = initial velocity, s = distance, a = acceleration, t = time change
This is just one of the equations of motion, but your equation:
x - x0 = vt + 1/2*a*t^2 is an Euler integration, which may cause stability issues later down the line.
When I first wrote my physics engine, I though, yeah yeah, stability crap, it'll be fine, but then when my particles somehow started gaining energy in their spring-damper systems and oscillated to a massive speed, I realised that maybe Euler integration wasn't going to work.
You have a number of options:
Mid-point integration
4th order Runge-Kutta integration
Taylor Series expansion
none of them are particularly exciting, but I'm sure if you search for them, they'll pop up all over the place, and won't be too hard to implement!
cheers
Matt
Hi David, yeah I've been playing around with similar stuff, and I'm doing something similar - although I'm breaking it into two parts - statics and dynamics. Statics being momentum transfer/conservation of momentum, and Dynamics being this force resolution you're talking about. You'd probably also extend this to building up a graph of objects that are touching, and chain the momentum transfer/conservation of energy calculations.
For example, if A is pushing on B and B is resting up against C, you need to resolve the momentum transfer as a chain to get everything moving with the appropriate velocities.
It looks like you're attempting to handle both the Statics and Dynamics in one, which is probably going to be really tricky. The momentum (ie velocity(old)*mass bit above) isn't a force, and including it will essentially mean that the faster an object is travelling the faster it will accelerate.
You probably want to divide SumForce through by the mass (a = F/m) - unless you're assuming everything is the same mass anyway. And think the last line for Velocity = should be Velocity +=.
I've yet to finish the conservation of momentum/energy part of my system, I may yet collapse the Statics and Dynamics back into one lot of code, but want to get it working separately first (much easier to debug :)
Cheers,
Mark