Game Development Reference
In-Depth Information
{
double C, D, G;
C = -(I + R * S * cos(beta));
D = I;
G = Qbeta - alpha_dot * alpha_dot * R * S * sin(beta) −
S * (g * sin(theta + beta) - a * cos(theta + beta));
return (G - C * alpha_dotdot) / D;
}
The solution to Equations 1 and 2 follows the Runge-Kutta scheme we showed you in
Chapter 7 . Four intermediate steps are taken for each time step. The time step size is
controlled by dt , which we've set to 0.0025s. If you simply used Euler's method, you'd
have to reduce this step size quite a bit to obtain a stable solution. We implemented the
solution in the main function of our console example. The code is as follows:
int _tmain(int argc, _TCHAR* argv[])
{
double a, at;
double b, bt;
int i;
FILE* fp;
double phi;
double Vc2;
double ak1, ak2, ak3, ak4;
double bk1, bk2, bk3, bk4;
FILE* fdebug;
fp = fopen("results.txt", "w");
fdebug = fopen("debug.txt", "w");
for(i = 0; i<200; i++)
{
time += dt;
if(time>=0.1)
{
Qbeta = 0;
}
// save results of previous time step
a = alpha;
b = beta;
at = alpha_dot;
bt = beta_dot;
// integrate alpha'' and beta''