1 #pragma once
2 
3 class SunRiseSet
4 {
5 public:
6 	struct _tSubRiseSetResults
7 	{
8 		double latit;
9 		double longit;
10 		int year;
11 		int month;
12 		int day;
13 
14 		int SunRiseHour;
15 		int SunRiseMin;
16 		int SunSetHour;
17 		int SunSetMin;
18 
19 		int DaylengthHours;
20 		int DaylengthMins;
21 
22 		int SunAtSouthHour;
23 		int SunAtSouthMin;
24 
25 		int CivilTwilightStartHour;
26 		int CivilTwilightStartMin;
27 		int CivilTwilightEndHour;
28 		int CivilTwilightEndMin;
29 		int NauticalTwilightStartHour;
30 		int NauticalTwilightStartMin;
31 		int NauticalTwilightEndHour;
32 		int NauticalTwilightEndMin;
33 		int AstronomicalTwilightStartHour;
34 		int AstronomicalTwilightStartMin;
35 		int AstronomicalTwilightEndHour;
36 		int AstronomicalTwilightEndMin;
37 
38 	};
39 	static bool GetSunRiseSet(const double latit, const double longit, _tSubRiseSetResults &result);
40 	static bool GetSunRiseSet(const double latit, const double longit, const int year, const int month, const int day, _tSubRiseSetResults &result);
41 private:
42 	static double UtcToLocal(double time, double tz);
43 	static double __daylen__( int year, int month, int day, double lon, double lat, double altit, int upper_limb);
44 	static int __sunriset__(int year, int month, int day, double lon, double lat, double altit, int upper_limb, double *rise, double *set);
45 	static void sunpos(double d, double *lon, double *r);
46 	static void sun_RA_dec(double d, double *RA, double *dec, double *r);
47 	static double revolution(double x);
48 	static double rev180(double x);
49 	static double GMST0(double d);
50 	static void fixRoundIssue(int* hour, int* minute);
51 };
52