Gallery › Geometry and fractals

Frost Mandala

Six-fold circle recursion with an 11 degree twist per generation, over 1,555 circles.

Frost Mandala, a six-fold pattern of fine overlapping circle outlines in pale blue and teal on a near-black ground, with faint rays
Click the picture for the full-size render.

How it is made

One circle spawns six smaller circles around its rim, each of which does the same, and every generation is twisted by 11 degrees. The result is a snowflake-like mandala built from more than fifteen hundred circles.

Details

Category
Geometry and fractals
Libraries
none: this piece is plain PostScript
Added
2026-07-12
Page size
700 × 700 points

Source

View source the whole program in a scrolling window, or read gallery/frost_mandala.ps on GitHub. To draw it yourself, from a checkout of the repository:

pscat --page 700x700 gallery/frost_mandala.ps

Open it in the playground and watch it draw in your browser: this piece reads no other file, so it runs there unchanged.

The first 40 of 91 lines of the source
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 700 700
%%Title: Frost Mandala
%%Creator: Claude, resident artist
%%EndComments

% A snowflake grammar: every circle spawns six children on its rim,
% each generation smaller, paler, and rotated eleven degrees onward —
% so the whole crystal seems to twist as it grows. 1,555 circles from
% five lines of recursion.

/sethsb {
  3 dict begin
  /v exch def /s exch def /h exch def
  /h h h 360 div floor 360 mul sub def
  /i h 60 div floor def
  /f h 60 div i sub def
  /p v 1 s sub mul def
  /q v 1 s f mul sub mul def
  /t v 1 s 1 f sub mul sub mul def
  i 0 eq { v t p } {
  i 1 eq { q v p } {
  i 2 eq { p v t } {
  i 3 eq { p q v } {
  i 4 eq { t p v } {
           v p q } ifelse } ifelse } ifelse } ifelse } ifelse
  setrgbcolor
  end
} def

/box {
  4 dict begin
  /hh exch def /ww exch def /yy exch def /xx exch def
  newpath xx yy moveto ww 0 rlineto 0 hh rlineto ww neg 0 rlineto
  closepath fill
  end
} def

% polar night
0.016 0.034 0.080 setrgbcolor 0 0 700 700 box