1- #include " MoonPhase.h"
21#include < inttypes.h>
32
4- MoonPhase::moonData MoonPhase::getInfo ( const int32_t &year, const int32_t &month, const int32_t &day, const double &hour )
3+ #include " moonPhase.h"
4+
5+ template <typename T, typename T2>
6+ inline T map (T2 val, T2 in_min, T2 in_max, T out_min, T out_max) {
7+ return (val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
8+ }
9+
10+ double moonPhase::fhour ( const struct tm &timeinfo ) {
11+ return timeinfo.tm_hour + map ( ( timeinfo.tm_min * 60 ) + timeinfo.tm_sec , 0 , 3600 , 0.0 , 1.0 );
12+ }
13+
14+ moonData_t moonPhase::_getInfo ( const int32_t &year, const int32_t &month, const int32_t &day, const double &hour )
515{
616/*
717 Calculates the phase of the moon at the given epoch.
818 returns the moon percentage that is lit as a real number (0-1)
919*/
10- moonData returnValue;
20+ moonData_t returnValue;
1121 double j = _Julian (year, month, (double )day + hour / 24.0 ) - 2444238.5 ;
1222 double ls = _sun_position (j);
1323 double lm = _moon_position (j, ls);
@@ -18,7 +28,20 @@ MoonPhase::moonData MoonPhase::getInfo( const int32_t &year, const int32_t &mont
1828 return returnValue;
1929}
2030
21- double MoonPhase::_Julian ( int32_t year, int32_t month, const double &day )
31+ moonData_t moonPhase::getInfo ( const time_t t ) {
32+ struct tm timeinfo;
33+ gmtime_r ( &t, &timeinfo );
34+ double hour = fhour ( timeinfo );
35+ return _getInfo ( 1900 + timeinfo.tm_year , 1 + timeinfo.tm_mon , timeinfo.tm_mday , hour );
36+ }
37+
38+ moonData_t moonPhase::getInfo () {
39+ time_t now;
40+ time ( &now );
41+ return getInfo ( now );
42+ }
43+
44+ double moonPhase::_Julian ( int32_t year, int32_t month, const double &day )
2245{
2346 int32_t b, c, e;
2447 b = 0 ;
@@ -37,7 +60,7 @@ double MoonPhase::_Julian( int32_t year, int32_t month, const double &day )
3760 return b + c + e + day + 1720994.5 ;
3861}
3962
40- double MoonPhase ::_sun_position ( const double &j )
63+ double moonPhase ::_sun_position ( const double &j )
4164{
4265 double n, x, e, l, dl, v;
4366 int32_t i;
@@ -59,7 +82,7 @@ double MoonPhase::_sun_position( const double &j )
5982 return l;
6083}
6184
62- double MoonPhase ::_moon_position ( const double &j, const double &ls )
85+ double moonPhase ::_moon_position ( const double &j, const double &ls )
6386{
6487 double ms, l, mm, ev, sms, ae, ec;
6588 int32_t i;
0 commit comments