Splashery.ContentsPlayground

Appendix C

How it bends

When you press, the page is redrawn along the real paths of light past a black hole.

C.1The deflection

Light passing a black hole of mass M at impact parameter b turns by the angle in Eq. (1), where u₀ is one over its closest approach. This is the exact answer in Schwarzschild's geometry, with no small-angle shortcut, in units where G = c = 1.

(1)

The page works it out when it loads, for 1,024 impact parameters, from the integral itself. Then each pixel looks its ray up in that table. Closer than Eq. (2), light can't get past at all, and that edge is the shadow.

(2)

The table was checked against Darwin's closed form in elliptic integrals, an answer the page doesn't use. The worst disagreement is 1 part in 10 million. It also gives the 1.75 arcseconds that starlight bends grazing the Sun, the number Eddington's eclipse expedition went to measure in 1919.

Table I. The page's deflection against Darwin's, in radians.

RayThis pageDarwin
Closest approach 3.0001 M19.8122998019.81229907
3.01 M10.6107883610.61078828
4 M2.184100192.18410019
10 M0.500235660.50023566
1,000 M0.004007800.00400780

C.2The lens

The page is a plane. Your eye is a distance Ds from it, and the hole floats between, Dls in front of the page. A ray that leaves your eye at angle θ from the hole and turns by α lands on the page at angle β:

(3)

Here the eye is 1,000 pixels from the page and the hole 240 pixels in front of it, both scaled to your screen. A ray that turns more than a right angle never reaches the page, and stays dark.

C.3What you see

Whatever sits right behind the hole spreads into a ring, the Einstein ring, with everything near it stretched along the ring. Inside the ring the whole page appears a second time, smaller and upside down: that light went around the other side. The thin bright line at the edge of the shadow is light that went almost all the way around.

C.4The fall

Hold still, and the page falls in. Each point falls from rest as in Eq. (4), which is exact for a fall from far away, in Newton's gravity and in Schwarzschild's proper time alike.

(4)

Nothing else is needed for the stretching. Near the hole the near side falls faster than the far side, so whatever falls is pulled long toward the hole, by the square root of r₀/r, and squeezed narrow across, by r/r₀. Words become noodles because of Eq. (4).

C.5Two thumbs

With two thumbs down there are two holes, and their bending adds. That is exact when they are far apart, and only close when they are near. Bring them together and they merge into one, larger hole, and the page rings. On the title page, the small hole that wanders off from the full stop is caught by your thumb the way a small black hole is caught by a big one: the gap closes as in Eq. (5).

(5)

C.6How heavy your thumb is

The readout at the top gives the mass of the hole you are holding. A black hole with the mass of the Earth has a horizon 17.7 mm across, about the width of a thumb.

(6)

The readout takes one pixel to be 0.168 mm, as on a typical phone, so on your screen it's an estimate. Mass only adds up in a black hole, so this one keeps a little of every page it eats, and it's still heavier the next time you visit.

C.7What isn't true

  • ·There is no other side. Nothing comes out of a real black hole. The next page does, because a website needs one.
  • ·The colors are drawn, not computed. Real light falling in is shifted and brightened, and here it isn't. The glow at the rim and the heat of falling ink are for the eye.
  • ·The swirl is added. The fall in Eq. (4) goes straight in.
  • ·The merged hole and its ringing are drawn to look right, not solved.

C.8The code

The heart of it, in the shader that draws every pixel:

// Returns the radius on the page, whether the ray survives, and w = b꜀ / b.
vec3 bend(float r, float M) {
  float t = r / Ds;                 // the screen is the page plane
  float th = atan(t);
  float b = Dl * sin(th);           // impact parameter
  float w = 3. * sqrt(3.) * M / b;
  if (w >= 1.) return vec3(0., 0., w);          // into the hole
  float g = deflect(w) - th;                    // α − θ, from the table
  if (g >= 1.56) return vec3(0., 0., w);        // turned away from the page
  return vec3(Ds * (t - k * (t + tan(g))), 1., w);
}

The Playground's own Splashes are drawn with 3D Gaussian splats. This page only bends what's already on it.