Related Stack Overflow questions:
Random non overlapping circles(with circle number controlled) in python and pygame
My implementation of Bridson’s algorithm Poisson-Disk Sampling seems to be stuck in an infinite loop
What cubic function can I use to get a random distribution biased towards the middle