Avoid division by zero when calculating inertias for bodies with colliders without areas.

(cherry picked from commit e347baddf3)
This commit is contained in:
Arkadiusz Marcin Kołek 2021-05-29 14:11:59 +02:00 committed by Rémi Verschelde
parent 6e67b7a93e
commit 7f14210a4c
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -65,17 +65,19 @@ void BodySW::update_inertias() {
// We have to recompute the center of mass.
center_of_mass_local.zero();
for (int i = 0; i < get_shape_count(); i++) {
real_t area = get_shape_area(i);
if (total_area != 0.0) {
for (int i = 0; i < get_shape_count(); i++) {
real_t area = get_shape_area(i);
real_t mass = area * this->mass / total_area;
real_t mass = area * this->mass / total_area;
// NOTE: we assume that the shape origin is also its center of mass.
center_of_mass_local += mass * get_shape_transform(i).origin;
// NOTE: we assume that the shape origin is also its center of mass.
center_of_mass_local += mass * get_shape_transform(i).origin;
}
center_of_mass_local /= mass;
}
center_of_mass_local /= mass;
// Recompute the inertia tensor.
Basis inertia_tensor;
inertia_tensor.set_zero();
@ -86,12 +88,15 @@ void BodySW::update_inertias() {
continue;
}
real_t area = get_shape_area(i);
if (area == 0.0) {
continue;
}
inertia_set = true;
const ShapeSW *shape = get_shape(i);
real_t area = get_shape_area(i);
real_t mass = area * this->mass / total_area;
Basis shape_inertia_tensor = shape->get_moment_of_inertia(mass).to_diagonal_matrix();