void Component::updateMassInertia(Site& site) { _m += site.m(); // assume the input is already transformed to the principal axes system // (and therefore the origin is the center of mass) // _I[0] += m * (y * y + z * z); _I[0] += site.m() * (site.ry() * site.ry() + site.rz() * site.rz()); // _I[1] += m * (x * x + z * z); _I[1] += site.m() * (site.rx() * site.rx() + site.rz() * site.rz()); // _I[2] += m * (x * x + y * y); _I[2] += site.m() * (site.rx() * site.rx() + site.ry() * site.ry()); // _I[3] -= m * x * y; _I[3] -= site.m() * site.rx() * site.ry(); // _I[4] -= m * x * z; _I[4] -= site.m() * site.rx() * site.rz(); // _I[5] -= m * y * z; _I[5] -= site.m() * site.ry() * site.rz(); _rot_dof = 3; for (unsigned short d = 0; d < 3; ++d) { _Ipa[d] = _I[d]; if (_Ipa[d] == 0.) --_rot_dof; } }