Here are a selection of visual tools I have built to help understand aspects of maths, science, or design.

Coupled Harmonic Oscillator

This interactive worksheet will build up your intuition about what normal modes are in physics. We'll focus on the coupled harmonic oscillator system, where two masses on springs can interact with each other.

Taylor Series

Power series are an important concept in science and engineering. This visualisation demonstrates what a polynomial approximation to a function means, and how the point at which the expansion is taken determines the properties of the series.



It is possible to generate high-quality images of a scene by considering how light rays interact with solid objects. We can calculate lighting, shadows and reflections, which add realism to an image when based in a good physical model.

Colour Picker

Selecting the right set of colours for a project is an essential part of design. Yet most colour pickers use a model where some colours are artificially brighter than their counterparts. This can cause unwanted artefacts. By using a range of perceptually uniform models - this tool allows you to easily pick the right colour for the job.


Fractals, Chaos, (and Non-linear Dynamics)

Nature is jaggedy. It's not completely smooth, nor is it completely random. By setting up and following simple deterministic rules, fantastical complexity can arise, which can produce some visually stunning images. The surprising aspect of this is many physical and engineering systems also seem to follow these rules too.


This visualisation builds an understanding of matrices, focusing on 2×2 examples. Intuition is build on how basis vectors transform, eigenvalues and vectors, and special types of matrix.


Complex Numbers

Visualising functions of a complex variable is in principle difficult. There are two input variables (z=x+iy), and two output variables (w=u+iv), so ideally we would need to draw graphs in 4D space. This is technically challenging, so the solution is to instead draw the output in colour space, leaving the input in 2D coordinate space.