[ODE] ODE BUG
Andrew Aye
AndrewA at terminalreality.com
Thu Oct 20 16:13:00 MST 2005
I believe the following is true <shrug> IMHO
acceleration = a
velocity is the time integral of acceleration or v(t) = v0 + t*a
position is the time integral of velocity or s(t) = s0 + t*v0 + 0.5*a*t*t
So to be precise, neither of the equations as listed are correct
However, even though its slightly incorrect the way ODE does it is:
Calculate:
v1 = v0 + at ( or in their case v1 = v0 + (inverse Mass) * (Force) *
t )
s1 = s0 + t(v1)
As you can see this will slightly overestimate the integration process.
-----Original Message-----
From: kalikali at tlen.pl [mailto:kalikali at tlen.pl]
Sent: Thursday, October 20, 2005 3:26 PM
To: ode at q12.org
Subject: [ODE] ODE BUG
I think I found some serious bug in ODE.
Position of the body (changed by applied force) is incorrectly calculated.
Position in timestep should be calculated as:
x = x0 + v0 * (t - t0) + 0.5 * a * (t - t0)
Currently it is calculated as:
x = x0 + v0 * (t - t0) + a * (t - t0)
(without * 0.5 !!!!)
//==============================================================
unit util.cpp (dxStepBody)
b->pos[j] += h * b->lvel[j];
//==============================================================
Put some body in field of gravity, and do dWorldQuickStep(,10)
Check body position
Now, do the same, but in loop:
for (i=0;i < 10;i++) dWorldQuickStep(,1)
Check body position
Positions are not the same !!!
This is the problem
//==============================================================
I've made a little patch (currently only for quick step) but I
don't know is this correct.
Lukasz
_______________________________________________
ODE mailing list
ODE at q12.org
http://q12.org/mailman/listinfo/ode
More information about the ODE
mailing list