Files
astronomy/demo/python
Don Cross 90a9839d18 Optimize for map-making calculation patterns.
See this discussion:
https://github.com/cosinekitty/astronomy/issues/150

For the case of calculating a map, where each pixel
on the map represents a different location on the Earth,
it is more efficient to factor out expensive calculation
of sidereal times, assuming the entire map represents
some phenomenon at a single moment in time.

For example, to determine whether the Moon is visible
at different places on the Earth, the following
functions can be calculated across thousands of
different (lat, lon) geographic coordinates around
the world:

    ObserverVector
    Rotation_EQD_HOR

Before iterating over the map pixels, a program
can call GeoMoon, then convert EQJ coordinates to EQD.

Then by passing the same time value in a loop to
ObserverVector and Rotation_EQD_HOR, the program
can calculate a vector from the observer to the Moon
in EQD coordinates, then convert EQD to HOR.
The z-coordinate of the horizontal coordinates
determines whether the Moon is above or below the
observer's horizon at that point on the Earth.

This calculation pattern performed redundant
sidereal time calculations for each pixel on the map.
I changed the code for all 4 languages to cache
sidereal time so that it only needs to be calculated
once.

In the C version of Astronomy Engine, this resulted
in a speedup factor of about 2.3 in the above use case.
(See the function MapPerformanceTest in generate/ctest.c.)
2022-01-22 20:47:46 -05:00
..
2019-08-10 18:02:15 -04:00
2021-06-14 12:29:33 -04:00
2021-07-19 22:09:49 -04:00
2019-08-10 17:38:04 -04:00

Astronomy Engine examples in Python


Camera

Suppose you want to photograph the Moon, and you want to know what it will look like in the photo. Given a location on the Earth, and a date/time, this program calculates the orientation of the sunlit side of the Moon with respect to the top of your photo image. It assumes the camera faces directly toward the Moon's azimuth and tilts upward to its altitude angle above the horizon.

Constellation

This demo shows how to find what constellation a body is in at a given time. It also shows how to do a binary search to find the moment in time when a body moves across the border between constellations.

Culmination

Finds when the Sun, Moon, and planets reach their highest position in the sky on a given date, as seen by an observer at a specified location on the Earth. Culmination is also the moment a body crosses the meridian, the imaginary semicircle in the sky that passes from due north on the horizon, through the zenith (straight up), and then toward due south on the horizon.

Galactic to Horizontal Converter

A demonstration of how to convert galactic coordinates to horizontal coordinates. This could be useful for backyard radio astronomers who know the galactic coordinates of a distant radio source and want to aim a radio dish at it. Given the galactic coordinates, the geographic coordinates of the observer, and the date and time of the observation, this program shows how to obtain the altitude and azimuth to aim the dish at the radio source.

Horizon Intersection

This is a more advanced example. It shows how to use coordinate transforms to find where the ecliptic intersects with an observer's horizon at a given date and time.

Jupiter's Moons

Calculates the coordinates of Jupiter and its four major moons (Io, Europa, Ganymede, and Callisto) as seen from the Earth at a given date and time. This program illustrates how to correct for the delay caused by the time it takes for light to reach the Earth from the Jupiter system.

Lunar Angles

This is an example of how to implement your own custom search function using Astronomy Engine. This program searches for the next few times the Moon reaches a relative ecliptic longitude with respect to another body (as seen from the Earth) that is a multiple of 30 degrees.

Lunar Eclipse

Calculates details about the first 10 partial/total lunar eclipses after the given date and time.

Moon Phase Calculator

This example shows how to determine the Moon's current phase, and how to predict when the next few quarter phases will occur.

Positions

Calculates equatorial and horizontal coordinates of the Sun, Moon, and planets.

Rise/Set

Shows how to calculate sunrise, sunset, moonrise, and moonset times.

Seasons

Calculates the equinoxes and solstices for a given calendar year.

Triangulate

Given the geographic coordinates of two observers, and angular directions they are looking in, determines geographic coordinates of the point they are both looking at. This example demonstrates use of the geoid functions VectorObserver and ObserverVector that convert between geographic coordinates and vectors.


API Reference

Complete documentation for all the functions and types available in the Python version of Astronomy Engine.