Armin Hofmann Style Circles

Published On

May 15, 2021

Asset A
Asset A

Armin Hofmann's Graphic Design Manual is a treasure trove for any computational designer. It is full of interesting exercises in procedural approaches to graphic design. The most interesting and the widely circulated one is the exercise on page 70. The idea is fairly simple; take a grid of 16 circles and connect them to form a single form. A more intuitive explanation is running a piece of string around 16 circular pegs. The resulting form is fascinating. Like many creative coders, I was drawn to this form and decided to recreate and explore it in my software of choice then Nodebox.

Asset A

Armin Hofmann: Graphic Design Manual (© Armin Hofmann, 1965)

Asset A

Armin Hofmann: Graphic Design Manual (© Armin Hofmann, 1965)

Asset A

Armin Hofmann: Graphic Design Manual (© Armin Hofmann, 1965)

The setup was recreated in Nodebox by plotting tangents between the circles selected on the grid. Between two circles that are not touching, there can be two common tangents: a direct tangent that touches the same side and a transverse one that touches the opposite sides. Depending on the circle's relative position in the grid, the algorithm determines the type of tangent. Connecting the tangent points gives the main shape, and adding the circles to the shape results in the final form.


The setup was recreated in Nodebox by plotting tangents between the circles selected on the grid. Between two circles that are not touching, there can be two common tangents: a direct tangent that touches the same side and a transverse one that touches the opposite sides. Depending on the circle's relative position in the grid, the algorithm determines the type of tangent. Connecting the tangent points gives the main shape, and adding the circles to the shape results in the final form.


The setup was recreated in Nodebox by plotting tangents between the circles selected on the grid. Between two circles that are not touching, there can be two common tangents: a direct tangent that touches the same side and a transverse one that touches the opposite sides. Depending on the circle's relative position in the grid, the algorithm determines the type of tangent. Connecting the tangent points gives the main shape, and adding the circles to the shape results in the final form.


Asset A

Connecting mutual tangents

Asset A

Final shape

Asset A

Connecting mutual tangents

Asset A

Final shape

Asset A

Connecting mutual tangents

Asset A

Final shape

Now that there is a procedural setup that can plot the shape, the next task was to manipulate the "levers" to get interesting results. The main parameters that can be varied are: number and position of the circles, diameter of the circles, whether each circle should be included or excluded in the shape, and sequence of connecting the circles. In my search to find a unique variation, I decided to keep all parameters fixed and play with the radii of the circle. I attempted to superimpose multiple radii of the same shape on itself. This gave some interesting results.

Now that there is a procedural setup that can plot the shape, the next task was to manipulate the "levers" to get interesting results. The main parameters that can be varied are: number and position of the circles, diameter of the circles, whether each circle should be included or excluded in the shape, and sequence of connecting the circles. In my search to find a unique variation, I decided to keep all parameters fixed and play with the radii of the circle. I attempted to superimpose multiple radii of the same shape on itself. This gave some interesting results.

Now that there is a procedural setup that can plot the shape, the next task was to manipulate the "levers" to get interesting results. The main parameters that can be varied are: number and position of the circles, diameter of the circles, whether each circle should be included or excluded in the shape, and sequence of connecting the circles. In my search to find a unique variation, I decided to keep all parameters fixed and play with the radii of the circle. I attempted to superimpose multiple radii of the same shape on itself. This gave some interesting results.

Asset A

Superimposing multiple radii

Asset A

Superimposing multiple radii

Asset A

Superimposing multiple radii

While the lines themselves are pretty interesting to look at, filling the shapes with a color was even more exciting. The parameter controlling the range of radii can also control a range of colors for the shape as well, effectively blending between two colors. Furthermore, the range could also be animated to create a partial blur-like effect that was pretty novel.

While the lines themselves are pretty interesting to look at, filling the shapes with a color was even more exciting. The parameter controlling the range of radii can also control a range of colors for the shape as well, effectively blending between two colors. Furthermore, the range could also be animated to create a partial blur-like effect that was pretty novel.

While the lines themselves are pretty interesting to look at, filling the shapes with a color was even more exciting. The parameter controlling the range of radii can also control a range of colors for the shape as well, effectively blending between two colors. Furthermore, the range could also be animated to create a partial blur-like effect that was pretty novel.

Asset A
Asset A
Asset A