Game Development Reference

In-Depth Information

The next calculation is the total mass calculation, which is simply the sum of all element

masses. Immediately following that, we determine the combined center of gravity lo‐

cation using the technique we discussed in
Chapter 1
. The coordinates to the combined

center of gravity are referenced to the design coordinate system. You need to subtract

this coordinate from the design coordinate of each element in order to determine each

element's coordinates relative to the combined center of gravity. After that, you're all set

with the exception of the combined moment of inertia tensor, which we already dis‐

cussed in
Chapter 11
and
Chapter 12
.

Step 2 of our modeling method says you need to collect the airfoil performance data.

For the example program, we used a cambered airfoil with plain flaps to model the wings

and elevators, and we used a symmetric airfoil without flaps to model the tail rudder.

We didn't use flaps for the tail rudder since we just made the whole thing rotate about

a vertical axis to provide rudder action.

For the wings, we set up two functions to handle the lift and drag coefficients:

//------------------------------------------------------------------------//

// Given the attack angle and the status of the flaps, this function

// returns the appropriate lift coefficient for a cambered airfoil with

// a plain trailing-edge flap (+/- 15 degree deflection).

//------------------------------------------------------------------------//

float LiftCoefficient(float angle, int flaps)

{

float clf0[9] = {−0.54f, −0.2f, 0.2f, 0.57f, 0.92f, 1.21f, 1.43f, 1.4f,

1.0f};

float clfd[9] = {0.0f, 0.45f, 0.85f, 1.02f, 1.39f, 1.65f, 1.75f, 1.38f,

1.17f};

float clfu[9] = {−0.74f, −0.4f, 0.0f, 0.27f, 0.63f, 0.92f, 1.03f, 1.1f,

0.78f};

float a[9] = {−8.0f, −4.0f, 0.0f, 4.0f, 8.0f, 12.0f, 16.0f, 20.0f,

24.0f};

float cl;

int i;

cl = 0;

for (i=0; i<8; i++)

{

if( (a[i] <= angle) && (a[i+1] > angle) )

{

switch(flaps)

{

case 0:// flaps not deflected

cl = clf0[i] - (a[i] - angle) * (clf0[i] - clf0[i+1]) /

(a[i] - a[i+1]);

break;

case −1: // flaps down

cl = clfd[i] - (a[i] - angle) * (clfd[i] - clfd[i+1]) /

(a[i] - a[i+1]);

break;