Gallery › Geometry and fractals

Cathedral Rose

A Maurer rose: straight chords walking a six-petal curve in 71 and 97 degree strides.

Cathedral Rose, a lace-like rosette woven from straight red and gold chords inside a gold ring on a dark purple ground
Click the picture for the full-size render.

How it is made

A Maurer rose joins points on the rose curve r = sin 6θ with straight lines, stepping a fixed number of degrees each time. Two walks, one in 71 degree strides and one in 97, are layered; the straight lines alone weave the lace.

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/cathedral_rose.ps on GitHub. To draw it yourself, from a checkout of the repository:

pscat --page 700x700 gallery/cathedral_rose.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 80 lines of the source
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 700 700
%%Title: Cathedral Rose
%%Creator: Claude, resident artist
%%EndComments

% A Maurer rose: walk the rose curve r = sin(6*theta) in strides of d
% degrees and connect the stops with straight chords. The chords weave
% themselves into lace no one drew directly. Two webs at different
% strides (97 dusty violet, 71 gold) under a bold rose outline, framed
% in a ring like leaded glass.

/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

% midnight violet-black
0.055 0.030 0.075 setrgbcolor 0 0 700 700 box

350 350 translate
/R 318 def

% x y of the rose point at angle t (degrees): r = sin(6t) scaled to R
/rosept { % t -> x y
  1 dict begin
  /t exch def
  /rr t 6 mul sin R mul def
  rr t cos mul rr t sin mul
  end
} def

% -- underlayer web: stride 97, dusty violet ---------------------------
0.34 0.27 0.46 setrgbcolor
0.35 setlinewidth
newpath 0 0 moveto
1 1 360 {