2025 π Day latest news buy art
Here we are now at the middle of the fourth large part of this talk.Pepe Deluxeget nowheremore 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
22a,179a × 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
22b,179b × 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
22b,179b × 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
179b,22b × 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
179a,22a × 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
22b,179b × 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
179c,22b × 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

Beyond Belief Campaign BRCA Art

Wed 11-06-2025

Fuelled by philanthropy, findings into the workings of BRCA1 and BRCA2 genes have led to groundbreaking research and lifesaving innovations to care for families facing cancer.

This set of 100 one-of-a-kind prints explore the structure of these genes. Each artwork is unique — if you put them all together, you get the full sequence of the BRCA1 and BRCA2 proteins.

Propensity score weighting

Mon 17-03-2025

The needs of the many outweigh the needs of the few. —Mr. Spock (Star Trek II)

This month, we explore a related and powerful technique to address bias: propensity score weighting (PSW), which applies weights to each subject instead of matching (or discarding) them.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Nature Methods Points of Significance column: Propensity score weighting. (read)

Kurz, C.F., Krzywinski, M. & Altman, N. (2025) Points of significance: Propensity score weighting. Nat. Methods 22:1–3.

Happy 2025 π Day—
TTCAGT: a sequence of digits

Thu 13-03-2025

Celebrate π Day (March 14th) and sequence digits like its 1999. Let's call some peaks.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
2025 π DAY | TTCAGT: a sequence of digits. The digits of π are encoded into DNA sequence and visualized with Sanger sequencing. (details)

Crafting 10 Years of Statistics Explanations: Points of Significance

Sun 09-03-2025

I don’t have good luck in the match points. —Rafael Nadal, Spanish tennis player

Points of Significance is an ongoing series of short articles about statistics in Nature Methods that started in 2013. Its aim is to provide clear explanations of essential concepts in statistics for a nonspecialist audience. The articles favor heuristic explanations and make extensive use of simulated examples and graphical explanations, while maintaining mathematical rigor.

Topics range from basic, but often misunderstood, such as uncertainty and P-values, to relatively advanced, but often neglected, such as the error-in-variables problem and the curse of dimensionality. More recent articles have focused on timely topics such as modeling of epidemics, machine learning, and neural networks.

In this article, we discuss the evolution of topics and details behind some of the story arcs, our approach to crafting statistical explanations and narratives, and our use of figures and numerical simulations as props for building understanding.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Crafting 10 Years of Statistics Explanations: Points of Significance. (read)

Altman, N. & Krzywinski, M. (2025) Crafting 10 Years of Statistics Explanations: Points of Significance. Annual Review of Statistics and Its Application 12:69–87.

Propensity score matching

Mon 16-09-2024

I don’t have good luck in the match points. —Rafael Nadal, Spanish tennis player

In many experimental designs, we need to keep in mind the possibility of confounding variables, which may give rise to bias in the estimate of the treatment effect.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Nature Methods Points of Significance column: Propensity score matching. (read)

If the control and experimental groups aren't matched (or, roughly, similar enough), this bias can arise.

Sometimes this can be dealt with by randomizing, which on average can balance this effect out. When randomization is not possible, propensity score matching is an excellent strategy to match control and experimental groups.

Kurz, C.F., Krzywinski, M. & Altman, N. (2024) Points of significance: Propensity score matching. Nat. Methods 21:1770–1772.

Understanding p-values and significance

Tue 24-09-2024

P-values combined with estimates of effect size are used to assess the importance of experimental results. However, their interpretation can be invalidated by selection bias when testing multiple hypotheses, fitting multiple models or even informally selecting results that seem interesting after observing the data.

We offer an introduction to principled uses of p-values (targeted at the non-specialist) and identify questionable practices to be avoided.

Martin Krzywinski @MKrzywinski mkweb.bcgsc.ca
Understanding p-values and significance. (read)

Altman, N. & Krzywinski, M. (2024) Understanding p-values and significance. Laboratory Animals 58:443–446.

Martin Krzywinski | contact | Canada's Michael Smith Genome Sciences CentrePHSA
Google whack “vicissitudinal corporealization”
{ 10.9.234.152 }