Hmm... well firstly if you're going for real physics you'll need to learn a little about Vectored Maths, or XYZ updating maths.
As Vectors actually give the greatest control and mean you don't have to repeat everything you calculate 3 times are probably the better option.
Now as DarkBasic doesn't actually have a Vector function - mainly because you can specify values for variables this mean you'll have to make your own.
Also it doesn't have structures which makes it slighty harder to setup ... but what i'd recommend is making it a single value though bitshifting.
Simply take the float XYZ values your using (may want to a W for speed) and give them say 4bits each.
`// bitshift 1.1
function bitRight( vValue, vStep )
vExport = vValue /( 2^vStep )
endfunction vExport
function bitLeft( vValue, vStep )
vExport = vValue *( 2^vStep )
endfunction vExport
so X would be Vector# bitLeft(X#,0), y would be step 4, z step 4 and w step 12

i'd recommend 4 bit because it keeps it under 16bit - this is for speed reasons mostly - but if you try to make bit values bigger you'll understand the second reason.
Now you can use this value to add, subtract, multiply, blah blah against other vectors and then you interpol that value. Why do this?
again a speed reason, but with your value as a single value vector you can do alot of complex calculations to all three points at one time then once its all done you can simply bitRight and get the values you require.
To get rotation you base this on 2 Vector points and the current horizon plane - so imagine you're doing Triginometry math, and you have the base line for the 180° now that should always be level to the planes axis planes, so you'll have three for that as well which i'll try to explain later. But as vector base is always you're current objects Center of Gravity and the length|width determines the current speed ... the means your end vector is the currently projected heading. So it should be easy to calculate with simple trig using the objects axis points as a base where you're interpoling the rotational value to.
To interpol a value all your doing is creating a value which can be added within a time frame to smooth out calculations. I'd suggest the amount of interpols should be set to 30 as that will always keep things smooth
So like
Vector# - Vector2# / 30 = Interpol#
Vector1# + Interpol#
but of course you'll have to make sure the whole loop is working to a timeframe rather than irratic FPS, and perhaps for somthing more realistic you'll later wanna change these for dynamic interpols which can curve the values by creating algorithms
(^_^) well that's something to look into really.
However if you keep using what your being i'd use newxvalue|newyvalue|newzvalue functions
Anata aru kowagaru no watashi! 