AA+ v2.59 A class framework for Computational
Astronomy
AA+ is a C++ implementation for the algorithms as presented in the book "Astronomical
Algorithms" by Jean Meeus. Source code is provided with the book, but it includes
(IMHO) a restrictive license, as well as not having been updated for the 2nd revision
of the book which includes new and interesting chapters, on areas such as the Moons
of Saturn and the Moslem and Jewish Calendars. To make the most of my code, you
will really need a copy of the book. This can be purchased from
Amazon or directly from the publishers
Sky
& Telescope formerly Willman-Bell.
Example areas covered include the positions of the planets, comets, minor planets
and the Moon, calculation of times of Rising, Setting and Transit, calculation of
times of Equinoxes and Solstices plus calculation of the positions of the moons
of Jupiter and Saturn as well as many other algorithms presented in the book. This
is one of the biggest frameworks I have ever developed and includes 415+ thousand
lines of code!
Copyright
- You are allowed to include the source code in any product (commercial, shareware,
freeware or otherwise) when your product is released in binary form.
- You are allowed to modify the source code in any way you want except you
cannot modify the copyright details at the top of each module.
- If you want to distribute source code with your application, then you are
only allowed to distribute versions released by the author. This is to maintain
a single distribution point for the source code.
Updates
v2.59 (30 November 2024)
- Fixed a bug in CAAEquinoxesAndSolstices2::Calculate where the time of
Southern Solstice was incorrectly being reported as a Northern Solstice.
Thanks to "Pavel" for reporting this issue.
v2.58 (28 November 2024)
- Updated logic in CAAEquinoxesAndSolstices2::Calculate to use the correct
definition of Equinoxes and Solstices as mentioned on Page 177 of Meeus's
book. Thanks to "Pavel" for reporting this issue.
- Updated CAASun::GeometricFK5EclipticLongitude to return value in range 0
to 360
- Updated CAASun::GeometricFK5EclipticLatitude to return value in range
-90 to 90
- Updated CAASun::ApparentEclipticLongitude to return value in range 0 to
360
v2.57 (18 October 2024)
- Reimplemented the internal methods of CAARiseTransitSet2 to avoid code
duplication. Thanks to "Pavel" for providing this update.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
17 October 2024 and predicted values to 25 October 2025 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.56 (25 July 2024)
- Updated the g_DeltaTValues lookup table to use observed DeltaT
values to 18 July 2024 and predicted values to 26 July 2025 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
- Fixed an edge case bug in all the CalculateX functions of
CAARiseTransitSet2 where the main loop iterates from StartJD by StepInterval
until JD < EndJD. That means that events happening closer than StepInterval
to EndJD get lost because the step where we can catch it is outside of
StartJD...EndJD interval. Now the code iterates from StartJD by StepInterval
until JD < (EndJD+StepInterval). Thanks to Alexander Vasenin for reporting
this issue.
- Fixed an edge case bug in the Calculate function of
CAAEquinoxesAndSolstices2 where the main loop iterates from StartJD by
StepInterval until JD < EndJD. That means that events happening closer than
StepInterval to EndJD get lost because the step where we can catch it is
outside of StartJD...EndJD interval. Now the code iterates from StartJD by
StepInterval until JD < (EndJD+StepInterval+StepInterval). Thanks to
Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in the Calculate function of
CAAPlanetPerihelionAphelion2 where the main loop iterates from StartJD by
StepInterval until JD < EndJD. That means that events happening closer than
StepInterval to EndJD get lost because the step where we can catch it is
outside of StartJD...EndJD interval. Now the code iterates from StartJD by
StepInterval until JD < (EndJD+StepInterval+StepInterval). Thanks to
Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in the Calculate function of
CAAMoonPerigeeApogee2 where the main loop iterates from StartJD by
StepInterval until JD < EndJD. That means that events happening closer than
StepInterval to EndJD get lost because the step where we can catch it is
outside of StartJD...EndJD interval. Now the code iterates from StartJD by
StepInterval until JD < (EndJD+StepInterval+StepInterval). Thanks to
Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in the Calculate function of
CAAMoonMaxDeclinations2 where the main loop iterates from StartJD by
StepInterval until JD < EndJD. That means that events happening closer than
StepInterval to EndJD get lost because the step where we can catch it is
outside of StartJD...EndJD interval. Now the code iterates from StartJD by
StepInterval until JD < (EndJD+StepInterval+StepInterval). Thanks to
Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in all the Calculate function of CAAMoonPhases2
where the main loop iterates from StartJD by StepInterval until JD < EndJD.
That means that events happening closer than StepInterval to EndJD get lost
because the step where we can catch it is outside of StartJD...EndJD
interval. Now the code iterates from StartJD by StepInterval until JD <
(EndJD+StepInterval). Thanks to Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in all the Calculate function of CAAMoonNodes2
where the main loop iterates from StartJD by StepInterval until JD < EndJD.
That means that events happening closer than StepInterval to EndJD get lost
because the step where we can catch it is outside of StartJD...EndJD
interval. Now the code iterates from StartJD by StepInterval until JD <
(EndJD+StepInterval). Thanks to Alexander Vasenin for reporting this issue.
- Fixed an edge case bug in all the Calculate function of
CAAPlanetaryPhenomena2 where the main loop iterates from StartJD by
StepInterval until JD < EndJD. That means that events happening closer than
StepInterval to EndJD get lost because the step where we can catch it is
outside of StartJD...EndJD interval. Now the code iterates from StartJD by
StepInterval until JD < (EndJD+StepInterval+StepInterval). Thanks to
Alexander Vasenin for reporting this issue.
v2.55 (29 April 2024)
- Fixed a number of compilation issues in AADynamicalTime.cpp, AAELP2000.h,
AAVSOP2013.cpp and AAVSOP87.h when compiling with GCC. Thanks to Andrew
Roberts for reporting this issue.
v2.54 (26 April 2024)
v2.53 (7 October 2023)
v2.52 (12 July 2023)
- Updated AAParallax.cpp to use a more accurate value of the Solar
Parallax constant of 8.794148" instead of 8.794". This newer value was
adopted in 1977 by the IAU. Thanks to "Pavel" for reporting this issue.
- Fixed another bug in the calculation of the return value in the
CAAPhysicalMoon::AltitudeOfSun method. Thanks to "Pavel" for reporting this
issue.
v2.51 (11 July 2023)
- Updated CAADiameters::GeocentricMoonSemidiameter method to use the more rigorous
formula on page 390 as presented in Meeus's book. Also updated the "k"
constant used in this method from 0.272481 to the more modern value of k =
0.2725076. Please see section "1.9 Mean Lunar Radius" of
https://umbra.nascom.nasa.gov/eclipse/20060329/text/chapter_1.html for the
reason why the new value was adopted in 1982. Thanks to "Pavel" for
reporting this issue.
- Fixed a bug in CAAPhysicalMoon::AltitudeOfSun method. Thanks to "Pavel"
for reporting this issue.
- Improved the k value in the
CAADiameters::ApparentSaturnPolarSemidiameterA method. Thanks to "Pavel" for
reporting this issue.
- Improved the k value in the
CAADiameters::ApparentSaturnPolarSemidiameterB method. Thanks to "Pavel" for
reporting this issue.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values
to 06 July 2023 and predicted values to 13 July 2024 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.50 (16 April 2023)
- Renamed CAAELP2000::MeanLongitudeOfPerilhelionOfEarthMoonBarycentre to
CAAELP2000::MeanLongitudeOfPerihelionOfEarthMoonBarycentre.
- Fixed a bug in CAAPrecession::AdjustPositionUsingMotionInSpace in the
calculation of the DeltaX, DeltaY & DeltaZ variables. This issue was
introduced in July 2022 when C++ uniform initialization for all variable
declarations was introduced. Thanks to "Pavel" for reporting this issue.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
13 April 2023 and predicted values to 20 April 2024 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.49 (29 January 2023)
- Updated copyright details.
- Updated the g_DeltaTValues lookup table
to use observed DeltaT values to 26 January 2023 and predicted values to 3
February 2024 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
- Renamed CAANearParabolic::CalculateTrueAnnomalyAndRadius to
CAANearParabolic::CalculateTrueAnomalyAndRadius.
v2.48 (23 December 2022)
v2.47 (13 November 2022)
v2.46 (1 October 2022)
- Updated the CAAElliptical::Calculate method which takes an Object
parameter to return the following additional values:
TrueGeocentricRectangularEcliptical, TrueHeliocentricEclipticalLongitude,
TrueHeliocentricEclipticalLatitude, TrueHeliocentricDistance,
TrueGeocentricEclipticalLongitude, TrueGeocentricEclipticalLatitude,
TrueGeocentricDistance, TrueLightTime, TrueGeocentricRA &
TrueGeocentricDeclination.
- Renamed CAAEllipticalPlanetaryDetails::ApparentGeocentricLongitude to
ApparentGeocentricEclipticalLongitude.
- Renamed CAAEllipticalPlanetaryDetails::ApparentGeocentricLatitude to
ApparentGeocentricEclipticalLatitude.
- Fixed an issue in CAAElliptical::Calculate method which takes a Object
parameter when the Object parameter is the Sun and the code is attempting to
calculate the apparent position of the Sun.
- Added support to CAAPlanetaryPhenomena2::Calculate for MinimumDistance
and MaximumDistance event types. The demo application has been updated to
show the closest approach of Jupiter on 7th October 1963 UT at 3.952 AU, the
closest approach of 26th September 2022 UTC at 3.952 AU and the closest
approach of 6th October 2129 UT at 3.948 AU.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
29 September 2022 and predicted values to 7 October 2023 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.45 (28 August 2022)
- Fixed an issue in CAAElliptical::MinorPlanetMagnitude where brackets
were missing. Thanks to "Pavel" for reporting this issue.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
25 August 2022 and predicted values to 2 September 2023 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.44 (14 July 2022)
- Updated all the code in AAAberration.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAAngularSeparation.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AABinaryStar.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AACoordinateTransformation.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AADiameters.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AADynamicalTime.cpp to use C++ uniform
initialization for all variable declarations.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
07 July 2022 and predicted values to 15 July 2023 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
- Updated all the code in AAEarth.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAEaster.h to use C++ uniform initialization for
all variable declarations.
- Updated all the code in AAEclipses.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAEclipticalElements.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAElliptical.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAELP2000.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAELPMPP02.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAEquationOfTime.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAEquinosesAndSolstices.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAEquinosesAndSolstices2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAFK5.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAGalileanMoons.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAGlobe.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAIlluminatedFraction.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAInterpolate.cpp to use C++ uniform
initialization for all variable declarations.
- Updated various functions in the CAAInterpolate class to allow the
epsilon value used to terminate iteration loops to be specified.
- Updated all the code in AAJewishCalendar.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAJupiter.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAKepler.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAMars.cpp to use C++ uniform initialization for
all variable declarations.
- Updated all the code in AAMercury.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAMoon.cpp to use C++ uniform initialization for
all variable declarations.
- Updated all the code in AAMoonIlluminatedFraction.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonMaxDeclinations.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonMaxDeclinations2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonNodes.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonNodes2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonPerigeeApogee.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonPerigeeApogee2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonPhases.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoonPhases2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAMoslemCalendar.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AANearParabolic.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AANeptune.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AANodes.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AANutation.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAParabolic.cpp to use C++ uniform
initialization for all variable declarations.
- Updated methods in the CAAParabolic class to allow the epsilon value
used to terminate iteration loops to be specified.
- Updated all the code in AAParallactic.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAParallax.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAPhysicalJupiter.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAPhysicalMars.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAPhysicalMoon.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAPhysicalSun.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAPlanetaryPhenomena.cpp to use C++ uniform
initialization for all variable declarations.
- Fixed a transcription error in the lookup tables
AAPlanetaryPhenomena.cpp used to calculate the Station 1 values for Mars.
- Updated all the code in AAPlanetaryPhenomena2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAPlanetPerihelionAphelion.cpp to use C++
uniform initialization for all variable declarations.
- Updated all the code in AAPlanetPerihelionAphelion2.cpp to use C++
uniform initialization for all variable declarations.
- Updated all the code in AAPluto.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAPrecession.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AARefraction.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AARiseTransitSet.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AARiseTransitSet2.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AASaturn.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AASaturnMoons.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AAUranus.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AASaturnRings.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AASidereal.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAStellarMagnitudes.cpp to use C++ uniform
initialization for all variable declarations.
- Updated all the code in AASun.cpp to use C++ uniform initialization for
all variable declarations.
- Updated all the code in AATest.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAVenus.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAVSOP87.cpp to use C++ uniform initialization
for all variable declarations.
- Updated all the code in AAVSOP2013.cpp to use C++ uniform initialization
for all variable declarations.
v2.43 (27 March 2022)
- Fixed an issue in CAADate::DayOfWeek for dates which are close to or
prior to the julian day epoch. Thanks to "znight" for reporting this issue.
- Updated all the code in the CAADate class to use C++ uniform
initialization for all variable declarations.
v2.42 (20 March 2022)
v2.41 (24 January 2022)
v2.40 (22 December 2021)
v2.39 (22 November 2021)
- Reworked the CAABinaryStar::Calculate method to use the method as
detailed in chapter 7 in the book "Observing and Measuring Visual Double
Stars". This helps fix issues detected with the algorithms as presented in
Chapter 57 of Meeus's book. These issues were detected when developing a
program to provide a simple animation of a sample binary star system. The
observed bug was causing the orbits to not be calculated as projected
ellipses when the inclination value (i) approached 90 degrees.
- Updated CAABinaryStarDetails class to include rectangular
coordinates as well as the existing polar coordinates.
- Made some minor optimizations to the CAAKepler::Calculate method.
v2.38 (6 November 2021)
- Fix a minor layout problem in the g_MoonCoefficients3 lookup table in
AAMoon.cpp. Thanks to Jud McCranie for reporting this issue.
- Fixed a bug in CAAPhysicalMoon::CalculateOpticalLibration where the
value of the variable "W" was being calculated incorrectly. Thanks to Don
Cross for reporting this issue.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
4 November 2021 and predicted values to 12 November 2022 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
v2.37 (24 October 2021)
- Updated various classes to use C++ 11 in-class member initialization.
- Renamed CAAPlanetaryPhenomena::PlanetaryObject type to Planet.
- Renamed CAAPlanetaryPhenomena::EventType type to Type.
- Renamed CAAElliptical::EllipticalObject type to Object.
- Renamed CAADate::DAY_OF_WEEK type to DOW.
- Made CAAEaster::Calculate constexpr.
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
21 October 2021 and predicted values to 29 October 2022 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
- AA+ now includes complete support for the VSOP2013 theory (ftp.imcce.fr/pub/ephem/planets/vsop2013/).
This theory provides for calculation of the heliocentric elliptical orbital
elements and the heliocentric ecliptical and equatorial position and
velocity of Mercury, Venus, the Earth-Moon Barycenter, Mars, Jupiter,
Saturn, Uranus, Neptune and the dwarf planet Pluto for the equinox
and ecliptic of J2000.0.
v2.36 (12 September 2021)
- Updated the g_DeltaTValues lookup table to use observed DeltaT values to
9 September 2021 and predicted values to 17 September 2022 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all.
- Removed the Height parameter from the CAARiseTransitSet2::Calculate &
CalculateMoon methods. Instead now if you want to calculate times of rise or
set at different altitudes you should send in an adjusted h0 parameter. For
example you could use the following formulae to adjust for the Sun: double
H0 = -0.8333 - CAACoordinateTransformation::RadiansToDegrees(acos(6371008 /
(6371008 + Height)))
where Height is the altitude above sea-level in
meters. Thanks to Stephen F. Booth for reporting this issue.
v2.35 (21 August 2021)
- Reworked the algorithm to calculate the apparent semidiameter of the
Moon in CAARiseTransitSet2::CalculateMoon. Tests indicate that this change
only causes the rise / set times of the Moon to be a couple of seconds
different compared to the old formula.
v2.34 (20 August 2021)
- Fixed a bug in CAARiseTransitSet2::CalculateMoon in the calculation of
the H0 value. In the book Meeus uses the value +0.125 degrees for the Moon,
but this value is not correct in the context of the CAARiseTransitSet2 class
as this class already takes diurnal parallax of the Moon into account.
Instead the H0 value is now calculated with a new formula which provides
more accurate times of Moon Rise and Set. Thanks to Stephen F. Booth for
reporting these bug.
- The CAARiseTransitSet2::CalculateMoon method now includes a new
RefractionAtHorizon parameter. This value defaults to -0.5667 and corresponds
to the amount of atmospheric refraction to use at the moment of Moon rise or
set. Note that the actual H0 value for the Moon is not constant and is
calculated from this value in this method using the apparent
semidiameter of the Moon.
- Updated the CAARiseTransitSet2::CalculateMoon method to support
the ELP2000 and ELPMPP02 theories in addition to the Meeus ELP2000 truncated
algorithms.
v2.33 (11 August 2021)
- Fixed various bugs in CAARiseTransitSet2::AddEvents related to the
calculation of various twilight events. Thanks to Stephen F. Booth for
reporting these bugs.
- Changed AAPLUS_ELP2000_NO_HIGH_PRECISION preprocessor define to
AAPLUS_NO_ELP2000 to be consistent with other AA+ preprocessor defines.
- Changed AAPLUS_VSOP87_NO_HIGH_PRECISION preprocessor define to
AAPLUS_NO_VSOP87 to be consistent with other AA+ preprocessor defines.
v2.32 (9 August 2021)
v2.31 (8 July 2021)
v2.30 (5 June 2021)
v2.29 (1 May 2021)
v2.28 (20 April 2021)
- Added a preprocessor directive "AAPLUS_DELTAT_NO_HIGH_PRECISION" which
if defined will only use the polynomial equations instead of lookup tables
from IERS for calculating DeltaT in the method CAADynamicalTime::DeltaT. By
defining this value you reduce the memory requirements needed for the lookup
table "g_DeltaTValues" by 300 KB.
v2.27 (2 April 2021)
17 March 2021
- Fixed a minor typo in AATest.cpp. Thanks to Roger House for reporting
this issue.
v2.26 (12 March 2021)
- Reworked CAADynamicalTime::DeltaT to use std::upper_bound to speed up
logic to find correct entry in the g_DeltaTValues lookup table.
- Reworked CAADynamicalTime::CumulativeLeapSeconds to use std::upper_bound
to speed up logic to find correct entry in the g_LeapSecondCoefficients
lookup table.
- Updated the g_DeltaTValues lookup table to use values from the year 1657
to 1972.50 to use data from
https://cddis.nasa.gov/archive/products/iers/historic_deltat.data which
provides a granularity of 0.5 of a year. Also updated the same array to use
values from 2 January 1973 to 19 March 2022 from
https://cddis.nasa.gov/archive/products/iers/finals2000A.all which
provides a granularity of 1 day. Also updated the same array to use values
from the year 2022.25 to 2027.75 from
https://cddis.nasa.gov/archive/products/iers/deltat.preds which provides
a granularity of 0.25 of a year. All of this was implemented using a program
which machine generates the lookup table using custom code. This new lookup
table now includes > 18k elements and provides 1 - 1 precision with all the
data released by IERS. The machine generated code will also make it easier
to update this data as new data is published by IERS going forward. Using
this new lookup array we now have a discontinuity of c. 3.7 seconds in
January 1657 and a discontinuity of c. 2.5 seconds in October 2027 for the
CAADynamicalTime::DeltaT method. With these updates AA+ is now 29.7
Megabytes and 416 thousand lines of C++ source code.
- Implemented a CAADynamicalTime::SetUserDefinedDeltaT method which allows
a user provided DeltaT function to be provided. By default the
CAADynamicalTime::DeltaT function uses its own lookup tables and
polynomials to calculate DeltaT, but if
CAADynamicalTime::SetUserDefinedDeltaT has been called to provide a custom
DeltaT function then the callback function provided to this method will be used instead. Setting
the parameter to SetUserDefinedDeltaT to a nullptr will restore the default
DeltaT method behavior.
- Changed the behavior of the CAAPlanetaryPhenomena::K method to now return the K
value before it is rounded. This new behaviour is now consistent with all
the other methods in the AA+ framework which return so called "K" values.
This means that client code must round this value to an integer before
calling other methods in this class with this K value.
- Changed the behavior of the CAAPlanetPerihelionAphelion::*K methods to
now return the K value before it is rounded. This new behaviour is now
consistent with all the other methods in the AA+ framework which return so
called "K" values. This means that client code must round this value before calling other methods in this class with
this K value.
- Merged the separate perihelion and aphelion methods for all the planets
except Earth in CAAPlanetPerihelionAphelion into one method per planet. This
new behaviour is now consistent with all the other methods in the AA+
framework which work with so called "K" values.
- Fixed a bug in CAAPlanetPerihelionAphelion::EarthAphelion where the
kdash and ksquared values were not being calculated correctly.
v2.25 (7 March 2021)
v2.24 (5 February 2021)
v2.23 (10 January 2021)
- Reworked the K, H, Q and P methods in the
AAVSOP87_"Planetname".cpp modules to pass false for bAngle to
CVSOP87::Calculate. These values are not angular values in the true sense of
the word and by passing false, the values returned are now in exact
agreement with the vsop87.chk test values. Thanks to Cao Yu for reporting
this issue.
v2.22 (9 January 2021)
v2.21 (4 December 2020)
v2.20 (23 November 2020)
- Reworked CAADynamicalTime::TT2UTC & CAADynamicalTime::UTC2TT methods to
use std::array::size instead of sizeof.
- Reworked CAAELPMPP02::EclipticLatitude & CAAELPMPP02::RadiusVector
methods to use std::array::size instead of sizeof.
v2.19 (22 November 2020)
- Updated the observed DeltaT values from
https://datacenter.iers.org/eop.php to 1st November 2020. The IERS web
site is the definitive source for these values as the USNO websites which I
have previously used are offline at the moment for modernization efforts
(See https://www.usno.navy.mil/ for
the details). To obtain values for DeltaT to add to the g_DeltaTValues table in
AADynamicalTime.cpp, the value "UT1-UTC" was taken from Bulletin A and the
formula: DeltaT = AccumulatedLeapsSeconds + 32.184 - (UT1-UTC) was used. The
"AccumulatedLeapsSeconds" for 2020 is currently 37 seconds. If you plot the
values for DeltaT for 2020 you will see that around June 2020 the value for
DeltaT has started to decrease instead of the long term increasing trend for
DeltaT. If this trend continues we may see the first negative leap second
occur in the next few years.
v2.18 (21 November 2020)
- Update the CMake project file for AA+ to require C++ 17 compilation.
This fixes a compile issue when using CMake to build AA++ as the code
requires C++ 17
compilation as of v2.13. Thanks to Kirill Dunko for reporting this issue.
v2.17 (11 June 2020)
- Addition of a new CAAPlanetaryPhenomena2 class.
- Removed support for Pluto from the CAAElliptical class since the
CAAPluto class returns the coordinates in the equinox of J2000 instead of
the equinox of the date which is required by this class.
- Removed support for Pluto from the CAARiseTransitSet2 class since the
CAAPluto class returns the coordinates in the equinox of J2000 instead of
the equinox of the date which is required by this class.
v2.16 (2 June 2020)
- Addition of a new CAAPlanetPerihelionAphelion2 class.
v2.15 (1 June 2020)
- Fixed a bug in CAAELP2000::SunMeanAnomaly where some local variables
were not initialized. Thanks to "Carlos" for reporting this bug.
- Optimized the code in CAAVenus::EclipticLongitude.
- Renamed CAAELP2000::MoonMeanLongitude to
CAAELP2000::MoonMeanMeanLongitude.
- Renamed CAAELP2000::MoonMeanLongitudeLunarPerigee to
CAAELP2000::MeanLongitudeLunarPerigee.
- Renamed CAAELP2000::MoonMeanLongitudeLunarAscendingNode to
CAAELP2000::MeanLongitudeLunarAscendingNode.
- Renamed CAAELP2000::EarthMoonBarycentreMeanLongitude to
CAAELP2000::MeanHeliocentricMeanLongitudeEarthMoonBarycentre.
- Renamed CAAELP2000::EarthMoonBarycentreMeanLongitudeOfPerihelion to
CAAELP2000::MeanLongitudeOfPerilhelionOfEarthMoonBarycentre
v2.14 (29 April 2020)
- Fixed a compilation issue on GCC where size_t was undefined in various
modules. Thanks to Bert Devlieghe for reporting this bug.
v2.13 (22 April 2020)
- Updated the observed DeltaT values from
ftp://cddis.gsfc.nasa.gov/pub/products/iers/deltat.data to 1st February
2020
- Updated the code to take advantage of range based for loops and
std::array. Please note that these changes means that the code will no
longer compile on VC 2017 due to its limited supported for large constexpr
arrays.
- Fixed more Clang-Tidy static code analysis warnings in the code.
- Made a number of the CAADate methods [[nodiscard]] when compiled as C++
17. This change means that the code must be compiled using the ISO C++
17 standard or higher.
v2.12 (1 January 2020)
- Addition of a new CAAMoonPhases2 class.
- Updated copyright details.
v2.11 (10 December 2019)
- Fixed various Clang-Tidy static code analysis warnings in the code.
v2.10 (16 November 2019)
- Addition of a new CAAMoonNodes2 class.
v2.09 (2 November 2019)
- Addition of a new CAAMoonPerigeeApogee2 class.
v2.08 (22 October 2019)
- Addition of a new CAAMoonMaxDeclinations2 class.
v2.07 (28 September 2019)
- Addition of a new CAAEquinoxesAndSolstices2 class.
v2.06 (28 September 2019)
v2.05 (8 September 2019)
- Added support for EndCivilTwilight, EndNauticalTwilight,
EndAstronomicalTwilight, StartAstronomicalTwilight, StartNauticalTwilight &
StartCivilTwilight event types to CAARiseTransitSet2 class.
v2.04 (18 August 2019)
- Fixed some further compiler warnings when using VC 2019 Preview v16.3.0
Preview 2.0
v2.03 (15 July 2019)
- Refactored the code in various CAARiseTransitSet2 methods and improved
the interpolation code to provide better accuracy of event details.
v2.02 (13 July 2019)
- Addition of a new CAARiseTransitSet2 class which addresses issues with
the existing CAARiseTransitSet class which is now considered deprecated.
v2.01 (23 June 2019)
v2.0 (8 June 2019)
v1.99 (16 January 2019)
v1.98 (3 January 2019)
v1.97 (22 September 2018)
v1.96 (24 July 2018)
- Fixed a number of GCC warnings in the method
CAAGalileanMoons::CalculateHelper. Thanks to Todd Carnes for reporting this
issue.
- Fixed a number of GCC warnings in the methods CAAPlanetaryPhenomena::K,
CAAPlanetaryPhenomena::Mean, CAAPlanetaryPhenomena::True &
CAAPlanetaryPhenomena::ElongationValue. Thanks to Todd Carnes for reporting
this issue.
- Fixed a GCC warning in the method CAASaturnMoons::HelperSubroutine.
Thanks to Todd Carnes for reporting this issue.
- Fixed a GCC warning in the CAARiseTransitSetDetails constructor. Thanks
to Todd Carnes for reporting this issue.
- Fixed a number of VC 2017 15.7 C++ core guidelines compiler warnings.
- Replaced enum with enum class throughout the code.
24 April 2018
- Updated the documentation to mention that geographical longitudes are
positive west of Greenwich and negative east of Greenwich. Thanks to Spencer
Roff for reporting this issue.
- Did some other minor cleanups of html tags in the documentation.
- Updated the documentation for CAAGlobe::DistanceBetweenPoints to refer
to all its parameters.
v1.95 (19 April 2018)
- Updated references to CAARiseTransitSet::Calculate in the documentation.
Thanks to Roger House for reporting this issue.
- Updated the sample code for CAARiseTransitSet::Calculate in the
documentation which demonstrates an edge case. Thanks to Roger House for
reporting this issue.
19 March 2018
v1.94 (3 March 2018)
- Fixed some compiler warnings on LLVM 9 on XCode on Mac OS in AATest.cpp
when calling PrintSunAndMoonInfo2. Thanks to Michael McLaughlin for
reporting this issue.
v1.93 (2 March 2018)
- Fixed a transcription bug in the CAAPrecession::PrecessEquatorial
method. The "0.017998*tcubed" term was incorrectly using "0.017988*tcubed"
when calculating "sigma". Thanks to Michael McLaughlin for reporting this
bug. The errors were so small that the values from the worked example of
21.b from the book ended up giving the same results. If a longer timespan
was used for the example instead of the 28 years then the errors would have
been easier to spot from the incorrect terms. Hopefully this is the last
transcription error in this method!
30 January 2018
v1.92 (20 January 2018)
v1.91 (1 August 2017)
- Fixed up alignment of lookup tables in AAMercury.cpp module.
- Fixed up alignment of lookup tables in AAVenus.cpp module.
- Fixed up alignment of lookup tables in AAEarth.cpp module.
- Fixed up alignment of lookup tables in AAMars.cpp module.
- Fixed up alignment of lookup tables in AAJupiter.cpp module.
- Fixed up alignment of lookup tables in AASaturn.cpp module.
- Fixed up alignment of lookup tables in AAUranus.cpp module.
- Fixed up alignment of lookup tables in AANeptune.cpp module.
- Fixed up alignment of lookup tables in AAPluto.cpp module.
- Fixed up alignment of lookup tables in AAMoon.cpp module.
- Lookup tables in AAELPMPP02.cpp now consistently use lowercase "e" when
declaring values in lookup tables.
v1.90 (30 July 2017)
- AA+ now includes complete support for the ELP/MPP02 theory (ftp://cyrano-se.obspm.fr/pub/2_lunar_solutions/2_elpmpp02/)
in addition to the ELP2000-82B theory (http://cdsweb.u-strasbg.fr/cgi-bin/qcat?VI/79/)
and truncated ELP2000 theory as presented in Meeus's book.
This theory is the most up to date version of the ELP Lunar theory. It
includes fits to the JPL Ephemerides of DE405 & DE406, LLR (Lunar Laser
Ranging) as well as the Nominal model used in ELP/MPP02. The full ELP/MPP02 theory is implemented by the new
AAELPMPP02.cpp/h files included in the AA+ download. This new class in AA+ to
support ELP/MPP02 has been machine generated by parsing the ELP/MPP02 files with
a custom C++ app to generate the new header and source modules. The results
have been comprehensively spot checked against the ELP/MPP02 test values
provided in the ELP/MPP02 files. The AA+ implementation is based in part
on a C# implementation of the theory at
https://sourceforge.net/projects/astromony/files/ as well as a C
implementation in GAL (General Astrodynamics Library) by Paul Willmott at
http://www.amsat-bda.org/GAL_Home.html. Similar to the ELP2000-82b theory the results
are returned in the
equator and equinox of J2000. Client code is free to use the CAAPrecession class to
precess the coordinates to the required reference frame. Please note that if you
want to compile AA+ to not pull in a dependency on the new and quite large
ELP/MPP02 module, then you can define the preprocessor value
"AAPLUS_NO_ELPMPP02" in your project. With this
addition AA+ is now 27.7 Megabytes and 377 thousand lines of C++ source
code. Testing shows the time taken to call
CAAELP2000::EclipticRectangularCoordinatesJ2000 on my 3.2GHz Core i7
processor is about c. 1ms while the call to the new
CAAELPMPP02::EclipticRectangularCoordinatesJ2000 method including returning
the derivatives takes c. 5ms. From
the ELP/MPP02 paper, the longitude and latitude is three times more accurate
than ELP2000-82B and the distance is eight times more accurate. For the
interval +1950 to +2060, there is reported accuracy of 0.06 arc seconds in
longitude, 0.003 arc seconds in latitude and 4 meters in distance.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data to 1st June 2017.
- Updated the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds to Jan 2026.
- Removed unnecessary SECOND_2_RAD define in AAELP2000.cpp module.
- Updated various CAAELP2000 methods to use "const" parameters.
v1.80 (15 May 2017)
- Fixed an issue in CAAPhysicalSun::Calculate where the value "eta" would
sometimes not be returned in the correct quadrant. Thanks to Alexandru Garofide
for reporting this issue.
v1.79 (27 April 2017)
- Revisited the fix for interpolating RA values in the CAARiseTransitSet class
which was made on 28 March 2009. This new fix should resolve this issue for
good. Thanks to Gudni G. Sigurdsson for reporting this bug.
23 April 2017
- Updated the documentation for CAAPrecession::AdjustPositionUsingMotionInSpace
to clarify the units used. Thanks to Matthew Prowse for reporting this issue.
v1.78 (19 February 2017)
- Fixed a bug in the CAADynamicalTime::UTC2TT & CAADynamicalTime::TT2UTC
methods where the code would incorrectly use BaseMJD instead of JD when determining
if the date is in the valid range of UTC. Thanks to Luigi Candurro for reporting
this bug.
v1.77 (18 February 2017)
- Fixed a transcription error on the DeltaT value for 1 May 2015. The correct
value is 67.8012 instead of 67.8011. Thanks to Luigi Candurro for reporting
this error.
- Fixed a number of transcription errors on the predicted DeltaT values from
2019.75 to 2025.75. Thanks to Luigi Candurro for reporting these errors.
- CAADynamicalTime::TT2UTC is now implemented as TT2UT1 for date ranges prior
to 1 January 1961 and 500 days after the last leap second (which is currently
1 January 2017). Also CAADynamicalTime::UTC2TT is now implemented as UT12TT
for date ranges prior to 1 January 1961 and 500 days after the last leap second.
These changes address problems where these two methods would end up using a
constant offset between UTC and TT for dates away from the current epoch. This
problem was discovered while calculating rise, transit and set times for the
Moon in B.C.E years. Thanks to Luigi Candurro for prompting this update.
- Reworked the CAADate::SetInGregorianCalendar method to use the AfterPapalReform
method.
- Documentation now includes info on CAADate::AfterPapalReform methods. Thanks
to Luigi Candurro for reporting this issue.
v1.76 (12 February 2017)
- Fixed a copy and paste bug in CAASaturnMoons::CalculateHelper in the calculation
of the value mu for the eight moon (Iapetus). Thanks to Cedric Foellmi for reporting
this issue.
v1.75 (11 February 2017)
- Applied a bug fix to CAAMoon::EclipticLatitude and CAAMoon::RadiusVector
along the same lines as the fix to CAAMoon::EclipticLongitude on February 2009.
The bug fix should in fact have been applied to the later two methods. Thanks
to Jeffrey Roe for reporting this issue.
v1.74 (5 February 2017)
v1.73 (16 October 2016)
- Improved the accuracy of CAASun::ApparentEclipticLongitude when the bHighPrecision
parameter is true. The code now uses a new VariationGeometricEclipticLongitude
method which provides a new higher precision method to calculate the effect
of aberration. This takes into account that Earth's orbit around the Sun is
not a purely unperturbed elliptical orbit. This improves the accuracy of the
sample 25.a/b from the book by a couple of hundreds of arc seconds. The results
now are exactly in sync with the results as reported in the book. Thanks to "Pavel"
for reporting this issue.
v1.72 (7 July 2016)
v1.71 (28 April 2016)
- Fixed a bug in the AAVSOP87 modules where an incorrect value was being passed
for the "nTableSize" parameter to the CVSOP87::Calculate and CVSOP87::Calculate_Dash
methods. A spot check of the VSOP87 sample values in AATest.cpp now match exactly
with the published VSOP87 test values. Thanks to "Pavel" for reporting this
issue.
v1.70 (10 April 2016)
- Fixed a bug in the GetSunRiseTransitSet function in the AATest.cpp module
where it incorrectly used Terrestrial Time instead of UTC. The error in the
rise / transit / set times was roughly the difference between TT and UTC at
the time of calculation. For the examples in AATest.cpp which corresponded to
October 2010, DeltaT was 67 seconds. A spot check of the AA+ code against SkyMap
now shows both return the same times accurate to the minute. Thanks to "Pavel"
for reporting this issue.
- Fixed a bug in the GetMoonRiseTransitSet function in the AATest.cpp module
where it incorrectly used Terrestrial Time instead of UTC. The error in the
rise / transit / set times was roughly the difference between TT and UTC at
the time of calculation. For the examples in AATest.cpp which corresponded to
October 2010, DeltaT was 67 seconds. A spot check of the AA+ code against SkyMap
now shows both return the same times accurate to the minute. Thanks to "Pavel"
for reporting this issue.
- Introduction of a new bool CAARiseTransitSetDetails::bTransitValid member
variable. It turns out that celestial objects do not always transit in a 24
hour UTC day. Test code has been added to AATest.cpp to fully exercise all the
cases for the three boolean member variables of bRiseValid, bTransitValid &
bSetValid. Thanks to "Pavel" for reporting this issue.
v1.69 (28 March 2016)
- Fixed two transcription errors in CAAMoonNodes::PassageThroNode. The first
error was the calculation of the D4 local variable which represented 4D in Meeus's
formulae while the second error was in the -E*0.0003*sin(2D - 2M) coefficient.
With these two fixes the calculated time of Example 51.a from Meeus's book is
within 2 seconds of the value he reports. Thanks to Alejandro Krohn for prompting
this bug fix.
v1.68 (27 March 2016)
- Updated CAAEclipses::Calculate to return a bitmask of attributes about the
calculated solar eclipse in CAASolarEclipseDetails::Details. These attributes
correspond to the values as discussed in Meeus's book on Pages 381 & 382.
Thanks to "Pavel" for providing this nice addition.
v1.67 (20 March 2016)
- CAAPrecession::AdjustPositionUsingUniformProperMotion now ensures that the
return value is in the normalized range for right ascension and declination.
- CAAPrecession::AdjustPositionUsingMotionInSpace now ensures that the return
value is in the normalized range for right ascension and declination.
- CAAPrecession::PrecessEquatorial now ensures that the return value is in
the normalized range for right ascension and declination.
- CAAPrecession::PrecessEquatorialFK4 now ensures that the return value is
in the normalized range for right ascension and declination.
- CAAPrecession::PrecessEcliptic now ensures that the return value is in the
normalized range for ecliptic longitude and latitude.
- CAAPrecession::PrecessEquatorialFK4 now adds the Equinox correction to the
returned right ascension. Thanks to "Pavel" for reporting this issue.
- Optimized the code in CAAPrecession::PrecessEquatorial, CAAPrecession::PrecessEquatorialFK4 &
CAAPrecession::PrecessEcliptic.
- Updated the documentation for CAAPrecession::PrecessEquatorialFK4 to be
explicit on what coordinate system the parameters and return value are defined
in. Thanks to "Pavel" for reporting this issue.
- Fixed a transcription error in the CAAGlobe::RhoSinThetaPrime and CAAGlobe::RhoCosThetaPrime
functions. The value 6378149 was being used instead of the correct value 6378140.
Thanks to "Pavel" for reporting this bug.
v1.66 (9 March 2016)
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st February 2016
- Verified the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds
are up to date
- Fixed three transcription bugs in the g_MoonPerigeeApogeeCoefficients3 table.
Thanks to "Pavel" for reporting this bug. A spot check of the True
Perigee parallax values from 1984 to 2026 indicate that this bug did not affect
the calculated distances at least in this time range to a precision of a kilometer
which is well within the claimed accuracy of 12 KM as mentioned in Meeus's book
on page 361.
v1.65 (4 January 2016)
- Major cleanup and refactoring of the ELP2000-82b code. The new reimplementation
should prove faster and easier to maintain going forward.
- Updated copyright details
v1.64 (31 December 2015)
- AA+ now includes complete support for the ELP2000-82B theory (http://cdsweb.u-strasbg.fr/cgi-bin/qcat?VI/79/)
in addition to the truncated ELP2000 theory as presented in Meeus's book. This
theory is used to calculate the position of the Moon. The full ELP2000-82b theory
is implemented by the new AAELP2000.cpp/h files included in the AA+ download.
This new class in AA+ to support ELP2000-82b has been machine generated by parsing
the ELP2000-82b files with a custom C++ app to generate the new header and source
modules. The results have been comprehensively spot checked against the ELP2000-82b
test values provided in the ELP2000-82b files. The AA+ implementation is based
in part on a C translation of the original Fortran source code included with
ELP2000-82b as well as the Libnova
open source library. As the ELP2000-82b theory returns the results in the equator
and equinox of J2000 / FK5 they cannot be directly integrated into the existing
CAAMoon class which returns the values in the equator and equinox of the date.
Client code is free to use the CAAPrecession class to precess the coordinates
to the required reference frame. Please note that if you want to compile AA+
to not pull in a dependency on the new and quite large ELP2000-82b module, then
you can define the preprocessor value "AAPLUS_ELP2000_NO_HIGH_PRECISION"
in your project. With this addition AA+ is now 23.6 Megabytes and 330 thousand
lines of C++ source code.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st October 2015
- Verified the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds
are up to date
v1.63 (16 September 2015)
- AA+ now includes complete support for the VSOP87 theory (ftp://cdsarc.u-strasbg.fr/pub/cats/VI/81/)
in addition to the truncated VSOP87 theory as presented in Meeus's book. This
theory is used throughout the AA+ codebase to calculate the positions of the
planets and the Sun. The full VSOP87 theory is implemented by the new AAVSOP*.cpp/h
files included in the AA+ download. For a good introduction to VSOP87, please
see https://en.wikipedia.org/wiki/VSOP_(planets).
The classes in AA+ to support VSOP87 have been machine generated by parsing
the VSOP87 files with a custom C++ app to generate the new header and source
modules. The results have been comprehensively spot checked against the VSOP87
test values provided in the "vsop87.chk" file in the VSOP87 files.
Each VSOP theory (VSOP87, VSOP87A, VSOP87B, VSOP87C, VSOP87D, & VSOP87E)
for each of the objects (Sun, Mercury, Venus, Earth, Earth-Moon Barycenter,
Mars, Jupiter, Saturn, Uranus & Neptune) are implemented in separate header
and source modules so client applications can decide which modules to include.
The existing AA+ codebase will now optionally call into these new modules as
required. With this addition AA+ has gone from 840 Kilobytes and 16 thousand
lines of C++ source code library to 20 Megabytes and 291 thousand lines of a
C++ source code library. In one fell swoop I have almost doubled the amount
of open source code I distribute on my web site. Please note that if you want
to compile AA+ to not pull in a dependency on the new and quite large VSOP87
modules, then you can define the preprocessor value "AAPLUS_VSOP87_NO_HIGH_PRECISION"
in your project. This will revert the AA+ classes to just depend on the truncated
VSOP87 theory as presented in Meeus's book.
- Updated the CAACoordinateTransformation::MapTo0To360Range to use the fmod
C runtime function.
- Updated the CAACoordinateTransformation::MapTo0To24Range to use the fmod
C runtime function.
- Added new CAACoordinateTransformation::MapTo0To2PIRange and MapToMinus90To90Range
methods.
- CAAAberration::EclipticAberration, EarthVelocity and EquatorialAberration
now include a "bool bHighPrecision" parameter which if set to true
means the code uses the full VSOP87 theory rather than the truncated theory
as presented in Meeus's book.
- CAAEarth::EclipticLongitude, EclipticLatitude, RadiusVector, EclipticLongitudeJ2000 &
EclipticLatitudeJ2000 now include a "bool bHighPrecision" parameter
which if set to true means the code uses the full VSOP87 theory rather than
the truncated theory as presented in Meeus's book.
- CAAElliptical::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAEquationOfTime::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- All the methods in CAAEquinoxesAndSolstices now include a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAGalileanMoons::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAJupiter::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAAMars::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAAMercury::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAANearParabolic::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAANeptune::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAAParabolic::Calculate now includes a "bool bHighPrecision" parameter
which if set to true means the code uses the full VSOP87 theory rather than
the truncated theory as presented in Meeus's book.
- CAAPhysicalJupiter::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAPhysicalMars::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAPhysicalMoon::CalculateSelenographicPositionOfSun, AltitudeOfSun, TimeOfSunrise
and TimeOfSunset methods now include a "bool bHighPrecision" parameter
which if set to true means the code uses the full VSOP87 theory rather than
the truncated theory as presented in Meeus's book.
- CAAPhysicalSun::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAASaturn::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAASaturnMoons::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAASaturnRings::Calculate now includes a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- All the methods in CAASun now include a "bool bHighPrecision"
parameter which if set to true means the code uses the full VSOP87 theory rather
than the truncated theory as presented in Meeus's book.
- CAAUranus::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- CAAVenus::EclipticLongitude, EclipticLatitude & RadiusVector now include
a "bool bHighPrecision" parameter which if set to true means the code
uses the full VSOP87 theory rather than the truncated theory as presented in
Meeus's book.
- Verfied the code compiles cleanly on Visual C++ 2015.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st July 2015.
- Updated the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds
to 1st January 2025.
v1.62 (12 July 2015)
- Fixed a bug in CAAElliptical::Calculate when calculating values for the
position of the Sun. The values returned by this method are now consistent with
those returned using the methods of the CAASun class, the planetarium program
SkyMap and the JPL HORIZON's web site. The errors were of the order of 4 arc
seconds in declination and 1.5 seconds of Right ascension for modern times.
I have also taken the opportunity to optimize the code in this method. With
these changes the errors are now down to 0.5 seconds of an angle in declination
and right ascension. Thanks to Marko Peric for reporting this bug.
v1.61 (5 July 2015)
- U1 (the Saturnicentric longitude of the Sun) and U2 (the Saturnicentic longitude
of the Earth) are now returned in CAASaturnRings::Calculate.
- Fixed a bug in the calculation of CAASaturnRingDetails::DeltaU in the method
CAASaturnRings::Calculate where for some date ranges the value would end up
greater than 180 degrees. The book indicates that this value should never be
more than 7 degrees. The issue was related to subtraction of two angles to obtain
an absolute elongation value between the two. By definition this value should
never be greater than 180 degrees. The bug occurred between the dates of June
3rd 2024 and July 28th 2024 and December 1st 2024 and February 12 2025. Thanks
to Frank Vergeest for reporting this bug.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st April 2015.
v1.60 (29 March 2015)
- Updated copyright details.
- Updates to the html documentation to clarify the units used in some of the
CAACoordinateTransaction methods. Thanks to "Forrest" for reporting these issues.
- Fixed up some variable initializations around the use of modf. Thanks to
Arnaud Cueille for reporting this issue.
v1.59 (15 February 2015)
v1.58 (12 November 2014)
- Updated copyright details.
- Fixed two transcription bugs in the CAAPrecession::PrecessEquatorial method.
The"0.000344*T" term was incorrectly using "0.0000344*T"
when calculating "sigma" and the "0.000139*Tsquared" term
was incorrectly using "0.000138*Tsquared" when calculating "zeta".
Thanks to Erik Grosse for reporting this bug. The errors were so small that
the values from the worked example of 21.b from the book ended up giving the
same results. If a longer timespan was used for the example instead of the 28
years then the errors would have been easier to spot with the incorrect terms.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st October 2014.
- Updated the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds
to 1st January 2024.
v1.57 (28 October 2013)
- Renamed the method CAAEquinoxesAndSolstices::SpringEquinox to NorthwardEquinox
to avoid the northern hemisphere bias in the name. Thanks to Marius Gleeson
for prompting this update.
- Renamed the method CAAEquinoxesAndSolstices::AutumnEquinox to SouthwardEquinox
to avoid the northern hemisphere bias in the name. Thanks to Marius Gleeson
for prompting this update.
- Renamed the method CAAEquinoxesAndSolstices::SummerSolstice to NorthernSolstice
to avoid the northern hemisphere bias in the name. Thanks to Marius Gleeson
for prompting this update.
- Renamed the method CAAEquinoxesAndSolstices::WinterSolstice to SouthernSolstice
to avoid the northern hemisphere bias in the name. Thanks to Marius Gleeson
for prompting this update.
- The method CAAEquinoxesAndSolstices::LengthOfSpring now takes a boolean
to indicate which hemisphere the observer is located in. Previously the code
assumed a northern hemisphere bias. Thanks to Marius Gleeson for prompting this
update.
- The method CAAEquinoxesAndSolstices::LengthOfSummer now takes a boolean
to indicate which hemisphere the observer is located in. Previously the code
assumed a northern hemisphere bias. Thanks to Marius Gleeson for prompting this
update.
- The method CAAEquinoxesAndSolstices::LengthOfAutumn now takes a boolean
to indicate which hemisphere the observer is located in. Previously the code
assumed a northern hemisphere bias. Thanks to Marius Gleeson for prompting this
update.
- The method CAAEquinoxesAndSolstices::LengthOfWinter now takes a boolean
to indicate which hemisphere the observer is located in. Previously the code
assumed a northern hemisphere bias. Thanks to Marius Gleeson for prompting this
update.
- Updated the sample app to print out a table of information related to Equinoxes
and Solstices.
- Addition of a CAADynamicalTime::TT2UTC method which converts from TT to
UTC.
- Addition of a CAADynamicalTime::UTC2TT method which converts from UTC to
TT.
- Addition of a CAADynamicalTime::TT2TAI method which converts from TT to
TAI.
- Addition of a CAADynamicalTime::TAI2TT method which converts from TAI to
TT.
- Addition of a CAADynamicalTime::TT2UT1 method which converts from TT to
UT1.
- Addition of a CAADynamicalTime::UT12TT method which converts from UT1 to
TT.
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st September 2013.
- Addition of a CAADynamicalTime::UT1MinusUTC method which returns UT1 - UTC.
- Fixed a number of GCC compiler warnings in AATest.cpp.
v1.56 (8 September 2013)
- Fixed a bug in the calculation of HeliocentricEclipticLongitude and HeliocentricEclipticLatitude
in CAAParabolic::Calculate. Thanks to Joe Novak for reporting this problem.
- Fixed a bug in the calculation of HeliocentricEclipticLongitude and HeliocentricEclipticLatitude
in CAANearParabolic::Calculate. Thanks to Joe Novak for reporting this problem.
v1.55 (4 August 2013)
- Updated copyright details
- Updated the observed DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.data
to 1st April 2013
- Updated the predicted DeltaT values from
http://maia.usno.navy.mil/ser7/deltat.preds
to 1st January 2023
- Fixed a transcription error in the third coefficient used to calculate the
L0 term for the ecliptic longitude of Mercury. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the fifth coefficient used to calculate the
L2 term for the ecliptic longitude of Mercury. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the second coefficient used to calculate
the L4 term for the ecliptic longitude of Mercury. Thanks to Isaac Clark for
reporting this issue.
- Fixed a transcription error in the ninth coefficient used to calculate the
B0 term for the ecliptic latitude of Mercury. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the third coefficient used to calculate the
B0 term for the ecliptic latitude of Venus. Thanks to Isaac Clark for reporting
this issue. Spot tests indicate that this change only affected the ecliptic
latitude in the sixth decimal place.
- Fixed a transcription error in the twenty first coefficient used to calculate
the L0 term for the ecliptic longitude of Earth. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the sixteenth coefficient used to calculate
the L1 term for the ecliptic longitude of Earth. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the second coefficient used to calculate
the B2 term for the ecliptic latitude of Mars. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the third coefficient used to calculate the
B2 term for the ecliptic latitude of Mars. Thanks to Isaac Clark for reporting
this issue.
- Fixed a transcription error in the thirty ninth coefficient used to calculate
the L0 term for the ecliptic longitude of Jupiter. Thanks to Isaac Clark for
reporting this issue.
- Fixed a transcription error in the sixteenth coefficient used to calculate
the R1 term for the ecliptic radius vector of Jupiter. Thanks to Isaac Clark
for reporting this issue.
- Fixed a transcription error in the twenty ninth coefficient used to calculate
the B2 term for the ecliptic latitude of Saturn. Thanks to Isaac Clark for reporting
this issue. Spot tests indicate that this change only affected the ecliptic
latitude in the twelfth decimal place.
- Fixed a transcription error in the second coefficient used to calculate
the B0 term for the ecliptic latitude of Neptune. Thanks to Isaac Clark for
reporting this issue. Spot tests indicate that this change only affected the
ecliptic latitude in the sixth decimal place.
v1.54 (27 October 2012)
- Fixed a buffer initialization bug in PrintMoonPhase function in AAAtest.cpp.
This was resulting in the moon phase ASCII diagrams to not show correctly on
Unix terminals.
- I now have a Ubuntu 12.10 VM setup which allows the code to be fully tested
on a Unix OS going forward. I am using the Code::Blocks IDE to provide a familiar
development experience for this Visual Studio veteran!
- Fixed a transcription bug in CAAElementsPlanetaryOrbit::SaturnLongitudePerihelion.
The correct coefficient for multiplying by T should have been 1.9637613 instead
of 1.19637613. In the worked example of 31.a from Meeus's book, he uses the
date June 24 2065. With this bug now eliminated the value returned is now 94.34
degrees instead of 93.84 degrees for this date. Basically the incorrect coefficient
would have returned a value too small by 0.77 degrees for every Julian century
after the epoch J2000.0 = 2000 January 1.5 TD = JDE 2451545.0. Thanks to Sudhakar
Gumparthi for reporting this bug.
v1.53 (13 October 2012)
- Updated the sample app to show the rise, transit and set details for the
Moon and Sun at the North Pole for 31 October 2012. This shows that the Sun
does not rise or set on that day and transits below the horizon at 11:43:36
UTC and the Moon also does not rise or set and transits above the horizon at
00:35:12 UTC. Thanks to Michael Iverson for prompting this check.
- Removed need for std::string class from AATest.cpp module.
- Fixed a small typo in the AARiseTransitSet.cpp history comments. Thanks
to Michael Iverson for reporting this issue.
- Fixed a typo in the spelling of Coefficient throughout the AADynamicalTime.cpp
module. Thanks to Michael Iverson for reporting this issue.
v1.52 (12 October 2012)
- Refactored the code in CAARiseTransitSet::Calculate.
- Added comments to the documentation for CAARiseTransitSet::Calculate on
the potential for returning times outside of the UTC date requested. Thanks
to Rob Phillips for reporting this issue.
v1.51 (5 May 2012)
- Updated the sample app to print out the rise transit and set times for the
Moon and Sun as well as a ASCII graphic of the moon phase for the month of April
2012 for the location of Wexford, Ireland. Thanks to Roger Dahl for providing
this nice addition to AA+.
v1.50 (2 May 2012)
- To further improve the accuracy of the CAADynamicalTime::DeltaT method,
the code now uses a lookup table between the dates of 1 February 1973 to 1 April
2012 (for observed values) and predicted values from April 2012 till April 2015.
These values are as provided by IERS Rapid Service/Prediction Center at
http://maia.usno.navy.mil/ser7/deltat.data
and http://maia.usno.navy.mil/ser7/deltat.preds.
This lookup table will of course need to be kept up to date as IERS update this
information. As currently coded there is a single discontinuity of c. one second
in early April 2015. At this point
http://maia.usno.navy.mil/ser7/deltat.preds
indicates an error value for DeltaT of about 0.9 seconds anyway.
- A new CAADynamicalTime::CumulativeLeapSeconds has been provided. This method
takes as input the Julian Day value and returns the cumulative total of Leap
seconds which have been applied to this point. For more information about leap
seconds please see http://en.wikipedia.org/wiki/Leap_second.
Using this method you can now implement code which converts from Terrestial
Time to Coordinated Universal time as follows:
double TerrestialTime
= some calculation using AA+ algorithms(JD);
double DeltaT = CAADynamicalTime::DeltaT(JD);
double UniversalTime1 = TerrestialTime - DeltaT/86400.0; //The time of the
event using the UT1 time scale
double TerrestialAtomicTime = TerrestialTime
- (32.184/86400.0); //The time of the event using the TAI time scale
double
CumulativeLeapSeconds = CAADynamicalTime::CumulativeLeapSeconds(JD);
double
CoordinatedUniversalTime = (DeltaT - CumulativeLeapSeconds - 32.184)/86400.0
+ UniversalTime1; //The time of the event using the UTC time scale
v1.49 (1 May 2012)
v1.48 (18 March 2012)
- Updated copyright details.
- All global "g_*" tables are now const. Thanks to Roger Dahl for
reporting this issue when compiling AA+ on ARM.
v1.47 (10 September 2011)
- Fixed a bug in the calculation of the "F" local variable which
represents the Moon's argument of latitude in the CAAMoonPhases::TruePhase method.
Thanks to Andrew Hammond for reporting this bug.
v1.46 (8 May 2011)
- Updated copyright details.
- Fixed a compilation issue on GCC where size_t was undefined in various methods.
Thanks to Carsten A. Arnholm and Andrew Hammond for reporting this bug.
- Updated CAARiseTransitSet::Calculate method to return information for circumpolar
object rather than returning bValid = false for this type of object. In the
case of a circumpolar object, the object does not rise or set on the day in
question but will of course transit at a specific time. This change means that
you do not need to recall the method with a declination value to get the transit
time. In addition if an object never rises or sets, the method will still return
the transit time even though it occurs below the horizon by setting the bTransitAboveHorizon
value to false. Note that this means that the "Transit" value will
now always include a valid value. Also the method has been renamed to Calculate.
Thanks to Andrew Hood for prompting this update
- Fixed a bug in CAAGalileanMoons::CalculateHelper where the periodic terms
in longitude for the four satellites (Sigma1 to Sigma4) were not being converted
to radians prior to some trigonometric calculations. Thanks to Thomas Meyer
for reporting this bug.
v1.45 (26 November 2010)
- CAARefraction::RefractionFromApparent now returns a constant refraction
value for all altitudes below a certain limit. Thanks to mehrzad khoddam for
prompting this update.
- CAARefraction::RefractionFromTrue now returns a constant refraction value
for all altitudes below a certain limit. Thanks to mehrzad khoddam for prompting
this update.
v1.44 (4 July 2010)
- Fixed various compiler warnings and errors when the code is compiled using
C++ Builder. Thanks to Neil Bingham for reporting these issues.
- Removed unnecessary "Longitude" parameter from method CAAParallax::Ecliptic2Topocentric.
v1.43 (3 July 2010)
- Fixed a bug in the g_MoonPerigeeApogeeCoefficients3 table. The "+0.013*cos(4D
- 2F)" term was incorrectly using "+0.013*cos(4D - 20F)". The
error in the lunar distance because of this coding error is of the order of
1 to 2 KM. Thanks to Thomas Meyer for reporting this bug.
- Fixed a bug in the g_MoonPerigeeApogeeCoefficients1 table. The "D+2M-0.0010"
term was incorrectly using "D+2M-0.0011". Thanks to Thomas Meyer for
reporting this bug.
v1.42 (21 May 2010)
- Fixed spelling mistakes in AATest.cpp for "Palomar Observatory".
Thanks to Leighton Paul for reporting the fact that the change for v1.41 was
still spelt incorrectly.
v1.41 (10 May 2010)
- Updated copyright details.
- Minor update to CAAPhysicalMoon::CalculateTopocentric to put a value in
a variable for easier debugging
- Fixed up unused variable warnings in AATest.cpp
- Fixed spelling mistakes in AATest.cpp for "Palomor Observatory"
- The CAAEllipticalObjectDetails::AstrometricGeocenticRA value is now known
as AstrometricGeocentricRA. Thanks to Scott Marley for reporting this spelling
mistake
- The CAANearParabolicObjectDetails::AstrometricGeocenticRA value is now known
as AstrometricGeocentricRA. Thanks to Scott Marley for reporting this spelling
mistake
- Removed the unused Delta parameter from the CAANutation::NutationInDeclination
method. Thanks to Thomas Meyer for reporting this issue.
v1.40 (30 December 2009)
- Updated the sample app to pull in cstdio instead of cstdio.h. Thanks to
Hugo Mildenberger for suggesting this update.
- Fixed a number of GCC compiler warnings in AATest.cpp. Thanks to Hugo Mildenberger
for suggesting this update.
- The CMake file "CMakeLists.txt" included in the download has been
updated to work correctly on Gentoo Linux. Again thanks to Hugo Mildenberger
for this update.
v1.39 (24 November 2009)
- Updated the sample app and documentation to provide better guidance on how
to calculate the times of Moon rise, transit and set. Thanks to Mehmet Rauf
Geden for reporting this bug.
v1.38 (3 October 2009)
- Fixed a copy and paste gremlin in the CAAEarth::EclipticLatitude method
where it incorrectly used B2, B3 & B4 coefficient terms for Venus. Due to
how this bug occurred, the magnitude of the error from it would increase as
the date deviated from the year 2000. Thanks to Isaac Salzman for reporting
this bug.
v1.37 (30 April 2009)
- Fixed a bug where the M values in CAARiseTransitSet::Calculate were not being
constrained to between 0 and 1. Thanks to Matthew Yager for reporting this issue.
v1.36 (28 March 2009)
- Fixed a bug in CAARiseTransitSet::Calculate where the cyclical nature of a RA
value was not taken into account during the interpolation. In fact Meeus in
the book even refers to this issue as "Important remarks, 2." on page
30 of the second edition. Basically when interpolating RA, we need to be careful
that the 3 values are consistent with respect to each other when any one of
them wraps around from 23H 59M 59S around to 0H 0M 0S. In this case, the RA
has increased by 0H 0M 1S of RA instead of decreasing by 23H 59M 59S. Thanks
to Corky Corcoran and Danny Flippo for both reporting this issue.
- Fixed a bug in the calculation of the parameter "H" in CAARiseTransitSet::Calculate
when calculating the local hour angle of the body for the time of transit.
v1.35 (16 March 2009)
- Fixed a bug in CAAParabolic::Calculate(double JD, const CAAParabolicObjectElements&
elements) in the calculation of the heliocentric rectangular ecliptical, the
heliocentric ecliptical latitude and the heliocentric ecliptical longitude coordinates.
The code incorrectly used the value "omega" instead of "w"
in its calculation of the value "u". Unfortunately there is no worked
examples in Jean Meeus's book for these particular values, hence resulting in
my coding errors. Thanks to Jay Borseth for reporting this bug.
- Fixed a bug in CAANearParabolic::Calculate(double JD, const CAANearParabolicObjectElements&
elements) in the calculation of the heliocentric rectangular ecliptical, the
heliocentric ecliptical latitude and the heliocentric ecliptical longitude coordinates.
The code incorrectly used the value "omega" instead of "w"
in its calculation of the value "u". Unfortunately there is no worked
examples in Jean Meeus's book for these particular values, hence resulting in
my coding errors. Thanks to Jay Borseth for reporting this bug.
v1.34 (12 February 2009)
- Fixed a seemingly copy and paste bug in CAAMoon::EclipticLongitude. The
layout of the code to calculate the "ThisSigma" value was incorrect.
The terms involving any value of M was being multiplied by E. This was incorrect
as documented at the bottom of page 338 from the second edition of Meeus's book.
The correct logic is to multiple only terms which involve +1M or -1M by E and
to multiple any terms which involved 2M or -2M by E*E. With the bug fixed the
worked example 47.a from the book now gives: 133.16726428105474 degrees. This
is a much closer result to the value as reported in the book which is 133.167265.
The previous buggy code was giving the value of 133.16726382897039 degrees for
the Moons apparent Longitude. The error in this example is 0.001627 arc seconds
of a degree. This error value is well within the actual reported accuracy of
10 arc seconds for the code, but you would expect this error to increase as
the eccentricity of earths orbit increases. Thanks to Neoklis Kyriazis for reporting
this bug.
v1.33 (7 February 2009)
- Fixed a seemingly copy and paste bug in CAAMoonPerigeeApogee::TruePerigee.
The layout of the code to accumulate the "Sigma" value was incorrect.
The terms involving T (e.g. +0.00019*T, -0.00013*T etc were adding these terms
to the argument of the sin incorrectly. With the bug fixed the worked example
50.a from the book gives: 2447442.3543003569 JDE or 1988 October 7 at 20h:30m:11.5
seconds. The previous buggy code was giving the same value of 2447442.3543003569,
but this would be the case because T was a small value in the example. You would
expect the error in the calculated to be bigger as the date departs from the
Epoch 2000.0. Thanks to Neoklis Kyriazis for reporting this bug.
- Optimized the layout of the MoonCoefficient1 structure in the AAMoon.cpp
module by making all elements integers instead of doubles.
- Optimized the layout of the PlutoCoefficient1 structure in the AAPluto.cpp
module by making all elements integers instead of doubles.
- Updated the static version of CAADate::DaysInMonth to compile cleanly using
code analysis.
- Updated copyright details.
v1.32 (11 November 2008)
- Fixed a bug in CAAElliptical::Calculate(double JD, const CAAEllipticalObjectElements&
elements) in the calculation of the heliocentric rectangular ecliptical, the
heliocentric ecliptical latitude and the heliocentric ecliptical longitude coordinates.
The code incorrectly used the value "omega" instead of "w"
in its calculation of the value "u". Unfortunately there is no worked
examples in Jean Meeus's book for these particular values, hence resulting in
my coding errors. Thanks to Carsten A. Arnholm for reporting this bug.
v1.31 (26 July 2008)
- Changed name of CAASun::EclipticRectangularCoordinatesMeanEquinox to CAASun::EquatorialRectangularCoordinatesMeanEquinox
to refer to the fact that it returns equatorial coordinates instead of ecliptic
coordinates. Thanks to Frank Trautmann for reporting this issue
- Updated copyright details.
- zip file now ships with a VC 2005 solution instead of a VC 6 solution file.
- Code now compiles cleanly using Code Analysis (/analyze)
v1.30 (29 January 2007)
- The static version of the CAADate::Set method has been renamed to DateToJD
to avoid any confusion with the other Set methods. Thanks to Ing. Taras Kapuszczak
for reporting this issue.
- The method CAADate::InGregorianCalendar has now also been renamed to the
more appropriate CAADate::AfterPapalReform.
- Reinstated the bGregorianCalendar parameter for the CAADate constructors
and Set methods.
- Changed the parameter layout for the static version of CAADate::DaysInMonth
- Addition of a CAADate::InGregorianCalendar method.
- Addition of a CAADate::SetInGregorianCalendar method.
- Reworked implementation of GregorianToJulian method.
- Reworked implementation of JulianToGregorian method.
v1.29 (26 January 2007)
- After a bug report from Ing. Taras Kapuszczak that a round trip of the date
25 January 100 as specified in the Gregorian calendar to the Julian day number
and then back again produces the incorrect date 26 January 100, I've spent some
time looking into the 2 key Meeus Julian Day algorithms. It seems that the algorithms
which converts from a Calendar date to JD works ok for propalactive dates, but
the reverse algorithm which converts from a JD to a Calendar date does not.
Since I made the change in behaviour to support propalactive Gregorian dates
to address issues with the Moslem calendar (and since then I have discovered
further unresolved bugs in the Moslem calendar algorithms and advised people
to check out my DTime+
library instead), I am now reverting these changes so that the date algorithms
are now as presented in Meeus's book. This means that dates after 15 October
1582 are assumed to be in the Gregorian calendar and dates before are assumed
to be in the Julian calendar. This change also means that some of the CAADate
class methods no longer require the now defunct "bool" parameter to
specify which calendar the date represents. As part of the testing for this
release verification code has been added to AATest.cpp to test all the dates
from JD 0 (i.e. 1 January -4712) to a date long in the future. Hopefully with
this verification code, we should have no more reported issues with the class
CAADate. Again if you would prefer a much more robust and comprehensive Date
time class framework, don't forget to check out the authors
DTime+ library.
- Optimized CAADate constructor code
- Provided a static version of CAADate::DaysInMonth() method
- Discovered an issue in CAADate::JulianToGregorian. It seems the algorithm
presented in the book to do conversion from the Julian to Gregorian calendar
fails for Julian dates before the Gregorian calendar reform in 1582. I have
sent an email to Jean Meeus to find out if this is a bug in my code or a deficiency
in the algorithm presented. Currently the code will assert in this function
if it is called for a date before the Gregorian reform.
- Changed name of CAAMoonIlluminatedFraction::IluminatedFraction to CAAMoonIlluminatedFraction::IlluminatedFraction.
Thanks to Ing. Taras Kapuszczak for reporting this typo!.
v1.28 (25 January 2007)
- Fixed a minor compliance issue with GCC in the AACoordinateTransformation.h
to do with the declaration of various methods. Thanks to Mathieu Peyréga for
reporting this issue.
v1.27 (17 January 2007)
- Updated copyright details.
- Addition of a AAPLUS_EXT_CLASS preprocessor macro to allow the code to be
more easily added to an extension DLL. Thanks to Mathieu Peyréga for suggesting
this update.
- Changed name of CAASun::ApparentEclipticLongtitude to CAASun::ApparentEclipticLongitude.
Thanks to Mathieu Peyréga for reporting this typo!.
v1.26 (29 November 2006)
- Fixed a bug where CAAEclipticalElements::Calculate and CAAEclipticalElements::FK4B1950ToFK5J2000
would return the incorrect value for the reduced inclination when the initial
inclination value was > 90 degrees.
- Addition of a new module called CAANearParabolic. This new class provides
functionality for orbits which can be best modeled as near parabolic i.e. where
the eccentricity is between 0.98 and 1.02. Chapter 35 in the book includes support
for calculating Near-parabolic orbits, but the code is provided in BASIC and
the algorithm as presented has problems converging when the eccentricity is
close to 1. Instead the algorithms used in this new module are based upon the
worked examples which Paul Schlyter has provided at
http://stjarnhimlen.se/comp/tutorial.html#16.
23 October 2006
- Minor update to fix some incorrect book mark links in the documentation.
v1.25 (5 June 2006)
- Fixed a bug in CAAElliptical::Calculate(double JD, EllipticalObject object)
where the correction for nutation was incorrectly using the Mean obliquity of
the ecliptic instead of the true value. The results from the test program now
agree much more closely with the example Meeus provides which is the position
of Venus on 1992 Dec. 20 at 0h Dynamical Time. I've also checked the positions
against the JPL Horizons web site and the agreement is much better. Because
the True obliquity of the Ecliptic is defined as the mean obliquity of the ecliptic
plus the nutation in obliquity, it is relatively easy to determine the magnitude
of error this was causing. From the chapter on Nutation in the book, and specifically
the table which gives the cosine coefficients for nutation in obliquity you
can see that the absolute worst case error would be the sum of the absolute
values of all of the coefficients and would have been c. 10 arc seconds of degree,
which is not a small amount!. This value would be an absolute worst case and
I would expect the average error value to be much much smaller (probably much
less than an arc second). Anyway the bug has now been fixed. Thanks to Patrick
Wong for pointing out this rather significant bug.
18 May 2006
- Jean Meeus has confirmed that there is definitely a bug in the Moslem calendar
algorithms which make up the CAAMoslemCalendar class. He is not the original
author of these algorithms, so he was unable to explain why they fail for some
dates. As previously mentioned please use the DTime+
classes to avoid this issue.
v1.24 (12 May 2006)
- Updated the documentation to use the same style as the web site.
- Fixed a transcription error in the third coefficient used to calculate the
R0 term for the radius vector of Mercury. Thanks to John Kruso for reporting
this issue.
- Fixed a transcription error in the third coefficient used to calculate the
R1 term for the radius vector of Mercury. Thanks to John Kruso for reporting
this issue.
- Updated copyright details.
1 May 2006
- While testing v3.01 of DTime+ I discovered
some bugs in the CAAMoslemCalendar class. Specifically testing some dates by
creating a Moslem date, then converting to a Julian date and then converting
back to the Moslem calendar highlighted some dates which fail this roundtrip
test. If you are serious about developing for the Moslem calendar, then please
use the Moslem calendar support in DTime+ which
uses an independent algorithm for the Moslem calendar which does not have this
problem. I will report this issue to Jean Meeus and possibly have a fix for
it in the next update to AA+.
v1.23 (16 November 2005)
- Fixed a transcription error in the second coefficient used to calculate
the longitude of Mercury. Thanks to "Maurizio" for reporting this
bug.
v1.22 (5 July 2005)
- Fix for a bug to ensure that values returned from CAAEquationOfTime::Calculate
does not return discontinuities. Instead it now returns negative values when
required.
v1.21 (3 June 2005)
- Minor update to "CMakeLists.txt" file to fix a case sensitivity
issue. Thanks to Andrew Maclean for reporting this issue.
v1.20 (2 June 2005)
- Seems the case sensitivity issue fixed in v1.17 was not fixed because I
forgot to update the files in the zip download. Thanks to Andrew Maclean for
reporting this issue.
- A "CMakeLists.txt" file is now included in the download. This file is used
by CMake which is a cross-platform makefile generator. This allows the AA+ code
to be easily compiled on Cygwin, Linux and the usual MSVC compilers. Thanks
to Andrew Maclean for this nice addition.
- Some of the functions in the class "CAACoordinateTransformation"
have been made inline to improve performance.
- Made all structures used by AA+ classes. This is a minor tidy up issue more
than anything. Also ensured all class members are initialized to sane defaults.
v1.19 (13 May 2005)
- Fix for CAADate::Set(double JD, bool bGregorianCalendar) not setting the
m_bGregorianCalendar member variable correctly.
v1.18 (21 April 2005)
- Renamed "AAAberation.cpp" to "AAAberration.cpp" so that
all source code filenames match their corresponding header files. Thanks to
J�rgen Schuck for suggesting this update.
v1.17 (1 February 2005)
- Fixed a case sensitivity problem (at least on Unix systems) related to the
stdafx.h/cpp files. Now filename is all lowercase. Thanks to Mika Heiskanen
for reporting this problem.
- Change the ordering of items in stdafx.h so that you get a clean compile
on gcc. Thanks to Mika Heiskanen for reporting this problem.
- Fixed a problem with the declaration of the variable "Index" in
the function CAADynamicalTime::DeltaT. Thanks to Mika Heiskanen for reporting
this problem.
- Removed usage of MFC from sample app as it is not required.
- Verfied the building of the code on GCC thro the use of Cygwin's port
of GCC.
v1.16 (31 January 2005)
- Fixed a bug in CAAParabolic::Calculate where the JD value was being used
incorrectly in the loop. Thanks to Mika Heiskanen for reporting this problem.
- Fixed a GCC warning in CAADynamicalTime::DeltaT. Thanks to Mika Heiskanen
for reporting this problem.
- Fixed a GCC compiler error related to missing include for memset in AAEclipses.cpp.
Thanks to Mika Heiskanen for reporting this problem.
v1.15 (30 January 2005)
- Replaced all usage of BOOL with bool to aid in cross compiler compatibility.
This also means that all occurences of TRUE and FALSE are replaced with true
and false respectively. Thanks to Mika Heiskanen for reporting this issue.
- cmath header file is now used rather than math.h. Also it now does not use
the #pragma message text based on a define which is MS C specific. Again thanks
to Mika Heiskanen for reporting this issue.
- Now uses asssert instead of the MFC specific ASSERT. Again thanks to Mika
Heiskanen for reporting this issue.
- Addition of a new global header file "AA+.h" which allows you
to include all of the AA+ framework through one header.
- Code now use static_cast's rather than old C-style casts. Again thanks
to Mika Heiskanen for reporting this issue.
- Optimized some of the code in assert's which avoid unitialized variables
when build in release mode. Again thanks to Mika Heiskanen for reporting this
issue.
v1.14 (21 January 2005)
- Fixed a small but important error in the function PhaseAngle(r, R, Delta).
The code was producing incorrect results and raises acos DOMAIN errors and floating
point exceptions when calculating phase angles for the inner planets. Thanks
to MICHAEL R. MEYER for reporting this problem.
v1.13 (31 December 2004)
- Fix for CAAElliptical::MinorPlanetMagnitude where the phase angle was being
incorrectly converted from Radians to Degress when it was already in degrees.
Thanks to Martin Burri for reporting this problem.
v1.12 (10 November 2004)
- Fix for CAADate::Get so that it works correctly for propalactive calendar
dates. The Meeus implementation automatically assumes the Gregorian Calendar
came into effect on 15 October 1582 (JD: 2299161), while the CAADate implementation
has a "m_bGregorianCalendar" value to decide if the date was specified
in the Gregorian or Julian Calendars. This difference means in effect that CAADate
fully supports propalactive versions of both calendar systems. This problem
was discovered when testing the Moslem calendar code which involves a round
trip between Moslem -> Julian -> Gregorian calendars.
v1.11 (15 October 2004)
- bValid variable is now correctly set in CAARiseTransitSet::Calculate if the objects
does actually rise and sets.
v1.10 (17 September 2004)
- Fixed a number of warnings in the code when compiled in VC .Net 2003 with
the "Force conformance in For Loop Scope" compiler option is set.
6 September 2004
- Minor update to the documentation.
6 September 2004
- Minor update to the documentation plus a full spell check!!
v1.09 (15 June 2004)
- Fixed a typo in the calculation of SunLongDash in CAAPhysicalSun::Calculate.
Thanks to Brian Orme for spotting this problem.
v1.08 (31 May 2004)
- Added a missing coefficient to g_L1JupiterCoefficients arrau as used by
CAAJupiter::EclipticLongitude. Thanks to Brian Orme for reporting this problem.
- Added missing g_B5JupiterCoefficients[] in CAAJupiter::EclipticLatitude.
Again thanks to Brian Orme for reporting this problem.
- In CAASaturn::EclipticLongitude the g_L5SaturnCoefficients[] were not included.
Thanks to Brian Orme for reporting this problem.
- In CAASaturn::EclipticLatitude the g_B5SaturnCoefficients[] were not included.
Thanks to Brian Orme for reporting this problem.
- In CAASaturn::RadiusVector the g_R5SaturnCoefficients[] were not included.
Thanks to Brian Orme for reporting this problem.
v1.07 (24 May 2004)
- Fixed a missing break statement in CAAElliptical::Calculate. Thanks to Carsten
A. Arnholm for reporting this bug.
- Also fixed an issue with the calculation of the apparent distance to the
Sun.
27 April 2004
- Minor update to the documentation describing CAAElliptical::MeanMotionFromSemiMajorAxis
V1.06 (22 February 2004)
- Calculation of semi durations for eclipses in CAAEclipses is now calculated
only when required
V1.05 (22 February 2004)
- Fixed a bug in the calculation of the phase type from the k value in CAAMoonPhases::TruePhase.
V1.04 (21 February 2004)
- The optical libration in longitude for the moon is now returned in the range
-180 - 180 degrees
V1.03 (14 February 2004)
- Fixed a "minus zero" bug in the function CAACoordinateTransformation::DMSToDegrees.
The sign of the value is now taken explicitly from the new bPositive boolean
parameter. Thanks to Patrick Wallace for reporting this problem.
V1.02 (9 February 2004)
- Replaced all calls to the macro "INT" with the function CAADate::INT
which is what they should have been. The only affected class for this was CAAMoslemCalendar.
- Fixed a number of level 4 warnings in the CAAStellarMagnitudes class when
the code is compiled in VC.Net 2003.
V1.01 (9 February 2004)
- Updated the values used in the calculation of the a1 and a2 constants for
Saturn's moon Rhea (satellite V) following an email from Jean Meeus confirming
that these constants are indeed incorrect as published in the book.
v1.0 (6 February 2004)