A 2-dimensional physics engine written in Cairo
source: https://en.wikipedia.org/wiki/Elastic_collisioneuler_step_single_circle_aabb_boundary()
: Forward the position and velocity of one circle by one step with Euler method, where the circle is bounded by an axis-aligned boxcollision_pair_circles
(): For two circle objects, given their current positions and next candidate positions, which come from Euler forward function, detect if they would have collided, and handle the collision by snapping them to the point of impact, and set their velocities assuming fully elastic collision. Note that this function assumes the two circle objects to share the same radius value, and that it does not handle potential tunneling effect.friction_single_circle()
: Handle acceleration recalculation with kinetic friction
forward_scene_capped_counting_collision()
: Forward a scene of circle objects by cap number of steps, where each step involves forwarding each object with Euler method, handling all possible collisions, and recalculate acceleration based on friction. The function keeps count of collision occurences between all pairs of objects.