torsoGeom->setPosition(Ogre::Vector3(0,size.y-((size.y-4*radius)/2+2*radius),0)); //can't find a good way to explain this

If, for conveniance, we write

  r = radius
  h = size.y

We get :

 size.y-((size.y-4*radius)/2+2*radius) = h - [ (h-4r)/2 + 2r ] = h - [ (h-4r+4r)/2 ] = h - h/2 = h/2

Which is a lot simpler.

And, instead of writing :

 modelNode->translate(Vector3(0,-radius/ninjaNode->getScale().y,0));

Why not put :

 modelNode->translate( Ogre::Vector3( 0, -min.y / mNode->getScale().y, 0 ) );    // The bounding box must have its bottom at the height 0

(i tried, seems to work, and it's much more understandable)