[ODE] Approximate Hydrodynamic Forces

Ander Taylor ander_taylor at hotmail.com
Fri Apr 18 07:05:02 2003


Hi David,

I think I have cracked it!!! : )

void ApplyHydrodynamicForces(dReal viscosity)
{
   const dReal *lvel = dBodyGetLinearVel(body);
   const dReal *R = dBodyGetRotation(body);
   dReal ss[3];
   dGeomBoxGetLengths(geom, ss);

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

   //In the end it was so simple. The rotation matrix is ordered 
differently.
   dReal DotProdX = (R[0]*lvel[0] + R[4]*lvel[1] + R[8]*lvel[2]);
   dReal DotProdY = (R[1]*lvel[0] + R[5]*lvel[1] + R[9]*lvel[2]);
   dReal DotProdZ = (R[2]*lvel[0] + R[6]*lvel[1] + R[10]*lvel[2]);

   dReal nx = DotProdX*AreaX;
   dReal ny = DotProdY*AreaY;
   dReal nz = DotProdZ*AreaZ;

   //In the end it was so simple. The rotation matrix is ordered 
differently.
   dReal temp = -nx*viscosity;
   dBodyAddForce(body, temp*R[0], temp*R[4], temp*R[8]);

   temp = -ny*viscosity;
   dBodyAddForce(body, temp*R[1], temp*R[5], temp*R[9]);

   temp =-nz*viscosity;
   dBodyAddForce(body, temp*R[2], temp*R[6], temp*R[10]);
}

I have been banging my head off the screen trying to work this out!!

I am a happy man now : )

Of course I would not have even got close if you had not helped me out in 
the first instance, thanks David.

Cheers,

Ander

_________________________________________________________________
Hotmail now available on Australian mobile phones. Go to  
http://ninemsn.com.au/mobilecentral/hotmail_mobile.asp