Exemple #1
0
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;
	}
}