Accelerating circle packing using histogram pyramids

A fast way to pick a random unoccupied pixel in an image.

Log-polar graph paper

Fading between levels of detail to avoid huge scale differences and sharp edges.

Iterated function systems with cube maps

Model the whole complex plane via the Riemann sphere as an OpenGL cube map.

Möbius transformations and the Riemann sphere

Sphere rotations correspond to certain elliptic Möebius transformations, which can be interpolated in a Bézier fashion.

Inflector Gadget v0.3.2

Keyframe animation and the return of single precision support with OpenGL 3.3 (OpenGL 4 double precision still an option)

Efficent automated Julia morphing

Nucleus finding, Misiurewicz point finding, and a bit of guesswork, combine for successful O(period) automatic Julia morphing.

A more accurate elliptic variation

Improving image quality by avoiding catastrophic cancellations.

Morphogenesis colouring book

A self-published physical artifact of reaction-diffusion.


Based on a SIGGRAPH 2001 paper, with blue noise generated by inverse Fourier transform.

Clusters 3D

Endosymbiosis simulation leads to sticky boid-like flocks that behave like super-organisms.

Periodicity scan

Finding periodic points in the Mandelbrot set to make annotated images.

Coupled continuous cellular automata

Patterns similar to multi-layer reaction diffusion systems.

Calendar 2015 - Lyapunov FM

Image from 2013 LAC paper, Lyapunov Space of Coupled FM Oscillators.

Shades of Gray

Five-bit Gray code rotary encoder.

Plastic rectangles

The non-trivial partitioning of a square into 3 similar rectangles.


Physics-based ray-tracing in curved space.

Adventures with radiosity

Porting rrv to OpenGL 3 for a 30x speed boost.

Möbius Infinity

Square cross-section lemniscate of Bernoulli, with a twist.


Adding noise improves image quality during quantization.

Making seasonal cards with Snowglobe

Combining saved flake images using command line tools.

ReCode Project - Topographic Form

Reimplementing computer art from the 1970s, part 2.

Fish variations

Generalizing a tiling into hyperbolic variants.

Stroking curves of constant width

An approximation for relatively narrow widths.

Butterfly Variations

triangular vertex symmetry using p²+q²+pq colours

Escher's Butterflies

reverse-engineering a tesselation

Dorkbot London presentation

Tone mapping for high dynamic range imaging.