2024 π Daylatest newsbuy art
listen; there's a hell of a good universe next door: let's go.e.e. cummingsgo theremore quotes
very clickable
music + math
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
WELCOME TO THE 5TH DIMENSION | This isn't meant to be understood — it's meant to be enjoyed.
Love music and science? Explore my collaboration with Max Cooper where we tell the story of infinities and animate the digits of π. Both tracks appear on Max's Yearning for the Infinite album.
Another collaboration with Max!

Max Cooper's Ascent — Making of the Music video

Enter the 5th dimension

Ascent answers the question: if you were living in a 5-dimensional room and projected digits of `\pi` onto its walls, what would you see?

1 · What am I watching?

The scene takes place on a 5-dimensional stage, which is projected onto two dimensions (without perspective). Over time, cubes appear on the stage. Throughout the video, both the camera and each cube can rotate independently.

For some cubes, area maps of the digits of `\pi` or its approximations (e.g. 22/7) are projected onto some of the faces of the cube.

2 · How was the video made?

The video was created with a custom animation system that I wrote specifically for Ascent.

The animation is structured around a series of keyframes. Each keyframe (there are about 170 keyframes) is defined using a custom scripting language with which I can add elements to the scene, apply a rotation, zoom and scale, project area maps, and so on.

The keyframes were created manually and the motion was designed to match the dynamics and movement of the music. There is no automated synchronization.

For example, the first 8 seconds of the video is created from these keyframe definitions.

# parameter definitions
...
param = fs 24
# angle in units of 2π (–17.6 deg)
param = astepa2 d-0.048978
...
# add a cube with size 0 and edge fade 1
frame = 1.a; cube_add(c0,0,1)
# rotate the scene in yw plane by 'astepa2' amount (defined elsewhere)
frame = 1.a0; a yw astepa2
# previous keyframe parameters will be interpolated over 
# 2fs = 48 frames (2 seconds at 24 fps) to values of the next keyframe
# i.e. cube c0 edge fade in xy plane will linearly decrease from 1 to 0
frame = 1.a1; n 2fs; c c0 f [xy] 0
# cube c0 x size grows to 0.05
frame = 1.a2; n 2fs; c c0 s [x]  0.05  
# cube c0 x size grows to 0.10
frame = 1.a3; n 2fs; c c0 s [x]  0.10  
# cube c0 x size grows to 0.15
frame = 1.a4; n 2fs; c c0 s [x]  0.15  
...

Here are the first four keyframes — there are 2fs = 48 interpolated frames between each of these keyframes.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1 0:00:00 | 1/48 1.a0–1.a1
1.a0
a yw astepa2
1.a1
n 2fs
c c0 f [xy] 0

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #49 0:02:00 | 1/48 1.a1–1.a2
1.a1
n 2fs
c c0 f [xy] 0
1.a2
n 2fs
c c0 s [x] 0.05

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v
edge
1.00
1.00
0.00
0.00
0.00
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #97 0:04:00 | 1/48 1.a2–1.a3
1.a2
n 2fs
c c0 s [x] 0.05
1.a3
n 2fs
c c0 s [x] 0.10

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v
size
0.05
edge
1.00
1.00
0.00
0.00
0.00
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #145 0:06:00 | 1.a3–1.a4
1.a3
n 2fs
c c0 s [x] 0.10
1.a4
n 2fs
c c0 s [x] 0.15

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v
size
0.10
edge
1.00
1.00
0.00
0.00
0.00

For all the keyframes, see the keyframe section.

3 · The 5-dimensional cube

The 5-cube (`n=5`) has `2^5=32` vertices (0-cubes, corners), `2^4 \times 5 = 80` edges (1-cubes, lines), `2^3 \times 10 = 80` faces (2-cubes, squares), `2^2 \times 10 = 40` cubic cells (3-cubes) and `2^1 \times 5 = 10` tesseract cells (4-cubes).

In general, the number of `m`-cubes in an `n`-cube is $$E_{m,n} = 2^{n-m} \binom{n}m $$

4 · How to interpret a frame

Here's a sample frame from the video — this is frame 830/8520.

It shows a pair of three dimensional cubes, each with lines growing from their vertex towards the other cube.

But what you're actually seeing is a single 5 dimensional cube, but with some dimensions collapsed and edges along other dimensions not fully drawn.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #830 0:34:13 | 38/48 1.d1( 37/ 47)1.d2
1.d1
n 2fs
a xw astepb4
c c0 f [w] 0.9
c c0 s [w] 0.715
c c0 s [xyz] 0.15
rots
rxy2
!ryz2
1.d2
n 2fs
a xw astepb4
c c0 f [w] 0.8
c c0 s [w] 0.615
c c0 s [xyz] 0.15
rots
rxy2
!ryz2

view
x
y
z
w
v
zoom
1
1
1
1
1
x
276
4
341
3
y
325
345
3
C0
x
y
z
w
v
size
0.15
0.15
0.15
0.64
edge
1.00
1.00
1.00
0.18
0.00

4.1 · How to interpret angles

The view table shows the camera zoom and angle (in degrees). In 2-dimensional space there is one direction of rotation — in the `xy` plane (axis of rotation is `z`). In 3-dimensional space, there are three directions of rotation — in the `xy`, `yz` and `xz` planes. Once we reach 5 dimensions there are 10 directions of rotation (`xy`, `yz`, `xw`, `xv`, `yz`, `yw`, `yv`, `zw, `zv, `wv`).

In this frame, 7 of these angles are non-zero. It's essentially impossible to look at these angles and be able to predict how the rotated cube will look. To explore rotations in 4-dimensional space, check out Bartosz Chechanowski's excellent article on Tesseract building and rotation.

Each cube has its own angles. In this frame, the cube's angles are all zero, meaning that the rotation in the scene is due entirely to the rotation of the camera. Once more cubes are introduced, each can rotate independently to make the animation more dynamic.

4.2 · How to interpret cube size and edge length

There is one 5-dimensional cube in this scene (C0) and its size, edge length and rotation is presented in another table.

The cube has 5 size values, which correspond how far the cube extends into each of the dimensions. If the size `s_d` is zero then dimension `d` is collapsed. For example, if `s_w = s_v = 0` and `s_x = s_y = s_z = 1` then we just have a regular 3-cube.

In this frame, the cube has grown quite a bit in the 4th dimension `s_w = 0.64` but not as much in the first three dimensions `s_x = s_y = s_z = 0.15`. The fifth dimension is collapsed `s_v = 0`.

The cube's edge values `e_d` indicate how much of the edge along that dimension is drawn. If `e_d = 1` then the edge spans the full distance between vertices. For fractional values, the edge will extend only partially from the corner along the distance.

In this frame, the edges in the first three dimensions are fully drawn but along `w` the edge value is `e_w = 0.18` — the middle 82% of the edge is not drawn.

The combination of size and edge values can highlight lower-dimensional components of the cube — for example, by not drawing edges along certain dimension.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1050 0:43:17 | 18/48 1.d6( 17/ 47)1.d7
1.d6
n 2fs
a xw astepb4
c c0 f [w] 0.2
c c0 s [w] 0.215
rots
rxy2
!ryz2
1.d7
n 2fs
a xw astepb4
c c0 f [w] 0.0
c c0 s [w] 0.150
rots
rxy2
!ryz2

view
x
y
z
w
v
zoom
1
1
1
1
1
x
173
17
289
11
y
325
351
11
C0
x
y
z
w
v
size
0.15
0.15
0.15
0.19
edge
1.00
1.00
1.00
0.87
0.00

By the time we get to frame 1050, the edges along the `w` dimension are almost completely drawn (`e_w = 0.87`). But also the size of the cube along `w` has shrunk from `s_w = 0.64` to 0.19, which is very close to the size of the cube in the other dimensions (`s_{xyz} = 0.15`). This has the effect of bringing the 3-cube cells closer together.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1400 0:58:07 | 8/48 1.e6( 7/ 47)1.e7
1.e6
n 2fs
c c0 f [v] 0.80
c c0 s [xyzwv] 0.250
rots
rxy2
ryz2
1.e7
n 2fs
c c0 f [v] 0.70
c c0 s [xyzwv] 0.275
rots
rxy2
ryz2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
357
39
293
25
y
199
2
24
C0
x
y
z
w
v
size
0.25
0.25
0.25
0.25
0.25
edge
1.00
1.00
1.00
1.00
0.21

Shortly after, the cube's `v` dimension has grown (now the size along all dimensions is the same, `s_{xyzwv} = 0.25`) and edges are starting to form along the `v` dimension (`e_v` = 0.21).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1726 1:11:21 | 46/48 1.f3( 45/ 47)1.f4
1.f3
n 2fs
c c0 f [v] 0.10
rots
rxy2
ryz2
1.f4
n 2fs
c c0 f [v] 0.00
rots
rxy2
ryz2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
204
57
302
36
y
79
11
35
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
1.00
1.00
1.00

And, finally at frame 1726, we have our first complete (`s_{xyzwv} = e_{xyzwv} = 1`) 5-dimensional cube.

You now have everything that you need to interpret the full video. So, let's gets started on the walkthrough.

5 · Video Walkthrough

The walkthrough takes you through interesting landmarks in the video. It shows the frame, the keyframe before and after the frame (the frame is interpolated between these) and the parameters (size, edge, rotation, etc) of each object in the frame.

For a full list of keyframes, see the keyframe section.

5.1 · Dimensions grow

Initially the scene is blank — we have one cube but its size in all dimensions is zero.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1 0:00:00 | 1/8520 1/48 1.a0( 0/ 47)1.a1
1.a0
a yw astepa2
1.a1
n 2fs
c c0 f [xy] 0

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v

Slowly, the cube's size in the `x` dimension grows, now at `s_x = 0.14`. Edge values are `e_x = e_y = 1` meaning that the edge is completely drawn between vertices. The edge appears to grow because it's the cube that is growing (`s_x` is increasing).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #180 0:07:11 | 36/48 1.a3( 35/ 47)1.a4
1.a3
n 2fs
c c0 s [x] 0.10
1.a4
n 2fs
c c0 s [x] 0.15

view
x
y
z
w
v
zoom
1
1
1
1
1
y
343
C0
x
y
z
w
v
size
0.14
edge
1.00
1.00
0.00
0.00
0.00

The cube has grown to `s_x = 0.15` and is now growing in the `y` dimension (`s_y = 0.07`). Simultaneously, the scene is rotating in the `xy` plane. Note that there is an initial non-zero `yw` plane angle — this sets us up for an interesting point of view for when we start seeing the `w` dimension.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #300 0:12:11 | 36/72 1.a5( 35/ 71)1.a6
1.a5
n 3fs
c c0 s [y] 0.05
rxy3
1.a6
n 3fs
c c0 s [y] 0.10
rxy3

view
x
y
z
w
v
zoom
1
1
1
1
1
x
338
y
343
C0
x
y
z
w
v
size
0.15
0.07
edge
1.00
1.00
0.00
0.00
0.00

Next, the `z` diemension grows and we're finally starting to see a 3-cube form. We perceive two 2-cubes (squares) splitting up, with edges forming between them (`e_z = 0.85`). Of course, what's actually happening is that the 3-cube's `z` dimension is growing.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #600 0:24:23 | 24/48 1.b4( 23/ 47)1.b5
1.b4
n 2fs
c c0 f [z] 0.20
c c0 s [xy] 0.15
c c0 s [z] 0.130
ryz6
1.b5
n 2fs
c c0 f [z] 0.10
c c0 s [xy] 0.15
c c0 s [z] 0.140
ryz6

view
x
y
z
w
v
zoom
1
1
1
1
1
x
315
y
334
343
C0
x
y
z
w
v
size
0.15
0.15
0.13
edge
1.00
1.00
0.85
0.00
0.00

Around frame 675 is the first time we get a hint of higher dimensions. By now, the cube has grown equally in the first three dimensions (`s_{xyz} = 0.15`) and edges along these dimensions are fully formed (`e_{xyz} = 1`).

The cube now appears to be splitting into two copies because its `w` dimension is growing (`s_w = 0.12`). But, because no edges are drawn along this dimension (`e_w = 0`), the cubes don't appear to be connected in any way. Thus, we still really don't know how many dimensions this scene has — the effect is the same as if we were looking at a 3-dimensional scene in which a 3-cube splits into two.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #675 0:28:02 | 3/24 1.b6( 2/ 23)1.c1
1.b6
n 2fs
c c0 f [z] 0.00
c c0 s [xy] 0.15
c c0 s [z] 0.150
ryz6
1.c1
n 1fs
c c0 s [w] 0.815
c c0 s [xyz] 0.15

view
x
y
z
w
v
zoom
1
1
1
1
1
x
315
y
325
343
C0
x
y
z
w
v
size
0.15
0.15
0.15
0.12
edge
1.00
1.00
1.00
0.00
0.00

At frame 730, it looks like we have a pretty symmetric stacking of two 3-cubes but we're actually looking at a 4-cube without `w` edges and rotated in the `xy`, `yz` and `yw` planes to achieve this effect.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #730 0:30:09 | 34/48 1.c1( 33/ 47)1.c2
1.c1
n 1fs
c c0 s [w] 0.815
c c0 s [xyz] 0.15
1.c2
n 2fs

view
x
y
z
w
v
zoom
1
1
1
1
1
x
315
y
325
343
C0
x
y
z
w
v
size
0.15
0.15
0.15
0.81
edge
1.00
1.00
1.00
0.00
0.00

The scene now starts to rotate in a more complex fashion and edges along the `w` dimension begin to grow (`e_w = 0.07`) as this dimension starts to shrink (`e_w=0.74`) to the same size as (`e_{xyz} = 0.15`).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #780 0:32:11 | 36/48 1.c2( 35/ 47)1.d1
1.c2
n 2fs
1.d1
n 2fs
a xw astepb4
c c0 f [w] 0.9
c c0 s [w] 0.715
c c0 s [xyz] 0.15
rots
rxy2
!ryz2

view
x
y
z
w
v
zoom
1
1
1
1
1
x
299
1
352
1
y
325
344
1
C0
x
y
z
w
v
size
0.15
0.15
0.15
0.74
edge
1.00
1.00
1.00
0.07
0.00

This process continues and by frame 1500, the cube's size in all dimenions is the same (`e_{xyzwv} = 0.31`) and only the edges along `v` still need to grow to completion (right now, they're about 50% extended).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1500 1:02:11 | 12/48 1.e8( 11/ 47)1.e9
1.e8
n 2fs
c c0 f [v] 0.50
c c0 s [xyzwv] 0.300
rots
rxy2
ryz2
1.e9
n 2fs
c c0 f [v] 0.40
c c0 s [xyzwv] 0.325
rots
rxy2
ryz2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
310
45
295
28
y
163
4
28
C0
x
y
z
w
v
size
0.31
0.31
0.31
0.31
0.31
edge
1.00
1.00
1.00
1.00
0.52

By now, the entire scene has zoomed in a little bit — the camera zoom has increased from 1 to 1.3.

5.2 · Edges grow

Finally, more interesting things begin to happen. Four new cubes are introduced (C1, C2, C3, C4). Initially, these have the same size in each dimension as our original cube C0, but their `e_{xyzwv} = 0`, so no edges are drawn.

Then, the edges for C1 start to grow. Initially, only in the `xy` plane (`e_{xy} = 0.36)`. These edges are drawn with a thicker line and a difference blend, so what you're seeing (in the black and white version) is something that looks like a tube growing from the vertices.

The purpose of this scene is to draw attention to the faces in the `xy` plane.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #1825 1:16:00 | 1/48 2.b( 0/ 47)2.c
2.b
n 2fs
c c1 f [xy] s2f
rotthis2
2.c
n 2fs
c c1 f [xy] s2f
rotthis2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
158
57
305
36
y
43
11
36
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
1.00
1.00
1.00
C1
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
0.36
0.36
0.00
0.00
0.00
C2
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
C3
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
C4
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33

As the edges in C1 continue to grow, the edges in C2 in the `xz` plane start to grow (`e_{xz} = 0.46`).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #2100 1:27:11 | 36/48 2.g( 35/ 47)2.h
2.g
n 2fs
c c1 f [xy] s2f
c c2 f [xz] s2f
rotthis2
2.h
n 2fs
c c1 f [xy] s2f
c c2 f [xz] s2f
rotthis2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
29
57
311
36
y
302
11
41
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
1.00
1.00
1.00
C1
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
0.82
0.82
0.00
0.00
0.00
C2
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
0.46
0.00
0.46
0.00
0.00
C3
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
C4
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33

Finally, each of the C1–C4 cubes has grown its edges fully: C1 in `xy`, C2 in `xz`, C3 in `xw` and C4 in `xv`.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #2592 1:47:23 | 48/48 2.q( 47/ 47)2.r
2.q
n 2fs
c c1 f [xy] s2f
c c2 f [xz] s2f
c c3 f [xw] s2f
c c4 f [xv] s2f
rotthis2
2.r
n 2fs
c c1 f [xy] 0
c c2 f [xz] 0
c c3 f [xw] 0
c c4 f [xv] 0
rotthis2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
158
57
324
36
y
121
11
49
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
1.00
1.00
1.00
C1
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
0.00
0.00
0.00
C2
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
1.00
0.00
0.00
C3
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
0.00
1.00
0.00
C4
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
0.00
0.00
1.00

5.3 · Edges split

Now, something funky starts to happen. It looks like the faces from the original C0 cube are coming off. Yes they are.

This is achieved by increasing the size of the cubes C1–C4, which, if you remember, only had edges drawn within one plane (e.g. `xy`).

In this frame, cube C1 has grown from `s_{xyzwv} = 0.33` to 0.38. This is the cube that has `xy` edges (`e_x = e_y = 1`).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #2700 1:52:11 | 12/48 3.b( 11/ 47)3.c
3.b
n 2fs
c c1 s . s3s
rotthis2
3.c
n 2fs
c c1 s . s3s
c c2 s . s3s
rotthis2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
108
57
327
36
y
82
11
51
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
1.00
1.00
1.00
1.00
C1
x
y
z
w
v
size
0.38
0.38
0.38
0.38
0.38
edge
1.00
1.00
0.00
0.00
0.00
C2
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
1.00
0.00
0.00
C3
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
0.00
1.00
0.00
C4
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
1.00
0.00
0.00
0.00
1.00

Now, quite a bit is happening but it can all be understood in terms of what you've already seen.

First, the C1–C4 cubes have grown (each to a different extent) beyond the size of C0 (which makes their faces look like they've separated). For example, C1 has `s = 0.54` whereas C4 grew less at `s = 0.39`.

The other effect is that the edges for C0 are now shrinking towards the cube's vertices — this achieved by lowering the edge size to `e = 0.55`.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #3000 2:04:23 | 24/48 3.h( 23/ 47)3.i
3.h
n 2fs
c c0 f . s3f
c c[1-4] s . s3s
rotthis2
3.i
n 2fs
c c0 f . s3f
c c[1-4] s . s3s
rotthis2
rep 2

view
x
y
z
w
v
zoom
1.30
1.30
1.30
1.30
1.30
x
327
57
335
36
y
332
11
55
C0
x
y
z
w
v
size
0.33
0.33
0.33
0.33
0.33
edge
0.55
0.55
0.55
0.55
0.55
C1
x
y
z
w
v
size
0.54
0.54
0.54
0.54
0.54
edge
1.00
1.00
0.00
0.00
0.00
C2
x
y
z
w
v
size
0.49
0.49
0.49
0.49
0.49
edge
1.00
0.00
1.00
0.00
0.00
C3
x
y
z
w
v
size
0.44
0.44
0.44
0.44
0.44
edge
1.00
0.00
0.00
1.00
0.00
C4
x
y
z
w
v
size
0.39
0.39
0.39
0.39
0.39
edge
1.00
0.00
0.00
0.00
1.00

5.4 · Area maps of `\pi` on faces

Ready for more? Yes you are.

The edges of C0 have shrunk back to the cube's vertices (`e = 0.18`) so we only see 18% of the total edge length (i.e. there is a 82% gap in the middle of the edge). You'll also notice that the edges of C1 are starting to shrink (`e = 0.94`), which you can see as a small gap forming in one set of the thicker squares (e.g. first face from the right of the frame).

You're also seeing little specks form everywhere. These are the beginnings of the area maps of the digits of `\pi` (or its approximations), projected onto the faces of a cube.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #3275 2:16:10 | 11/48 4.a( 10/ 47)4.a
4.a
n 2fs
c c0 f . 0.90
c c1 f [xy] s4f
c c[0-1] s . p2
map_fade(c1,.,p1)
rotthis3
size . s4u

view
x
y
z
w
v
zoom
1.32
1.32
1.32
1.32
1.32
x
198
57
344
36
y
231
11
60
C0
x
y
z
w
v
size
0.34
0.34
0.34
0.34
0.34
edge
0.18
0.18
0.18
0.18
0.18
C1
x
y
z
w
v
size
0.59
0.59
0.59
0.59
0.59
edge
0.94
0.94
0.00
0.00
0.00
maps
22a × 80
`e` = 0.01 `z` = 1.00
C2
x
y
z
w
v
size
0.53
0.53
0.53
0.53
0.53
edge
1.00
0.00
1.00
0.00
0.00
maps
22b × 80
`e` = 0.00 `z` = 1.00
C3
x
y
z
w
v
size
0.48
0.48
0.48
0.48
0.48
edge
1.00
0.00
0.00
1.00
0.00
maps
22b × 80
`e` = 0.00 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
1.00
0.00
0.00
0.00
1.00
maps
22b × 80
`e` = 0.00 `z` = 1.00

In this frame, I've assigned maps to each of the 80 faces of cubes C1–C4. That's 300 maps. The map name reflects the digit and the levels of the map. For example, map 22a is a 2-level map of the `22/7` approximation and 22b is a 3-level version of it.

map = 10a 10/3 2
map = 10b 10/3 3
map = 10c 10/3 4
map = 22a 22/7 2
map = 22b 22/7 3
map = 22c 22/7 4
map = 179a 179/57 2
map = 179b 179/57 3
map = 179c 179/57 4
map = 245a 245/78 2
map = 245b 245/78 3
map = 245c 245/78 4
map = 355a 355/113 2
map = 355b 355/113 3
map = 355c 355/113 4
map = pia pi 2
map = pib pi 3
map = pic pi 4

The scene keeps zooming in — now the zoom is `z = 2`. Cube C0 keeps growing `s = 0.67` and its edges continue to fade to the corners `e = 0.1`. Cubes C1–C4 keep growing and the edges of the maps on their faces are also growing. For example, cube's C1 and C2 maps have `e=0.10`.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #3600 2:29:23 | 48/48 4.f( 47/ 47)4.g
4.f
n 2fs
a xv 0.10
a xw 0.90
a xz 0.16
c c2 f [xz] s4f
c c[0-2] s . p2
cube c[1-2] a [xy][yzwvu] astep-fast
map_fade(c2,.,p1)
rotthis3
size . s4u
4.g
n 2fs
a yv 0.15
a yw 0.03
c c3 f [xw] s4f
c c[0-3] s . p2
cube c[1-2] a [xy][yzwvu] astep-fast
map_fade(c3,.,p1)
rotthis3
size . s4u

view
x
y
z
w
v
zoom
2
2
2
2
2
x
46
57
54
36
y
111
11
104
C0
x
y
z
w
v
size
0.67
0.67
0.67
0.67
0.67
edge
0.10
0.10
0.10
0.10
0.10
C1
x
y
z
w
v
size
0.92
0.92
0.92
0.92
0.92
edge
0.10
0.10
0.00
0.00
0.00
x
6
5
5
5
y
5
5
6
maps
22a × 80
`e` = 0.10 `z` = 1.00
C2
x
y
z
w
v
size
0.72
0.72
0.72
0.72
0.72
edge
0.10
0.00
0.10
0.00
0.00
x
5
4
3
5
y
4
4
4
maps
22b × 80
`e` = 0.10 `z` = 1.00
C3
x
y
z
w
v
size
0.52
0.52
0.52
0.52
0.52
edge
0.70
0.00
0.00
0.70
0.00
maps
22b × 80
`e` = 0.04 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
1.00
0.00
0.00
0.00
1.00
maps
22b × 80
`e` = 0.00 `z` = 1.00

The scene continues to zoom (`z=2.59`) and the edges of all cubes have faded to corners (`e = 0.1`). The map edges are around 20% complete.

Because the scene zoomed in quite a bit now, you don't see all the corners of any given cube. Periodically, corners fly by and then quickly pass out of view.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #3885 2:41:20 | 45/48 4.l( 44/ 47)4.m
4.l
n 2fs
c c4 f [xv] s4f
cube c[1-4] a [xy][yzwvu] astep-fast
map_fade(c[1-4],.,p1)
rotthis3
size . s4u
4.m
n 2fs
cube c[1-4] a [xy][yzwvu] astep-fast
map_fade(c[1-4],.,p1)
rotthis3
size . s4u

view
x
y
z
w
v
zoom
2.59
2.59
2.59
2.59
2.59
x
272
57
119
36
y
6
11
138
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.10
0.10
0.10
0.10
0.10
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.10
0.10
0.00
0.00
0.00
x
15
14
13
15
y
14
14
14
maps
22a × 80
`e` = 0.22 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.10
0.00
0.10
0.00
0.00
x
14
12
12
15
y
13
13
12
maps
22b × 80
`e` = 0.22 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.10
0.00
0.00
0.10
0.00
x
9
7
8
9
y
8
8
9
maps
22b × 80
`e` = 0.19 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.10
0.00
0.00
0.00
0.10
x
4
4
4
4
y
4
4
4
maps
22b × 80
`e` = 0.16 `z` = 1.00

5.5 · More cubes appear

At this point, four more cubes are introduced into the scene: C5–C8. These cubes are different from the cubes we've already seen in that instead of shown as edges, they are shown as filled faces. Faces may be incompletely drawn (i.e. not the full face but only as square patches near their vertices.

The faces of cubes C5 and C6 are partially drawn (`e=0.16` and `e=0.09`, respectively). Faces for cubes C7 and C8 are not yet drawn (`e=0`).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #4000 2:46:15 | 16/48 5.b( 15/ 47)5.c
5.b
n 2fs
c c[1-4] a [xy][yzwvu] astep-vfast
c c[5-5] f . s5cf
map_fade(c[1-4],.,s5f)
rotthis3
5.c
n 2fs
c c[1-5] a [xy][yzwvu] astep-vfast
c c[5-6] f . s5cf
map_fade(c[1-4],.,s5f)
rotthis3
rep 5

view
x
y
z
w
v
zoom
2.60
2.60
2.60
2.60
2.60
x
219
57
147
36
y
324
11
149
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.10
0.10
0.10
0.10
0.10
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.10
0.10
0.00
0.00
0.00
x
21
20
20
20
y
20
20
21
maps
22a × 80
`e` = 0.20 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.10
0.00
0.10
0.00
0.00
x
21
17
18
21
y
19
19
19
maps
22b × 80
`e` = 0.20 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.10
0.00
0.00
0.10
0.00
x
15
13
15
15
y
14
14
15
maps
22b × 80
`e` = 0.17 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.10
0.00
0.00
0.00
0.10
x
10
10
11
10
y
10
10
9
maps
22b × 80
`e` = 0.14 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.09
0.09
0.09
0.09
0.09
x
15
15
14
16
y
15
15
15
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.01
0.01
0.01
0.01
0.01
x
14
12
12
15
y
13
13
12
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
9
8
8
9
y
8
8
10
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
4
4
4
5
y
4
5
4

By now, the faces for each cube C5–C8 are being drawn (`e>0`). From this angle, the corners of these cubes are at the periphery of the viewport. At the same time, the projected area maps on cubes C1–C4 start to fade away (maps' `e` is decreasing).

Notice that each of the cubes C1–C8 has its own rotation, in addition to the rotation of the camera.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #4700 3:15:19 | 44/48 5.d( 43/ 47)5.e
5.d
n 2fs
c c[1-6] a [xy][yzwvu] astep-vfast
c c[5-7] f . s5cf
map_fade(c[1-4],.,s5f)
rotthis3
rep 9
5.e
n 2fs
c c[1-7] a [xy][yzwvu] astep-vfast
c c[5-8] f . s5cf
map_fade(c[1-4],.,s5f)
rotthis3
rep 4

view
x
y
z
w
v
zoom
2.60
2.60
2.60
2.60
2.60
x
250
57
304
36
y
67
11
250
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.10
0.10
0.10
0.10
0.10
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.10
0.10
0.00
0.00
0.00
x
58
58
56
59
y
57
57
60
maps
22a × 80
`e` = 0.07 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.10
0.00
0.10
0.00
0.00
x
57
55
59
58
y
56
57
58
maps
22b × 80
`e` = 0.07 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.10
0.00
0.00
0.10
0.00
x
53
51
53
52
y
52
52
54
maps
22b × 80
`e` = 0.04 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.10
0.00
0.00
0.00
0.10
x
48
46
49
48
y
47
47
47
maps
22b × 80
`e` = 0.01 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.50
0.50
0.50
0.50
0.50
x
53
52
52
54
y
53
53
53
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.46
0.46
0.46
0.46
0.46
x
39
38
39
42
y
39
39
39
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.33
0.33
0.33
0.33
0.33
x
11
10
11
11
y
10
11
12
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.04
0.04
0.04
0.04
0.04
x
4
4
4
5
y
4
5
4

Cube faces continue to grow and as they do so, there's more of a chance that the viewport is filled with them. The area maps are almost entirely gone.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5000 3:28:07 | 8/48 5.f( 7/ 47)5.f
5.f
n 2fs
c c[1-8] a [xy][yzwvu] astep-vfast
c c[5-8] f . s5cs
rotthis3
rep 5

view
x
y
z
w
v
zoom
2.60
2.60
2.60
2.60
2.60
x
110
57
11
36
y
317
11
290
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.10
0.10
0.10
0.10
0.10
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.10
0.10
0.00
0.00
0.00
x
73
74
73
75
y
74
73
76
maps
22a × 80
`e` = 0.04 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.10
0.00
0.10
0.00
0.00
x
74
70
75
75
y
72
74
74
maps
22b × 80
`e` = 0.04 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.10
0.00
0.00
0.10
0.00
x
68
66
69
68
y
68
68
71
maps
22b × 80
`e` = 0.01 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.10
0.00
0.00
0.00
0.10
x
63
62
64
64
y
62
64
62
maps
22b × 80
`e` = 0.00 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.59
0.59
0.59
0.59
0.59
x
68
67
68
70
y
69
70
68
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.55
0.55
0.55
0.55
0.55
x
55
54
56
58
y
56
57
55
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.45
0.45
0.45
0.45
0.45
x
28
27
27
27
y
27
26
29
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.20
0.20
0.20
0.20
0.20
x
12
13
14
12
y
13
12
13

5.6 · It's full of colors

The Ascent video released as a black-and-white version, which is the source of the frames you've seen in this walkthrough.

There are two more versions of the video — one using the viridis (yellow, green, blue, purple) color scheme and the other using plasma (yellow, orange, red, pruple, violet).

The color encodes the z-distance (into the screen) to the element.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5000 3:28:07 | 5.f–5.f (viridis)
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5000 3:28:07 | 5.f–5.f (plasma)

5.7 · Reprieve

At around 4 minutes into the video, the entire scene appears to reset. This is achieved by slowly resetting the scene angle to a specific point of view — don't ask me how long it took to find it.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5680 3:56:15 | 6.a–6.b
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5695 3:57:06 | 6.a–6.b
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5710 3:57:21 | 6.a–6.b
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5725 3:58:12 | 6.b–6.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5740 3:59:03 | 6.b–6.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5755 3:59:18 | 6.b–6.c
s

The angles of all cubes are either zero or 180 and the scene is rotated so that what we see is a pretty minimal projection.

You'll notice that 5 new cubes Ca—Cd have been introduced. These have maps for 22/7 and 179/57, which are starting to grow. The elements for these maps are drawn as filled rectangles instead of just outlines.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #5755 3:59:18 | 43/48 6.b( 42/ 47)6.c
6.b
n 14fs
a xv refxv
a xw refxw
a xy refxy
a xz refxz
a yv refyv
a yw refyw
a yz refyz
c c[0-9a-d] a . 0
map_fade(c[a-d],.,ps6)
6.c
n 2fs
a xw d0.01
cube c[0-8] fade . ps15
cube_rot(.,[xy][yzwvu],astep-vvslow)
f . . map . fade ps15
rot6vvs
size . ps20

view
x
y
z
w
v
zoom
2.64
2.64
2.64
2.64
2.64
x
315
134
93
89
y
181
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.04
0.05
0.05
0.04
0.05
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.05
0.04
0.03
0.03
0.03
x
180
180
180
180
y
180
180
180
maps
22a × 80
`e` = 0.04 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.05
0.03
0.03
0.04
0.04
x
180
180
180
180
y
180
180
180
maps
22b × 80
`e` = 0.04 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.05
0.04
0.04
0.04
0.04
x
180
y
180
maps
22b × 80
`e` = 0.01 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.04
0.02
0.04
0.03
0.05
maps
22b × 80
`e` = 0.00 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.10
0.11
0.11
0.11
0.09
x
180
y
180
180
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.10
0.09
0.11
0.10
0.10
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.08
0.09
0.09
0.08
0.09
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.06
0.07
0.07
0.07
0.06
Ca
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
x
180
180
180
180
y
180
180
180
maps
22a,179a × 80
`e` = 0.01 `z` = 1.00
Cb
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
x
180
180
180
180
y
180
180
180
maps
179b,22b × 80
`e` = 0.01 `z` = 1.00
Cc
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
180
y
180
maps
179b,22b × 80
`e` = 0.01 `z` = 1.00
Cd
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
maps
22b,179c × 80
`e` = 0.01 `z` = 1.00

5.8 · Towards the climax

The scene starts to unravel and the rectangles of the area maps start to look like falling snow.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6050 4:12:01 | 6.i–6.j
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6100 4:14:03 | 6.j–6.k
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6150 4:16:05 | 6.k–6.l
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6200 4:18:07 | 6.l–6.m
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6250 4:20:09 | 6.m–6.n
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6300 4:22:11 | 6.n–6.o

This part of the video looks particularly warm and inviting when rendered in color.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6450 4:28:17 | 6.q–6.r (viridis)
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6450 4:28:17 | 6.q–6.r (plasma)

The last 4 cubes are introduced: Ce–Ch. These have area maps of the digits of `\pi`, which are also drawn as filled rectangles. Notice that when a cube's edge parameter is zero `e = 0` the cube itself isn't drawn but area map projections on its faces can appear if the maps' `e>0`.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6500 4:30:19 | 20/48 7.a( 19/ 47)7.a
7.a
n 2fs
cube c[0-2] fade . p5
cube_rot(.,[xy][yzwvu],astep-med)
face c[0-9a-e] . map . fade p5
rot6f
rep 2

view
x
y
z
w
v
zoom
2.80
2.80
2.80
2.80
2.80
x
295
134
284
89
y
346
162
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.09
0.11
0.10
0.09
0.12
x
29
27
28
27
y
28
29
29
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.09
0.08
0.10
0.09
0.11
x
209
207
207
207
y
208
208
209
maps
22a × 80
`e` = 0.06 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.09
0.10
0.09
0.11
0.11
x
207
207
208
206
y
207
208
206
maps
22b × 80
`e` = 0.06 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.07
0.07
0.05
0.09
0.09
x
27
28
208
26
y
28
29
210
maps
22b × 80
`e` = 0.03 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.08
0.06
0.10
0.08
0.08
x
26
26
26
25
y
29
28
28
maps
22b × 80
`e` = 0.02 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.08
0.08
0.05
0.09
0.09
x
27
28
28
208
y
206
207
27
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.09
0.07
0.07
0.09
0.10
x
27
27
27
27
y
28
28
27
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.08
0.05
0.08
0.10
0.08
x
27
27
29
28
y
28
28
27
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.06
0.05
0.06
0.05
0.05
x
28
29
28
27
y
28
28
29
Ca
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
x
206
207
209
207
y
207
208
209
maps
179a,22a × 80
`e` = 0.03 `z` = 1.00
Cb
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
x
208
208
207
208
y
208
208
208
maps
179b,22b × 80
`e` = 0.03 `z` = 1.00
Cc
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
28
27
207
29
y
28
28
208
maps
179b,22b × 80
`e` = 0.03 `z` = 1.00
Cd
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
29
26
28
28
y
27
26
30
maps
22b,179c × 80
`e` = 0.03 `z` = 1.00
Ce
x
y
z
w
v
size
1.10
1.10
1.10
1.10
1.10
x
64
71
79
62
y
36
48
75
z
52
20
w
18
maps
pia × 80
`e` = 0.02 `z` = 1.00
Cf
x
y
z
w
v
size
1.20
1.20
1.20
1.20
1.20
x
82
5
82
39
y
56
82
72
z
66
86
w
52
maps
pib × 80
`e` = 0.00 `z` = 1.00
Cg
x
y
z
w
v
size
1.35
1.35
1.35
1.35
1.35
x
14
82
41
51
y
27
18
17
z
63
82
w
70
maps
pib × 80
`e` = 0.00 `z` = 1.00
Ch
x
y
z
w
v
size
1.50
1.50
1.50
1.50
1.50
x
47
12
23
7
y
59
30
20
z
17
15
w
35
maps
pic × 80
`e` = 0.00 `z` = 1.00

5.9 · Climax

For the climax, everything that's been seen so far is turned back on: edges grow, cube faces are filled and all map edges and filled rectangles grow. All the elements are rendered with difference blend (i.e. black on black gives white, white on white gives black) and the scene turns to noise.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6500 4:30:19 | 7.a–7.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6550 4:32:21 | 7.a–7.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6600 4:34:23 | 7.a–7.b
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6650 4:37:01 | 7.b–7.b
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6700 4:39:03 | 7.b–7.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #6750 4:41:05 | 7.c–7.c

The noise builds and you get brief glimpses of thousands of edges and faces stacking into vague patterns. If you look at the cube parameters for this frame 7440, you'll notice that everything is “on”: Cubes C0–C8 have a non-zero size and non-zero edge and the remaining cubes have map edges in the interval `e = [0.18,0.41]`.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7440 5:09:23 | 48/48 7.j( 47/ 47)7.j
7.j
n 2fs
cube_rot(.,[xy][yzwvu],astep-med)
rot6vf
rep 2

view
x
y
z
w
v
zoom
2.79
2.79
2.79
2.79
2.79
x
295
134
289
89
y
204
11
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.45
0.46
0.45
0.44
0.46
x
44
42
43
42
y
43
44
44
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.44
0.44
0.45
0.45
0.45
x
224
222
221
224
y
223
223
223
maps
22a × 80
`e` = 0.43 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.45
0.45
0.44
0.45
0.46
x
223
223
222
221
y
223
223
222
maps
22b × 80
`e` = 0.43 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.38
0.38
0.37
0.40
0.39
x
42
44
224
41
y
42
46
225
maps
22b × 80
`e` = 0.41 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.39
0.37
0.40
0.39
0.39
x
41
41
41
40
y
44
42
43
maps
22b × 80
`e` = 0.40 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.33
0.32
0.30
0.33
0.33
x
42
43
42
222
y
223
223
42
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.33
0.32
0.32
0.33
0.34
x
41
42
43
43
y
42
44
43
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
edge
0.25
0.23
0.25
0.27
0.25
x
44
42
46
43
y
43
43
42
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
edge
0.23
0.23
0.23
0.23
0.23
x
43
43
42
43
y
44
43
44
Ca
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
x
222
222
224
222
y
222
222
223
maps
22a,179a × 80
`e` = 0.41 `z` = 1.00
Cb
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
x
222
224
224
223
y
223
223
223
maps
22b,179b × 80
`e` = 0.41 `z` = 1.00
Cc
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
44
41
223
44
y
41
44
224
maps
22b,179b × 80
`e` = 0.41 `z` = 1.00
Cd
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
43
42
42
41
y
42
41
46
maps
179c,22b × 80
`e` = 0.41 `z` = 1.00
Ce
x
y
z
w
v
size
1.10
1.10
1.10
1.10
1.10
x
80
87
94
77
y
51
63
89
z
52
20
w
18
maps
pia × 80
`e` = 0.40 `z` = 1.00
Cf
x
y
z
w
v
size
1.20
1.20
1.20
1.20
1.20
x
97
21
96
53
y
71
97
87
z
66
86
w
52
maps
pib × 80
`e` = 0.34 `z` = 1.00
Cg
x
y
z
w
v
size
1.35
1.35
1.35
1.35
1.35
x
29
98
55
66
y
43
34
32
z
63
82
w
70
maps
pib × 80
`e` = 0.27 `z` = 1.00
Ch
x
y
z
w
v
size
1.50
1.50
1.50
1.50
1.50
x
62
27
37
22
y
73
45
36
z
17
15
w
35
maps
pic × 80
`e` = 0.18 `z` = 1.00

5.10 · Back to zero

By about 5:20, it's time to wrap the show up. This is done by slowly zooming the camera out and shrinking the edges of all cubes and maps.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7800 5:24:23 | 8.c–8.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7850 5:27:01 | 8.c–8.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7900 5:29:03 | 8.c–8.c
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7950 5:31:05 | 8.c–9.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #8000 5:33:07 | 9.a–9.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #8050 5:35:09 | 9.a–9.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #8100 5:37:11 | 9.a–9.a
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #8150 5:39:13 | 9.a–9.a

In the color versions of the video, the zoomout gives you a chance to see more details.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7950 5:31:05 | 30/48 8.c( 29/ 47)9.a (viridis)
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
▲ MAX COOPER'S ASCENT #7950 5:31:05 | 30/48 8.c( 29/ 47)9.a (plasma)

In this frame, one of the last where anything is visible, the zoom is `z=0.25` and cube edges are `e<0.03` and the maps have disappeared (`e=0`). Thus, what you're seeing is just the `3 \times 32 = 96` tiny vertices of cubes C0, C1 and C2.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
&#9650; MAX COOPER'S ASCENT #8150 5:39:13 | 38/48 9.a( 37/ 47)9.a
9.a
n 2fs
cube . f . q50
cube_rot(.,[xy][ywvu],astep-med)
map_fade(.,.,q50)
rot6s
size . q30
rep 6

view
x
y
z
w
v
zoom
0.25
0.25
0.25
0.25
0.25
x
295
134
9
89
y
250
60
C0
x
y
z
w
v
size
0.78
0.78
0.78
0.78
0.78
edge
0.02
0.03
0.03
0.02
0.03
x
58
50
55
55
y
51
59
58
C1
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
edge
0.02
0.01
0.02
0.02
0.03
x
236
230
235
237
y
231
236
236
maps
22a × 80
`e` = 0.00 `z` = 1.00
C2
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
edge
0.02
0.02
0.02
0.03
0.03
x
235
230
236
234
y
231
237
235
maps
22b × 80
`e` = 0.00 `z` = 1.00
C3
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
55
53
237
54
y
51
58
239
maps
22b × 80
`e` = 0.00 `z` = 1.00
C4
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
53
50
54
53
y
51
55
56
maps
22b × 80
`e` = 0.00 `z` = 1.00
C5
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
x
56
51
55
234
y
230
236
55
C6
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
x
54
50
56
56
y
50
56
55
C7
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
56
50
58
55
y
50
57
56
C8
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
56
51
57
57
y
51
56
58
Ca
x
y
z
w
v
size
1.03
1.03
1.03
1.03
1.03
x
236
230
237
234
y
229
235
236
maps
22a,179a × 80
`e` = 0.00 `z` = 1.00
Cb
x
y
z
w
v
size
0.83
0.83
0.83
0.83
0.83
x
235
233
238
236
y
231
235
236
maps
179b,22b × 80
`e` = 0.00 `z` = 1.00
Cc
x
y
z
w
v
size
0.63
0.63
0.63
0.63
0.63
x
56
50
235
57
y
49
57
236
maps
22b,179b × 80
`e` = 0.00 `z` = 1.00
Cd
x
y
z
w
v
size
0.43
0.43
0.43
0.43
0.43
x
56
50
54
53
y
50
53
58
maps
22b,179c × 80
`e` = 0.00 `z` = 1.00
Ce
x
y
z
w
v
size
0.66
0.66
0.66
0.66
0.66
x
91
95
106
90
y
59
75
103
z
52
20
w
18
maps
pia × 80
`e` = 0.00 `z` = 1.00
Cf
x
y
z
w
v
size
0.72
0.72
0.72
0.72
0.72
x
110
28
109
66
y
78
110
100
z
66
86
w
52
maps
pib × 80
`e` = 0.00 `z` = 1.00
Cg
x
y
z
w
v
size
0.81
0.81
0.81
0.81
0.81
x
42
106
69
79
y
51
47
45
z
63
82
w
70
maps
pib × 80
`e` = 0.00 `z` = 1.00
Ch
x
y
z
w
v
size
0.90
0.90
0.90
0.90
0.90
x
74
35
50
35
y
81
59
49
z
17
15
w
35
maps
pic × 80
`e` = 0.00 `z` = 1.00

A second later, everything is gone.

news + thoughts

Nasa to send our human genome discs to the Moon

Sat 23-03-2024

We'd like to say a ‘cosmic hello’: mathematics, culture, palaeontology, art and science, and ... human genomes.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
SANCTUARY PROJECT | A cosmic hello of art, science, and genomes. (details)
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
SANCTUARY PROJECT | Benoit Faiveley, founder of the Sanctuary project gives the Sanctuary disc a visual check at CEA LeQ Grenoble (image: Vincent Thomas). (details)
Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
SANCTUARY PROJECT | Sanctuary team examines the Life disc at INRIA Paris Saclay (image: Benedict Redgrove) (details)

Comparing classifier performance with baselines

Sat 23-03-2024

All animals are equal, but some animals are more equal than others. —George Orwell

This month, we will illustrate the importance of establishing a baseline performance level.

Baselines are typically generated independently for each dataset using very simple models. Their role is to set the minimum level of acceptable performance and help with comparing relative improvements in performance of other models.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Nature Methods Points of Significance column: Comparing classifier performance with baselines. (read)

Unfortunately, baselines are often overlooked and, in the presence of a class imbalance5, must be established with care.

Megahed, F.M, Chen, Y-J., Jones-Farmer, A., Rigdon, S.E., Krzywinski, M. & Altman, N. (2024) Points of significance: Comparing classifier performance with baselines. Nat. Methods 20.

Happy 2024 π Day—
sunflowers ho!

Sat 09-03-2024

Celebrate π Day (March 14th) and dig into the digit garden. Let's grow something.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
2024 π DAY | A garden of 1,000 digits of π. (details)

How Analyzing Cosmic Nothing Might Explain Everything

Thu 18-01-2024

Huge empty areas of the universe called voids could help solve the greatest mysteries in the cosmos.

My graphic accompanying How Analyzing Cosmic Nothing Might Explain Everything in the January 2024 issue of Scientific American depicts the entire Universe in a two-page spread — full of nothing.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
How Analyzing Cosmic Nothing Might Explain Everything. Text by Michael Lemonick (editor), art direction by Jen Christiansen (Senior Graphics Editor), source: SDSS

The graphic uses the latest data from SDSS 12 and is an update to my Superclusters and Voids poster.

Michael Lemonick (editor) explains on the graphic:

“Regions of relatively empty space called cosmic voids are everywhere in the universe, and scientists believe studying their size, shape and spread across the cosmos could help them understand dark matter, dark energy and other big mysteries.

To use voids in this way, astronomers must map these regions in detail—a project that is just beginning.

Shown here are voids discovered by the Sloan Digital Sky Survey (SDSS), along with a selection of 16 previously named voids. Scientists expect voids to be evenly distributed throughout space—the lack of voids in some regions on the globe simply reflects SDSS’s sky coverage.”

voids

Sofia Contarini, Alice Pisani, Nico Hamaus, Federico Marulli Lauro Moscardini & Marco Baldi (2023) Cosmological Constraints from the BOSS DR12 Void Size Function Astrophysical Journal 953:46.

Nico Hamaus, Alice Pisani, Jin-Ah Choi, Guilhem Lavaux, Benjamin D. Wandelt & Jochen Weller (2020) Journal of Cosmology and Astroparticle Physics 2020:023.

Sloan Digital Sky Survey Data Release 12

constellation figures

Alan MacRobert (Sky & Telescope), Paulina Rowicka/Martin Krzywinski (revisions & Microscopium)

stars

Hoffleit & Warren Jr. (1991) The Bright Star Catalog, 5th Revised Edition (Preliminary Version).

cosmology

H0 = 67.4 km/(Mpc·s), Ωm = 0.315, Ωv = 0.685. Planck collaboration Planck 2018 results. VI. Cosmological parameters (2018).

Error in predictor variables

Tue 02-01-2024

It is the mark of an educated mind to rest satisfied with the degree of precision that the nature of the subject admits and not to seek exactness where only an approximation is possible. —Aristotle

In regression, the predictors are (typically) assumed to have known values that are measured without error.

Practically, however, predictors are often measured with error. This has a profound (but predictable) effect on the estimates of relationships among variables – the so-called “error in variables” problem.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Nature Methods Points of Significance column: Error in predictor variables. (read)

Error in measuring the predictors is often ignored. In this column, we discuss when ignoring this error is harmless and when it can lead to large bias that can leads us to miss important effects.

Altman, N. & Krzywinski, M. (2024) Points of significance: Error in predictor variables. Nat. Methods 20.

Background reading

Altman, N. & Krzywinski, M. (2015) Points of significance: Simple linear regression. Nat. Methods 12:999–1000.

Lever, J., Krzywinski, M. & Altman, N. (2016) Points of significance: Logistic regression. Nat. Methods 13:541–542 (2016).

Das, K., Krzywinski, M. & Altman, N. (2019) Points of significance: Quantile regression. Nat. Methods 16:451–452.

Convolutional neural networks

Tue 02-01-2024

Nature uses only the longest threads to weave her patterns, so that each small piece of her fabric reveals the organization of the entire tapestry. – Richard Feynman

Following up on our Neural network primer column, this month we explore a different kind of network architecture: a convolutional network.

The convolutional network replaces the hidden layer of a fully connected network (FCN) with one or more filters (a kind of neuron that looks at the input within a narrow window).

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Nature Methods Points of Significance column: Convolutional neural networks. (read)

Even through convolutional networks have far fewer neurons that an FCN, they can perform substantially better for certain kinds of problems, such as sequence motif detection.

Derry, A., Krzywinski, M & Altman, N. (2023) Points of significance: Convolutional neural networks. Nature Methods 20:1269–1270.

Background reading

Derry, A., Krzywinski, M. & Altman, N. (2023) Points of significance: Neural network primer. Nature Methods 20:165–167.

Lever, J., Krzywinski, M. & Altman, N. (2016) Points of significance: Logistic regression. Nature Methods 13:541–542.

Martin Krzywinski | contact | Canada's Michael Smith Genome Sciences CentreBC Cancer Research CenterBC CancerPHSA
Google whack “vicissitudinal corporealization”
{ 10.9.234.151 }