https://dev.to/paperium/how-to-simulate-billiards-and-similar-systems-2pdo