Refer Simulation Documentation for motivation for each function. The code is commented as well.
Simulation with mode (solve next collision analytically) (fences, triangle, circle)
Solving each nextCollision using rootSolve (fences, triangle, circle, x^4)