Experiments in Circle Packing
The Process
Circle packing has been something I've seen in some generative art pieces, but not something I've attempted to make before. I tend not to have a purely algorithmic approach to my work--I usually end up half-implementing what I had in mind, and running with my mistakes (and definitely not because I am too lazy to look for my errors).
The basic premise of circle packing is this:
- Expand circles frame by frame.
- If a circle is touching/intersecting another circle, stop expanding that circle.
- Don't draw new circles inside of existing circles.
To check for intersections, we can compare every new circle with its distance to every existing circle. This is O(n^1), and there might be a more efficient solution.
- If the distance between the center of any two circles is greater than the sum of the two circles' radii, then the circles are intersecting.
- // For every circle,
- // if distance <= r0 + r2, then circles are intersecting
Of the four pieces I made, only one of them is proper circle packing. In the other pieces, I made a mistake where I only check for circle intersections with my starting pool of circles. Regardless, I got some results I was happy with.
Source code and full animations on OpenProcessing below.