[ODE] ODE regarding drag and lift

Ander Taylor ander_taylor at hotmail.com
Thu Nov 6 03:08:36 MST 2003

```Hi Jon,

The function below is from a Managed C++ Wrapper so you will have to play
around with it.

It is ages since I worked on it, so I will not try to explain what I think
it is doing! If you have any questions, just ask and I will try to help.

void BoxGeom::ApplyHydrodynamicForces(dReal linear_viscosity, dReal
angular_viscosity, dReal density,Vector3 flow)
{
const dReal *lvel = dBodyGetLinearVel(this->_body->Id);
const dReal *avel = dBodyGetAngularVel(this->_body->Id);
const dReal *R = dBodyGetRotation(this->_body->Id);

dVector3 compFlow;
compFlow[0] = lvel[0] - flow.x;
compFlow[1] = lvel[1] - flow.y;
compFlow[2] = lvel[2] - flow.z;

dReal ss[3];
dGeomBoxGetLengths(this->_id, ss);

dReal AreaX = ss[1] * ss[2];
dReal AreaY = ss[0] * ss[2];
dReal AreaZ = ss[0] * ss[1];

dReal nx = (R[0] * compFlow[0] + R[4] * compFlow[1] + R[8] *
compFlow[2]) * AreaX;
dReal ny = (R[1] * compFlow[0] + R[5] * compFlow[1] + R[9] *
compFlow[2]) * AreaY;
dReal nz = (R[2] * compFlow[0] + R[6] * compFlow[1] + R[10] *
compFlow[2]) * AreaZ;

dReal temp = -nx*linear_viscosity;

temp = -ny*linear_viscosity;

temp = -nz*linear_viscosity;

nx = (R[0] * avel[0] + R[4] * avel[1] + R[8] * avel[2]) * (AreaY +
AreaZ);
ny = (R[1] * avel[0] + R[5] * avel[1] + R[9] * avel[2]) * (AreaX +
AreaZ);
nz = (R[2] * avel[0] + R[6] * avel[1] + R[10] * avel[2]) * (AreaX +
AreaY);

temp = -nx * angular_viscosity;
dBodyAddTorque(this->_body->Id, temp * R[0], temp * R[4], temp *
R[8]);

temp = -ny * angular_viscosity;
dBodyAddTorque(this->_body->Id, temp * R[1], temp * R[5], temp *
R[9]);

temp = -nz * angular_viscosity;
dBodyAddTorque(this->_body->Id, temp * R[2], temp * R[6], temp *
R[10]);

dReal gravity[3];
dWorldGetGravity(this->_body->get_WorldId(), gravity);

temp = -density * ss[0] * ss[1] * ss[2];
temp*gravity[2]);

//which, unless you have a non-axis-aligned gravity, is probably
just:

}

I have a small demo if you want.

Cheers,

Ander

----Original Message Follows----
Hi all,

I'm considering using ODE to simulate flying objects and I need a bit of
background information.  Has anyone come across any examples of this or has
anyone attempted to modify ODE to consider, drag, lift and thrust etc?

Best regards,

Jon
_______________________________________________
ODE mailing list
ODE at q12.org
http://q12.org/mailman/listinfo/ode

_________________________________________________________________
Hot chart ringtones and polyphonics. Go to
http://ninemsn.com.au/mobilemania/default.asp

```