[ODE] Re: center of mass

Guillaume Jouffroy oxymore at tele2.fr
Thu Oct 20 15:50:23 MST 2005

This is quite a clear explanation ;-)

Now let me summarize things I know and what you told together to see if 
I got things as they should.
If we virtually add a mass to each geom of a complex geom stuff; 
orienting each geom with geomtransform
we need to do the same transformation to the mass as the mass position 
wont follow (but where is the mass at start ?
cos we don't position it and we dont attach it... at 0,0,0 Am I right ?).
Summing the masses build up a center of masses of the complex object, 
which is wherever placed.
Now we need to put a rigid body to be linked to all these geoms. This 
rigidbody has to be at this center
of mass (why moving the geoms instead of the body ? strange), so we set 
its position to the mass position
vector mass.c.
The example does moving geoms to this center of mass m:
  for (k=0; k<2; k++) {
    dGeomSetPosition (g2[k],

But then it moves the center of mass ????
dMassTranslate (&m,-m.c[0],-m.c[1],-m.c[2]);

And there is something strange too: I can't draw the right geomtransform 
geoms. Well I draw them but they do not move
with the object if I don't use the same drawGeom function of the example 
i.e what is this for ? :
dGeomID g2 = dGeomTransformGetGeom (g);         // I do that
const dReal *pos2 = dGeomGetPosition (g2);           //that too
const dReal *R2 = dGeomGetRotation (g2);            //this as well
Then I think its sufficient but:
dVector3 actual_pos;           /* I don't do this strange transformation */
dMatrix3 actual_R;
dMULTIPLY0_331 (actual_pos,R,pos2);
actual_pos[0] += pos[0];
actual_pos[1] += pos[1];
actual_pos[2] += pos[2];
dMULTIPLY0_333 (actual_R,R,R2);
 drawGeom (g2,actual_pos,actual_R,0);

Finally if I attach a joint to the rigidbody of a complex geoms object, 
I don't have any idea how
the joint will be linked in reality between this complex object and 
another rigidbody. Do you ?
To the closest geom virtually ?

More information about the ODE mailing list