cosinekitty / astronomy

Astronomy Engine: multi-language calculation of Sun, Moon, and planet positions. Predicts lunar phases, eclipses, transits, oppositions, conjunctions, equinoxes, solstices, rise/set times, and other events. Provides vector and angular coordinate transforms among equatorial, ecliptic, horizontal, and galactic orientations.
MIT License
461 stars 63 forks source link

Lunar eclipse, penumbral magnitude and umbral magnitude #345

Open jibdata opened 4 months ago

jibdata commented 4 months ago

Hi,

I love your library and it has helped me a lot with astronomical computation in Node.js. I don't know if this is a bit sidetracked with the intention of the Astronomy Engine, but would it be possible to include penumbral magnitude and umbral magnitude when searching (SearchLunarEclipse) for eclipses? And when the eclipse is at its maximum for an observer? Maybe a new function that can be called with the eclipse data and the observer, or a SearchLocalLunarEclipse function that is called with date and observer (i.e the SearchLocalSolarEclipse).

cosinekitty commented 4 months ago

Hi @jibdata and thank you for your kind words!

About making an observer-centered eclipse function, I don't think it makes any measurable difference about where on Earth you observe the Moon while it is being shadowed by the Earth. Everyone on Earth sees the Moon from almost exactly the same angle. Lunar eclipses are notoriously subjective experiences in reality. The Earth's shadow is so blurry, and the atmospheric refraction effects are impossible to predict. Therefore, there is already the problem of trying to numerically evaluate how accurate a lunar eclipse prediction is.

When you talk about penumbral magnitude and umbral magnitude, I'm not sure how you would separate the two. Perhaps you can define these terms for me?

jibdata commented 4 months ago

Ok, I see your point. I have compared with MoonCalc.org and TimeAndDate.com, and especially TimeAndDate.com are operating with both Global Event and Local Type for the eclipses where the local type can have a maximum view for the observers location. I just thought that could be an interesting fact for the eclipse. Example Oslo: https://www.timeanddate.com/eclipse/in/norway/oslo?iso=20250314 Example New York: https://www.timeanddate.com/eclipse/in/usa/new-york?iso=20250314 There is a big difference from the observers perspective between the two locations.

The terms for the penumbral magnitude and umbral magnitude is according to MoonCalc.org: Penumbral Magnitude: Penumbral magnitude is the fraction of the Moon's DIAMETER obscured by Earth's penumbral shadow. For penumbral eclipses, it is usually less than 100%.

Umbral Magnitude: Umbral magnitude is the fraction of the Moon's DIAMETER obscured by Earth's umbral shadow. For partial eclipses, it is greater than 0 but less than 100%. For total eclipses, it is equal or greater than 100%.

There is also information about this at TimeAndDate.com: https://www.timeanddate.com/eclipse/magnitude.html

jibdata commented 4 months ago

Sorry for spamming, but I hope you bear with me. With the penumbral and umbral values it would also be interesting to know the direction where the earth shadow hits the moon (as TimeAndDate.com are visualising it). I have implemented the Camera function from your demo, and have used this to create a visualisation of the moon and the current phase for a given date and observer. With the penumbral and umbral values, and the direction/position of the earth shadow, I would be able to enrich the visualisation with what an eclipse would look like. I know that in real life there will be many occurrences where it is almost impossible to see the eclipse as calculated, but from a nerdy mathematical perspective it would be very satisfying.

cosinekitty commented 4 months ago

I like the idea of being able to visualize a lunar eclipse. Instead of trying to pack everything into a single return value (LunarEclipseInfo), it seems like it would be better to have a separate function where you pass in the date/time and it somehow tells you how to draw a picture of the Moon at that moment. Then you could animate the whole eclipse if you wanted.

And for this, it does make sense to provide the observer's location because you want to render the orientation as it would appear in that observer's horizontal coordinates.

This function should ideally correct for libration, parallax, and illuminated phase, whether or not there is a lunar eclipse in progress. When there is an eclipse, it should also report where and how to draw the penumbra and umbra.

I don't think anything less than this will be enough to render a convincing depiction of the Moon in all cases.

This is quite a complex undertaking, so while I like the idea, I'm not sure when I would be able to work on this any time soon...

jibdata commented 4 months ago

I understand that this is a complex undertaking, and have briefly tried to look for other libraries without any luck (also not a fan of using multiple libraries). I guess this would involve Besselian Elements, Danjon’s Method and Saros Cycle, and is way overhead of my level on this matter. (NASA's JPL DE (Development Ephemeris) data like DE421, DE430, or DE441)

I would be interested in doing a small sponsor contribution, if and when you see it fits to look into this.