Estive lendo, um pouco , Física das corridas. Felizmente, é possível achar a uma função para velocidade final. Consideraremos Fw ( força nas rodas obtida pelo torque do motor ), Fc ( atrito de rolamento ) e Fd ( força de arrasto ). Consideraremos o movimento no plano 2D.
<—– Fw [ Carro ] (Fd + Fc)–>
Suponhamos que Fw não é em função da velocidade nem do tempo e sabemos que Fc é constante.
Assim, temos :
Fw - Fd - Fc = ma = m(dv/dt)
Seja A = Fw - Fc e B = 1/2pACd, onde p é a dens. do ar, A é área frontal e Cd é coef. de arrasto. Sabemos que Fc = CrW, onde W é o peso ( consideraremos que é igualmente distribuido entre as rodas e suponhamos que o W é constante) e Cr é coeficiente.
Assim , temos :
A - Bv² = m ( dv/dt ) <-> dt = m ( dv / ( A - Bv² )
Então :
Integral [ dt ] ( de t0 a t ) = m . integral ( dv / ( A - Bv² ) ) ( de v0 a v )
Integrando e isolando v temos :
v = sqrt ( A / B ) . F [ ( PERIODO * sqrt (A . B ) ) / m + F -1 ( v0 . sqrt( B / A ))]

PERIODO = periodo da atualização dos frames em seg.
v0 = velocidade inicial
F(x) = tgh(x) , se |v| < sqrt(A/B)
ou
F(x) = cotg(x), se |v| > sqrt(A/B)
sqrt(x) = raiz quadrada de x
F -1 é a função inverso da F (ou seja arctgh ou arccotg ). Veja a seguir um pequeno trecho do código em Java :
private double arctanh(double x) {
return ( (0.5) * Math.log( ( 1. + x ) / ( 1. - x ) ) ) ;
}
private double arccotg(double x) {
return Math.atan(1/x);
}
private double cotg(double x) {
return ( 1 / Math.tan(x)) ;
}
/*
* [veloc_init] = m/s ;
* [dt] = s : PERIODO DE ATUALIZACAO
* [S] = m² : Área fronta
* [m] = kg : massa do corpo
*/
private double calculaVeloc(double F, double veloc_init, double dt, double S) {double a , b ;a = F - Cr * ( m * g ) ;
b = ( 0.5 ) * p * S * Cd ;if ( Math.abs(veloc_init) < Math.sqrt(a/b) ) {
return ( Math.sqrt(a/b) * Math.tanh( ( ( dt * Math.sqrt(a*b) )/ m ) + arctanh(veloc_init * Math.sqrt(b/a)) ) ) ;
} else {
return ( Math.sqrt(a/b) * cotg( ( ( dt * Math.sqrt(a*b) )/ m ) + arccotg(veloc_init * Math.sqrt(b/a)) ) ) ;
}}