This was my university dissertation project.
I wanted to pick something that would allow me to learn as much as possible about a wide range of topics.
I chose a 2D Physics Engine because it allowed me to learn about the physics behind it, collision detection, spatial partitioning, data structures and more.
It also allowed me to experiment with designing and implementing a more complex system with different moving parts.
The full report can be found here.