A 2-dimensional physics engine written in Cairo
2-dimensional ellastic collision
euler_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 box
collision_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.