Capitalized function names
Replaced shape with radius

Is there a non-polymorphic way to generalize the shape here?
Modified to use correct member and methods
Added function param that is called at the start

of simulate and after each simulation step
Refactored repeated functionality; comments
Modified Update to use Simulate's callback param
Added time param to Update; IsOverlap is now static