I photographed the Earth's shadow from a plane window

· Daniel Herman ·

9 min read Original article ↗

It’s Saturday morning and I am on an early flight from Kutaisi to Prague, window seat on the left. About fifteen minutes after takeoff, the sky on the right of my view looked like this:

The sky out of the left window at 03:04 UTC, over the Black Sea

The same view on video, 03:06 UTC.

The blue-grey wedge on the right is the Earth's shadow, cast on its own atmosphere. The sun had just risen for the plane, but the ground below was still dark. From 26,000 ft (about 8 km) you can see the edge of that shadow on the sky.

I took 34 photos over the next hour and a half. Back home I wondered if a simple model of a round Earth can predict where the band is in each photo. Let’s see.

What are we looking at?

Sunlight from the edges of the Sun grazes the Earth and leaves a shadow behind it, the umbra. You sit just on the sunlit side; your line of sight runs into air that is still in that shadow. Not to scale.

At dawn, you sit just on the sunlit side of the day–night line and look into air that is still in the Earth’s shadow. The model calls a direction dark when its point nearest the Earth’s centre lies in that shadow.

Side view at 03:11 UTC, heights exaggerated. The direction whose point nearest the Earth's centre lies exactly on the shadow's edge marks the edge of the dark band: there it just touches a curve of constant height above the ground. The line that touches the ground is the horizon. The shaded wedge splits what you see into three regions.

  • A, between the edge line and the horizon: the point nearest the Earth’s centre is inside the shadow, so the sky is dark. This is the band the model draws.
  • B, between eye level and the edge line: the line of sight still reaches the shadow further out, but its point nearest the Earth’s centre is in sunlight, so the sky darkens only gradually towards A.
  • C, a thin sliver above eye level, up to where the sky is fully sunlit: the shadow starts about 270 km away and 16 km up, where the thin air is outshone by the sunlit air in front, so C is barely darker. At 03:04 C was dark, and that is where the model breaks.

The physics

The sun is far enough away that its rays are parallel. Call the unit vector towards it s^\hat{s}. With a spherical Earth of radius RR, the shadow is the half-cylinder of radius RR behind the planet along −s^-\hat{s}. A point P\mathbf{P}, measured from the Earth’s centre, is in shadow when it is behind the Earth and closer than RR to the axis through the centre along s^\hat{s}:

P⋅s^<0and∣P−(P⋅s^) s^∣<R.\mathbf{P}\cdot\hat{s} < 0 \quad \text{and} \quad \left|\mathbf{P} - (\mathbf{P}\cdot\hat{s})\,\hat{s}\right| < R . Where the shadow condition comes from. Split P into its part along the Sun direction, (P·ŝ)ŝ, and the rest, P − (P·ŝ)ŝ, which is its distance from the axis. Behind the Earth, a point is in shadow when that distance is less than R; on the shadow surface it equals R.

The plane sits at O\mathbf{O}, at height hh above the ground, so ∣O∣=R+h|\mathbf{O}| = R + h. A line of sight with unit direction d^\hat{d} is the line O+s d^\mathbf{O} + s\,\hat{d}; you look along s>0s > 0.

Its point nearest the Earth’s centre, P∗\mathbf{P}^{*}, is the foot of the perpendicular from the centre, where the line is at a right angle to the radius:

s∗=−O⋅d^,P∗=O+s∗d^,z∗=∣P∗∣−R.s^{*} = -\mathbf{O}\cdot\hat{d}, \qquad \mathbf{P}^{*} = \mathbf{O} + s^{*}\hat{d}, \qquad z^{*} = |\mathbf{P}^{*}| - R . The point of a line of sight nearest the Earth&#x27;s centre. The perpendicular from the centre meets the line at P*, a distance s* = −O·d̂ along it and a height z* above the ground.

Looking down, s∗>0s^{*} > 0. If then z∗<0z^{*} < 0, the line hits the ground first: you see the ground, not sky, and the model does not apply; z∗=0z^{*} = 0 is the horizon. Directions at or above eye level are outside the model.

We estimate whether a direction d^\hat{d} looks dark from P∗\mathbf{P}^{*} alone:

d^ looks dark  ⟺  P∗ is in shadow.\hat{d}\ \text{looks dark} \iff \mathbf{P}^{*}\ \text{is in shadow}.

Why only P∗\mathbf{P}^{*}: the sky in a direction is sunlight scattered by the air along it (Rayleigh), in proportion to the air density ∝e−z/H\propto e^{-z/H} with scale height H≈8H \approx 8 km, so the stretch of the line nearest the ground dominates.

In each column of the photo, the edge of the band is the one direction d^e\hat{d}_{e}, between the horizon and eye level, whose point nearest the Earth’s centre lies exactly on the surface of the Earth’s shadow, ∣P∗−(P∗⋅s^) s^∣=R\left|\mathbf{P}^{*} - (\mathbf{P}^{*}\cdot\hat{s})\,\hat{s}\right| = R. The model predicts α\alpha, the angle between d^e\hat{d}_{e} and the horizon. It shrinks as the sun rises.

The model in one picture. The plane at O looks along d̂. P* is the point of this direction nearest the Earth&#x27;s centre, at distance s* along it and height z* above the ground. It lies exactly on the shadow surface, so this direction is the edge of the dark band, α above the horizon. A lower direction has its point nearest the Earth&#x27;s centre inside the shadow and looks dark. The same plane at two moments. As the sun rises, ŝ turns upwards and the shadow surface sinks. The edge line drops towards the horizon, its P* moves further out and lower, and α shrinks. The right angle at P* holds at both moments.

What it ignores: refraction, the sun’s 0.5° disk (penumbra), extinction of the grazing sunlight, and multiple scattering. Together they move the effective shadow surface by about a kilometre, which comes back in the radius section.

The inputs are the sun’s position, from standard solar formulas, and the plane’s position, altitude and heading, from the Flightradar24 track. I was shooting out of the left window, so the camera pointed 90° to the left of the heading; each direction d^\hat{d} is projected into the photo through a pinhole camera.

The flight path over the Black Sea and the three photos shown further down, at 03:04, 03:20 and 03:36 UTC. Grey: what the camera saw out of the left window. The sun was low in the east, behind the plane.

Making the band measurable

The band is easy to see but hard to measure: its edge is blurred by about a degree. Colour is easier to work with: sunlit air at dawn is lit by reddened sunlight, while shadowed air gets only bluish light from the rest of the sky. I measure colour as log⁡(red/blue)\log(\text{red}/\text{blue}), which ignores exposure and brightness. Let xx be the position across the photo and yy the height above the horizon. Going up any column, log⁡(red/blue)\log(\text{red}/\text{blue}) rises from the blue shadow into the warm sky, and the edge is where it changes fastest:

yedge(x)=arg⁡max⁡y ∂∂ylog⁡red(x,y)blue(x,y).y_{\text{edge}}(x) = \arg\max_{y}\ \frac{\partial}{\partial y} \log\frac{\text{red}(x, y)}{\text{blue}(x, y)}.

So the edge is a function: for every xx it gives one yy, and that height is α\alpha. For a soft, even fade it is also the point halfway between the two colours:

One column of the photo at 03:11 UTC, and log(red/blue) along it. The edge is the steepest point of the drop from the warmest sky to the bluest shadow; its height above the horizon is α.

Doing that for every column traces the edge across the photo:

Top: the photo at 03:11 UTC as taken. Bottom: the same strip, showing how much bluer each point is than the sky at the left. Blue line: the model, nothing tuned. Orange dots: the measured edge.

Does it work?

At 03:11 UTC, where the edge of the band is sharp enough to trace directly, the model and the photo agree. At the right edge of the frame the model puts it at α=2.3°\alpha = 2.3°; the two photos show 2.4° and 2.1°.

The measured edge against the model in two photos taken 10 seconds apart.

Later in the morning the band gets faint, but its shape keeps matching: flat on the left, then a ramp to the right that starts roughly where the model says (median R² of 0.97 over 14 photos). As the sun climbs, the band sinks towards the horizon and moves out of the frame.

03:04, 03:20 and 03:36 UTC. Left: the photo, with the warmest sky (orange), the bluest shadow (blue) and the edge halfway between them (white), traced across the photo. Right: the shadow map, from the bluest shadow (black) to sunlit sky (white). The dashed line is the horizon.

Where it breaks

The first few minutes don’t fit. At 03:04, at the right edge of the frame, the model puts the edge at α=3.1°\alpha = 3.1°; the photo shows 4.8°.

The model only judges directions below eye level, so its band can never be taller than the 3° strip between the horizon and eye level. Above eye level the shadow is still there, further ahead. A line of sight at eye level stays straight while the Earth curves away beneath it, so it gets higher above the ground the further it goes: by about x2/2Rx^2/2R after a distance xx.

  • 03:04: it reaches the shadow after only 30 km and just 70 m higher, still at the plane’s 8 km, in air just as dense, so the sky above eye level is dark too.
  • 03:11: it reaches the shadow 270 km out, 5.7 km above the plane’s 10 km, where the air is half as dense, so that part of the sky stays bright.

03:04 UTC: the same picture as above, earlier, when the shadow surface passes just below the plane. The model&#x27;s edge, whose P* lies on the shadow surface, is now just below eye level, so α covers almost the whole strip down to the horizon. Above eye level the shadow continues, but the model never looks there: region C.

A crude Eratosthenes

If the model knows the size of the Earth, the photos can be turned around to measure it. I make RR the one free parameter and fit it to the measured edge in the two sharp photos, 813 points xix_i across the frame:

R^=arg⁡min⁡R ∑i[αphoto(xi)−αmodel(xi; R)]2s.t.αphoto(x)=arctan⁡yedge(x)f,f=W/2tan⁡(FOV/2)≈2800 px,αmodel(x; R)=∠(d^e, d^h),∣Pe∗−(Pe∗⋅s^) s^∣=R,zh∗=0.\begin{aligned} \hat{R} = \arg\min_{R}\ & \sum_{i} \left[\alpha_{\text{photo}}(x_i) - \alpha_{\text{model}}(x_i;\, R)\right]^{2} \\ \text{s.t.}\quad & \alpha_{\text{photo}}(x) = \arctan\frac{y_{\text{edge}}(x)}{f}, \qquad f = \frac{W/2}{\tan(\mathrm{FOV}/2)} \approx 2800\ \text{px}, \\ & \alpha_{\text{model}}(x;\, R) = \angle\left(\hat{d}_{e},\, \hat{d}_{h}\right), \qquad \left|\mathbf{P}^{*}_{e} - (\mathbf{P}^{*}_{e}\cdot\hat{s})\,\hat{s}\right| = R, \qquad z^{*}_{h} = 0 . \end{aligned}

where

  • xix_i: a column of the photo where the edge was measured;
  • yedge(x)y_{\text{edge}}(x): the measured edge in that column, from the colour gradient, in pixels above the horizon;
  • ff: the camera’s focal length in pixels, from the photo width W=4096W = 4096 px and the field of view FOV=72.4°\mathrm{FOV} = 72.4°;
  • d^e\hat{d}_{e}: the edge direction in column xx, the direction whose point nearest the Earth’s centre, Pe∗\mathbf{P}^{*}_{e}, lies exactly on the shadow surface;
  • d^h\hat{d}_{h}: the horizon direction in column xx, the direction whose point nearest the Earth’s centre lies on the ground, zh∗=0z^{*}_{h} = 0;
  • both directions are computed for a planet of radius RR, with the plane’s position from the flight track and s^\hat{s} from the sun’s position at the photo’s time.

How well the model matches the measured edge for each Earth radius. The optimum is the radius with the smallest squared error, the highest R².

The optimum is R^=4,000\hat{R} = 4{,}000 km, with the model off by 0.09° on average. This assumes the camera pointed exactly 90° to the left of the plane. A few degrees of error, easy with a phone held to a window, lets anything from about 3,000 to 6,500 km fit almost as well. Grazing sunlight bending into the shadow can also put the effective shadow surface up to a kilometre below sea level, which moves the answer to 4,000–7,500 km. The true value is 6,371 km.

The rest of the view

The shadow was gone after half an hour, but I kept taking photos.

04:22 UTC, north of Varna. Wind turbines on the Dobruja plateau between Shabla and Kavarna, next to cumulus clouds lit pink from the side.

I thought this was just before sunrise, but the sun had come up there at about 04:05 UTC, a quarter of an hour earlier. It was only 2° above the horizon, so the flat fields got very little light, while the white turbine towers and the sides of the clouds faced it directly.

04:49 UTC, over the Southern Carpathians in Romania, looking south-west. The pale pink ridges are alpine meadows above the forest, lit by the low morning sun. The same ridges 47 seconds later, closer to the plane.

These are the Căpățânii Mountains, with their highest summit, Ursu (2,124 m), and the white limestone cliffs of Buila-Vânturarița around Vânturarița Mare (1,885 m). Behind them are the Parâng Mountains, up to Parângul Mare (2,519 m), and fog still lies in the valleys of the Lotru and the Olt. I found the names by rendering a terrain model from the plane’s position and matching the ridges.

If you get a window seat on an early flight, look out of the side facing away from the sunrise. The dark band above the horizon is the Earth’s shadow.

It was the most enjoyable flight I have had. Here are the clouds just before we landed in Prague. Enjoy :)

The cloud deck over Prague, minutes before landing, 06:02 UTC.