http://rbwhitaker.wikidot.com/2d-particle-engine-1 - 4