Total Eclipse with full 3D umbra shadow cone

I was contemplating this years ago, but I never got around to it till now.

Using nothing but this illustration

and basic math (point to point line, slope-intercept line, algebra, and trig) I figured how to calculate the 3D umbra cone. The only data I used is the Simon1994PlanetaryPositions built into Cesium itself, and Sun/Moon radius.

Pleasantly surprised to find that the cone to globe intercepts matched that found here

The 3D umbra cone is educational. It does not reach that far, and a combination of factors have to line up:
-The closer the Earth is to the Moon the better (deeper into the cone the Earth is.)
-The further the Moon is from the Sun the better (the more elongated the cone becomes.)

Going to test a couple more total eclipse dates, then finish up making a penumbra cone.

Just added 2021 Dec 04 total eclipse

It also matches up with - Interactive Solar Eclipses with CesiumJS

I must say I’m very impressed by Cesium’s built-in astronomical data and shapes!
Here’s the eclipse list I’m using to find total eclipses
List of solar eclipses in the 21st century - Wikipedia

OK, this is the last total eclipse 3D umbra video before I add the penumbra cone. This one zips right down the middle of North America, and appears to be a good sized intersection.

As usual it matches up with - Interactive Solar Eclipses with CesiumJS

This is very cool! How long did this take you to put together? Are all these cones just really long geometry created with the Entity API?

Thanks! All of the geometry is done with scene.primitives (same with compass pointers), an umbra cone is created whenever the day changes. Finding what I call ‘point umbra’ (tip of the cone) didn’t take long, just used 2D cross-section math to find the intersection of 2 lines:
-line top of Sun to top of Moon
-line bottom of Sun to bottom of Moon
I used the Moon center for the cone base (and Moon radius for cone radius), and point umbra to moon center is the length of the cone. Every frame would update cone position and orientation. I don’t update the cone length every frame but the change over the course of a few hours would be very minuscule anyhow. The cone length is set at the start of that day. (currently as you change days you’ll end up with a few discarded cones here and there.)

The astronomical data that Cesium uses is very good. Apparently it’s from 1994, but using that data it seems to be dead on accurate for the 2024 Apr 08 total eclipse 30 years later! That’s the only data that I use for all primitives shown.

Penumbra is a slightly more difficult to calculate, but still fairly easy. ‘Point Penumbra’, or the tip of the cone, is shared between 2 cones, facing 180 degrees from each-other. I calculate point penumbra and the cone angle for one, which will be the same cone angle for the other. I then use this cone angle to determine what base radius I need for whichever length I choose (probably no more than to Earth’s center.) I’ll try to show the penumbra cone with a low alpha so you can easily see the umbra cone within it.

After that I’ll do the same for Earth’s shadow onto the Moon. I’ll try to put it all into a function where you just input Sun pos/radius and ‘shadow creating object’ pos/radius and it returns 2 shadow cones emanating from that object.

Alright, I got both umbra and penumbra cones all in one on this video

I must say, the 2024 Apr 08 Eclipse is definitely the North American Eclipse! The only part of North America not in the penumbra is, well, most of Alaska.

Is there a way to not show the bottom texture of cylinder/cone primitives when seen from through their sides? That’s the reason why I put the camera within the penumbra cone for most of the video, so I can see the Earth surface texture under it.

Now off to making umbra/penumbra cones for Earth onto the Moon. This should be easy, using the same code, different parameters.

EDIT: well I’m done with umbra/penumbra cones for Earth onto the Moon. And wow is it easy to get the entire moon totally eclipsed due to the huge size of the umbra cone. However due to visibility between the Moon model and cylinder/cone primitives I’m having trouble making a good video on the phenomenon. I have all cylinders set to transparent, but they still hide the moon even if you put the camera inside the cone primitive! Perhaps I could make a model to supersede the Moon model that’ll show up better.

I did just that, made a model that goes around the Cesium Moon model, same size/shape. Well its border shows up once inside the transparent primitives (shadow cones.) It’s not quite what I’d like, but I think it’s enough to get a good sense of the dimensions of the cones in relation to the dimensions of the Moon. I’ve made the penumbra cone green, and umbra cone red. I also made the blue arrow point toward instead of away from Earth.

The movement is kind of weird because I move the camera relative to the Earth Fixed coordinate system, so much of the time I’m chasing the Moon as the Earth spins. Not only that, but the spin is at a 23.5 degree tilt from orbital planes making me move diagonally. However it’s a piece of cake with a 3DMouse!

This upcoming lunar eclipse this week isn’t a total eclipse, in fact it isn’t that impressive at all as far as eclipses go, but I thought I’d share what I discovered using these tools.

The 3D views in Cesium is very educational for (Sun,Earth,Moon) astronomy:
-All 3 ellipsoids (Sun,Earth,Moon) are shown accurately (size, position).
-All 2 shadow cones (Umbra,Penumbra) are shown accurately (size, position).
Because of this I was able to determine many eclipse details.

On 2020 Jul 05 (BTW these times occur late Jul 04 for the United States)
03:00 UTC Moon enters Earth’s penumbra cone
04:30 UTC Just over 1/3 the Moon (north part) is in penumbra cone (max for this eclipse)
05:45 UTC Moon leaves Earth’s penumbra cone

-The southern portion of the eclipse: only a very small section of the Sun is blocked by the Earth
-The northern portion of the eclipse: only about 1/3 of the Sun is blocked by the Earth (not all that dark)
-As you walk south to north on the moon the amount blocked gradually rises from 0 to 1/3.

Using my plugin readout one can also quickly find other stats:

at 04:30 UTC
Florida: the Moon will be around 36deg above horizon
New York: the Moon will be around 24deg above horizon
So Cal: the Moon will be around 14deg above horizon
Seattle Wash: the Moon will be around 1.6deg above horizon (need to seek unobstructed high ground to view)

A recent news video showing 2D graphics of the event
2D graphics just aren’t sufficient. The 2D map shows some weird curves. In 3D it’s just a simple, easy to understand cone to ellipsoid intersection. Also those 2D graphics can’t properly show the Moon only partially entering the penumbra cone.

1 Like

That’s really cool that you’re able to see a lot of things here with Cesium that just aren’t very intuitive or easy to see in all those educational animation videos. It would be pretty cool to see a little tutorial about how others can create these, or maybe an open source GitHub repo that others can build off of your code!

Thanks! The eclipse code I use is actually quite short, less than 100 lines. It might make a good sandcastle demo. Cesium already has Sun and Moon calculations built in, which is where I get all my astronomical data from. Perhaps have an option for the camera to rotate around the Earth for Solar eclipses, and the Moon for Lunar eclipses. I still haven’t figured out how to remove primitives yet, currently I just make new shadow cones (with a newly calculated length) when a certain time has passed, with the previous discarded cone just sort of hanging out where I last updated it. I should have some freetime soon where I can transfer it to a sandcastle (or other type of) project. I’ll be sure to post back here once I start making some progress on it.

Here’s a video going through 2020 in 5 minutes looking for close calls that may or not be eclipses

Kinda boring to watch, but somewhat educational learning how factors like the distance between the Earth and Moon can have on Eclipses.

I made some code adjustments after this to skip many days for when I do this for 2021, so the 2021 video will barely be over 2 minutes long.

1 Like