--- trunk/src/primitives/RigidBody.cpp 2005/01/12 22:41:40 246 +++ trunk/src/primitives/RigidBody.cpp 2005/01/25 17:45:23 273 @@ -39,6 +39,7 @@ * such damages. */ #include +#include #include "primitives/RigidBody.hpp" #include "utils/simError.h" namespace oopse { @@ -173,6 +174,16 @@ void RigidBody::calcRefCoords() { Itmp(2, 2) += mtmp * r2; } + //project the inertial moment of directional atoms into this rigid body + for (std::size_t i = 0; i < atoms_.size(); i++) { + if (atoms_[i]->isDirectional()) { + RectMatrix Iproject = refOrients_[i].transpose() * atoms_[i]->getI(); + Itmp(0, 0) += Iproject(0, 0); + Itmp(1, 1) += Iproject(1, 1); + Itmp(2, 2) += Iproject(2, 2); + } + } + //diagonalize Vector3d evals; Mat3x3d::diagonalize(Itmp, evals, sU_);