Commit Graph

44 Commits

Author SHA1 Message Date
Don Cross
926eae349a C demos allow getting observer from environment.
The function ParseArgs (used by many of the C demo programs)
now allows an alternative command line usage. If the '-e'
option is specified, it looks for the environment variable setting:

ASTRONOMY_ENGINE_OBSERVER='latitude longitude'

This form allows the demo programs to be configured for a given site.
2021-11-14 09:53:45 -05:00
Don Cross
37084a156d C Earth gravity calculation.
Implemented the C function Astronomy_ObserverGravity.
It implements the WGS 84 Ellipsoidal Gravity Formula,
yielding the effective observed gravitational acceleration
at a location on or above the Earth's surface.
Wrote a demo program that also serves as a unit test.
I verified a few of the calculations, so the file
demo/c/test/gravity_correct.txt also serves as correct
unit test output.
2021-07-19 14:23:27 -04:00
Don Cross
87926a71c1 Implemented C# 'triangulate' demo. Added doc links. 2021-06-22 13:51:14 -04:00
Don Cross
50019fafce Implemented JavaScript 'triangulate' demo. 2021-06-22 11:45:07 -04:00
Don Cross
2eec19fc23 Implemented C version of demo 'triangulate'.
Just like the Python version, this program calculates
the best-fit intersection point for two lines of sight
as seen by two observers. It demonstrates converting
back and forth between geographic coordinates and
geocentric vectors.
2021-06-22 10:50:47 -04:00
Don Cross
b9daddd04c Added demo program galactic.py.
This is the Python version of a demo to convert
galactic coordinates to horizontal coordinates for
a given time and geographic location.
2021-06-14 12:29:33 -04:00
Don Cross
9287fedec1 Added demo galactic.c for converting GAL to HOR.
This demo program converts galactic coordinates to
local altitude an azimuth for a given geographic
location and time.
2021-06-14 11:36:14 -04:00
Don Cross
743c11b7fc Miscellaneous work on C code and documentation.
Moved the following constant definitions from astronomy.c
to astronomy.h, so external code can use them:

DEG2RAD
RAD2DEG
KM_PER_AU

My custom doxygen-to-markdown translator (hydrogen.js)
now emits markdown for the above constants.

Eliminated the obsolete constants MIN_YEAR and MAX_YEAR.
Astronomy Engine is no longer limited to calculating planets
within that range of years.

Fixed a couple of minor documentation issues in the C code.

Started work on a new function Astronomy_ObserverVector,
but it is just a stub for now.
2021-03-28 20:53:29 -04:00
Don Cross
9eeafc4d16 Updated camera.c demo to print magnitude, phase angle, and Sun angle. 2021-03-23 19:37:49 -04:00
Don Cross
fcd6ec4d05 Starting to work on support for camera orientation in the C version.
Added C function Astronomy_Pivot to transform a rotation matrix
by rotating it around one of its coordinate axes by a given angle.

Added C function Astronomy_IdentityMatrix that just returns
an identity matrix that can be used as the starting point in
a series of transforms.

C function Astronomy_Equator now also returns the topocentric
equatorial location in the form of a cartesian vector.
This is in a new member of the astro_equatorial_t struct
called 'vec'.

The unit test in ctest.c "Rotation_Pivot()" could be improved
with more and better tests.

Created a demo program camera.c that illustrates using
Astronomy_Pivot() to help calculate the tilt of the sunlit
side of the Moon, as seen by a camera pointing right at it.
The resulting tilt angle is not yet verified.
I need to have some confirmation that it is correct before
porting to the other languages.
2021-03-22 22:30:04 -04:00
Don Cross
246ac47d2b Fixed a failure to find a full moon using certain start dates.
In all four versions of Astronomy Engine (C, C#, JavaScript, and Python),
starting a search for a full moon near December 19, 2020 would fail.
I added a unit test to all four languages and it failed consistently
across them all.

The root cause: I was too optimistic about how narrow I could make
the window around the approximate moon phase time in the
SearchMoonPhase functions. Finding the exact moon phase time failed
because it was outside this excessively small window around the approximate
time. I increased the window from 1.8 days to 3.0 days.
This should handle all cases with minimal impact on performance.

Now all four of the new unit tests pass.
2020-12-18 14:29:41 -05:00
Don Cross
d8e268e116 linux_riseset.c demo: Moon, Sun culmination.
Calculate the next Moon and Sun cumlination,
and include the altitude of the body above
the horizon at that moment.
2020-09-13 19:23:09 -04:00
Don Cross
b779a6aeca Added linux_riseset.c, a variation of riseset.c.
This new demo shows how to calculate rise and set times
of the Sun and Moon in local time, using Linux functions.
It also sorts the events in chronological order.
2020-09-08 21:40:05 -04:00
Don Cross
8f16f0a5ae Pluto integrator: finished porting to Python.
I believe this wraps up the Python integrator.
It now works in all 4 languages and passes all tests.
Fixed up demo tests to match new output.
Turned on Travis CI checking in this branch again.
2020-08-24 20:54:20 -04:00
Don Cross
c4442103c4 More fixes for gcc 9.3.0 aarch64 on Raspberry Pi 3.
Fixed some build warnings that occur on various gcc
optimization levels, and only on this version of gcc.

For now, build ctest with fewer optimizations: -O1
instead of -O3. This is because -O3 and -O2 cause
excessive errors in 'ctest diff' of the order
1.0e-9, where I usually get 1.0e-12. I will have to
come back and figure out exactly which optimization(s)
are causing the problem and turn them off specifically.
This also means I need to document the dangerous optimizations
for people who are using the C version of Astronomy Engine.

When 'ctest diff' fails because of excessive numeric error,
print out the two lines of input text that had the worst
numeric error. This really helps on the Raspberry Pi
where memory is at a premium, and it's hard to open the
full output files using vi.
2020-07-22 18:53:13 +00:00
Don Cross
686401d3ef Added C function Astronomy_FormatTime.
It's surprisingly tricky to print a time rounded to the
nearest millisecond, second, or minute using the C code.
I saw a case where positions.c printed '2020-07-09 04:29:60'.
Because printing a date/time is a basic need of an astronomy program,
I added the new function Astronomy_FormatTime to do this.
All the demo programs use this new function, which required
me to update the correct reference output for the unit tests.
2020-07-09 15:25:28 -04:00
Don Cross
b31c0185df TOP2013: greatly decrease waviness in Pluto curve.
The high-frequency wobble in the Pluto position function was bothering me.
Decreased the arcminute error threshold from 1.0 to 0.5, resulting
in a much larger model, but a lot less ripple:

   547 [    78   140    94   115    21    99]
2020-07-07 15:38:39 -04:00
Don Cross
d89b9a19d5 C: Replaced Chebyshev with TOP2013 for Pluto calculations.
Now the C version of Astronomy Engine is using the TOP2013 model
of Pluto instead of resampled Chebyshev polynomials.

I added temporary hacks to ignore differences for Pluto between
C output and output from Python, JavaScript, and C#.
I will remove these after all four languages are using TOP2013.
See the variable ToleratePlutoErrors in ctest.c.

ctest.c DiffLine function now understands that longitude-like
angles (right ascension and azimuth) can wrap around, and to tolerate
very small angular differences that happen to straddle the wraparound
value. I should have done this a long time ago, but it never caused
problems before now.

C PlanetApsis has a serious problem with Pluto that I didn't expect.
I need to investigate and understand this before porting to other
languages. For now, I hack around it using ToleratePlutoErrors.
2020-07-06 13:47:05 -04:00
Don Cross
4f842627da Fixed mistake in GeoVector(SUN): we do need to correct for light-travel time.
To be consistent, when calculating the geocentric position of the Sun,
we do need to correct for light travel time just like we would for any
other object. This reduces the maximum time error for predicting transits
from 25 minutes to 11 minutes.

Also had to disable aberration when calculating moon phases
(longitude from Sun) in order to keep a good fit with test data.
2020-06-13 13:45:59 -04:00
Don Cross
ef12121621 Starting to implement C version of local solar eclipse.
Defined data structure astro_local_solar_eclipse_t.
Created stubs for functions to find local solar eclipses.
Renamed lunar eclipse 'center' to 'peak' to be consistent.
2020-05-23 21:29:16 -04:00
Don Cross
83544bf57d Added C# demo for lunar eclipse.
Alphebetized demo readme pages.
2020-05-17 14:03:01 -04:00
Don Cross
d9e2ea5816 Added C version of lunar eclipse demo.
Also added better comments to Python version.
2020-05-17 13:02:18 -04:00
Don Cross
9ea6a0664f Python: Use Espenak/Meeus formula for calculating Delta T. 2020-05-15 19:28:54 -04:00
Don Cross
4354e72e52 Minor tweaks due to sun, moon radius changes for lunar eclipse calculations.
Adding support for lunar eclipse calculations in the C code
caused me to tweak the values of the Sun and Moon radii.
This in turn caused unit test failures.
Made slight changes to the unit tests to get things passing again.
2020-05-13 15:52:22 -04:00
Don Cross
c1b3bda2bd C# demo: Added moonphase demo. 2019-12-23 12:36:50 -05:00
Don Cross
c08d29e7d9 Added missing cleanup in C demo script. 2019-12-23 11:38:41 -05:00
Don Cross
c55330cb60 Corrected the wording of the readme file for demo program horizon.c. 2019-12-12 12:37:24 -05:00
Don Cross
c008dcdff6 Finished C demo program horizon.c.
This program demonstrates converting ecliptic coordinates
to horizontal coordinates at a given time for a given observer.
It searches for the two locations on the horizon where the
ecliptic plane intersects it.
2019-12-12 12:35:00 -05:00
Don Cross
cb22bd40eb Added culminate.py demo program. 2019-08-10 18:02:15 -04:00
Don Cross
0a8e470fed Added Python demo program positions.py. 2019-08-10 16:38:38 -04:00
Don Cross
0c824bcf1b Major performance improvement for C library: re-use Earth tilt calculations.
Just like I did in the Python version, avoid repeated calculations
of the Earth's tilt angles for a given time. Do this by caching
the angles in the astro_time_t structure. This requires passing in
the time values by address instead of by value. I may go back and
change all the time parameters to pointers for consistency.
2019-06-27 21:47:30 -04:00
Don Cross
743394b6d7 Added C example: culminate. 2019-06-18 21:00:57 -04:00
Don Cross
ab642feb21 Added C example: calculating seasons. 2019-06-16 20:39:40 -04:00
Don Cross
7b7294fff9 Print name of each C example before testing it. 2019-06-14 21:56:43 -04:00
Don Cross
3558f43d48 Added C example: rise and set times for Sun and Moon. 2019-06-14 21:50:26 -04:00
Don Cross
d476465b6d Actually test moonphase.js and moonphase.c. Test after generating code. 2019-06-13 21:38:27 -04:00
Don Cross
58fa90a0bf Reworked tests of C examples.
Moved test files into separate test directory (cleaner).
Make C and nodejs 'position' tests generate identical output.
2019-06-13 21:04:45 -04:00
Don Cross
fb09678d4f Verify that demo C programs build. Validate positions.c output.
I could also validate moonphase.c output if only I modified it
to accept an optional date and time parameter.
2019-06-11 21:05:44 -04:00
Don Cross
19c81b4897 Build example program positions.c in Linux. 2019-06-11 20:51:02 -04:00
Don Cross
18251d16a4 Added another C example program: positions.c.
This example demonstrates how to calculate equatorial coordinates
and horizontal coordinates of solar system bodies.

Added explanatory comments to moonphase.c.

Added #defines for MIN_YEAR, MAX_YEAR in astronomy.h.

Removed unnecessary code from positions.html; no longer need
to calculate geocentric vector before calculating equatorial coordinates.
2019-06-11 20:31:22 -04:00
Don Cross
88a352bf90 Moved moonphase Visual Studio project to its own directory.
Also starting to add a positions project.
2019-06-11 15:57:55 -04:00
Don Cross
7591cd26ef Starting to add more C documentation. Still working on doxygen/moxygen. 2019-05-26 12:05:55 -04:00
Don Cross
baf38c9a0e No C API reference exists yet. 2019-05-25 21:56:06 -04:00
Don Cross
9ed995e462 Added C function Astronomy_CurrentTime(). Added C moon phase demo. 2019-05-25 21:18:24 -04:00