Production notes for the video.

[picture of Niles]

Here are some sketchy production notes for the Hopf fibration video, having to do with how or why I did particular things.

Parametrization of fibers

To actually draw Hopf fibers, we have to have a specific formula for the Hopf fibration. Following unpublished notes of Ken Shoemake, I decided to use the function \[ \eta(q) = q \cdot \mathbb{k} \cdot q^{-1} \] where \(q \in S^3\) is a unit quaternion and we use quaternion arithmetic for the multiplication. In coordinates with \[ q = (w,x,y,z) = w + x \mathbb{i} + y \mathbb{j} + z \mathbb{k} \] we have \[ \eta(q) = (0, 2wy + 2xz, 2yz - 2wx, w^2 + z^2 - x^2 - y^2). \] This confirms that the image of \(\eta\) lies in the three dimensions spanned by \(\mathbb{i}, \mathbb{j}\) and \(\mathbb{k}\). It is also easy to see that \(|\eta(q)| = 1\), and hence \(\eta(q) \in S^2\).

To parametrize the fiber over a point \((a,b,c) \in S^2\), suppose \(\eta(q) = (a,b,c)\). Then \[ w^2 + z^2 = \frac{1+c}{2} \] and \[ x^2 + y^2 = \frac{1-c}{2}. \] Let \(\alpha = \sqrt{\frac{1+c}{2}}\) and \(\beta = \sqrt{\frac{1-c}{2}}\) and let \[ q = (w,x,y,z) = (\alpha \cos \theta, \alpha \sin \theta, \beta \cos \phi, \beta \sin \phi). \] Then the angle-sum formulas yield \[ a = 2 \alpha \beta \sin (\theta + \phi) \] \[ b = -2 \alpha \beta \cos (\theta + \phi). \] Thus \(\frac{-a}{\phantom{-}b} = \tan (\theta + \phi)\), and we have \[ \theta = \arctan \left(\frac{-a}{b}\right) - \phi. \] For a modified stereographic projection to the unit ball in \(\mathbb{R}^3\), let \(r = \frac{\arccos(w)}{\pi}\). Then the fiber over \((a,b,c)\) is parametrized by \[ f(\phi) = \frac{r}{\sqrt{1-w^2}} \cdot (x,y,z), \qquad \phi \in [0,2\pi]. \] This map is the inverse to the exponential map from the closed unit ball to \(S^3\).


The colors for fibers and the points they project to are chosen by using the \(a\), \(b\), and \(c\) coordinates on \(S^2\) for the red, green, and blue values, respectively. (They're scaled slightly, to avoid having too many light colors.)

Paths on the two-sphere

To see various features of the fibration, we used different paths on \(S^2\). In order for dots to move with uniform speed, the paths need to be parametrized by arc length. It's generally impossible to give an elementary expression for this parametrization, but it is possible to compute it numerically: The length of a parametric curve \(r(t)\) with \(t \in [0,1]\) is given by: \[ L = \int_0^1 |r'(t)| \, dt \] To generate a partition \(\{t_0, t_1, \ldots, t_n\}\) with the arc length between each \(r(t_{i})\) and \(r(t_{i+1})\) being \(L/n\), we used Sage's numerical integration to repeatedly solve the equation \[ L/n = \int_{t_i}^{t_{i+1}} |r'(t)| \, dt \] for \(t_{i+1}\), given \(t_i\).


The accompanying music comes from Mandelbrot Set by Jonathan Coulton. I like the lyrics, but they don't really fit the Hopf theme, so I took the karaoke version and filtered out the remaining vocals with Audacity. I also abridged the song, since it seemed a little too long without the vocals. I chose this particular peice of music because:

  • I like Jonathan Coulton's music, and I like the attitude he has about producing music. In particular, he uses a license which grants others permission to use his music for their own projects.
  • I wanted an upbeat song that wasn't too long.
  • The Mandelbrot Set is one of the earliest and most popular mathematical images. It's an archetype for computer-generated visualization of mathematical structure, and hence somewhat related to the purpose of the Hopf fibration video.

Source code

Want to make your own images, or an even better animation? Go ahead! Load it into your Sage session and enjoy!

Fork hopf_fibration on GitHub

The code is licensed under the GNU General Public License (version 2 or later). I'd love to see what you do with it!

show background grid hide background grid grid OFF

Creative Commons License

The pages of are licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported License.