Simulation - Shape Matching with PPD

Path of the code: [04_shape_matching]
The objective of this exercise is to implement a Rigid Body simulation using PPD approach and Shape Matching. This approach relates to the publications
Once completed, the result should be similar to this online version.

Program structure

The current program applies a standard integration using the Position Based Dynamics approach over object (cubes, cylinder, cones, etc.) made from multiple particles positionned at the vertex of their respective mesh. This integration is performed in the file simulation/simulation.cpp.
During the simulation, the positions are constrained with three functions: So far, only collision_with_walls is completed, and the two other functions need to be filled.

Shape matching

First start by implementing the function shape_matching for a rigid transformation.
Reminders on shape matching:
Once implemented, the new object you create should preserve their shape and collide with the walls.

Collision between particles

Now add the collision between shapes. To this end, we can consider that each particle is associated to a colliding sphere with a specific radius (simulation_parameter.collision_radius). Handling the collision between the object consists in handling collision between two spheres belonging to different shapes.
Notes:

Elasticity and Plasticity

Extend the model to handle a notion of elasticity and plasticity to deformation.
Example of elastic deformation
Example of plastic deformation