Fix center of mass and inertia computations and add tests #127
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, the combined center of mass of a body and its collider was computed as
com1 + com2
, but this doesn't take into account different masses. The combined inertia was also computed asinertia1 + inertia2
without taking into account mass or the center of mass, i.e. the offset.This PR fixes the center of mass issue by computing it correctly like
(com1 * mass1 + com2 * mass2) / (mass1 + mass2)
, and the inertia issue by first shifting the inertia values by the relative center of mass. Subtracting mass properties is handled similarly, but by simply using-
instead of+
in many places. These fixes will be very important especially when we implement child colliders.I also added tests to verify that the mass and center of mass are correct after adding or subtracting mass properties. I didn't add tests for inertia yet (other than checking that
self + other - other = self
) as the calculations seem quite daunting to do by hand, so I'm not 100% sure if it's correct still. This can be verified later.