Kstars

ksalmanac.h
1 /*
2  SPDX-FileCopyrightText: 2009 Prakash Mohan <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include "skyobjects/kssun.h"
10 #include "skyobjects/ksmoon.h"
11 #include "kstarsdatetime.h"
12 
13 /**
14  *@class KSAlmanac
15  *
16  *A class that implements methods to find sun rise, sun set, twilight
17  *begin / end times, moon rise and moon set times.
18  *
19  *@short Implement methods to find important times in a day
20  *@author Prakash Mohan
21  *@version 1.0
22  */
23 
24 class GeoLocation;
25 
26 class KSAlmanac
27 {
28  public:
29  /**
30  *@brief KSAlmanac constructor initializing an almanac for the current KStarsData::Instance geolocation and time.
31  */
32  KSAlmanac();
33 
34  /**
35  *@brief KSAlmanac constructor initializing an almanac for an arbitrary geolocation and time.
36  *@param midnight is the midnight date and time to consider as beginning of the day at the "geo" location.
37  *@param geo is the GeoLocation to use for this almanac, defaulting to the KStarsData::Instance geolocation.
38  *@note if the timespec of midnight is local time, its UTC value at the geolocation "geo" will be used instead.
39  */
40  KSAlmanac(const KStarsDateTime &midnight, const GeoLocation *geo = nullptr);
41 
42  /**
43  *@short Get/set the date for computations to the given date.
44  *@param utc_midnight and local_midnight are the midnight date and time to consider as beginning of the day at the geo_ location, either UTC or local.
45  *@note The time must be the local time midnight of the day the almanac is required for, so that
46  * resulting ephemerides are calculated around that time.
47  *@note These functions are not merged into a single timespec-aware one for backwards compatilibity.
48  */
49  /** @{ */
50  void setDate(const KStarsDateTime &utc_midnight);
51  void setDateFromLT(const KStarsDateTime &local_midnight) { setDate(geo->LTtoUT(local_midnight)); }
52  KStarsDateTime getDate() const { return dt; }
53  /** @} */
54 
55  /**
56  *@short Set the location for computations to the given location
57  *@param geo_ The location to set for computations
58  */
59  void setLocation(const GeoLocation *geo_);
60 
61  /**
62  *All the functions returns the fraction of the day given by getDate()
63  *as their return value
64  */
65  inline double getSunRise() const { return SunRise; }
66  inline double getSunSet() const { return SunSet; }
67  inline double getMoonRise() const { return MoonRise; }
68  inline double getMoonSet() const { return MoonSet; }
69  inline double getDuskAstronomicalTwilight() const { return DuskAstronomicalTwilight; }
70  inline double getDawnAstronomicalTwilight() const { return DawnAstronomicalTwilight; }
71 
72  /**
73  *These functions return the max and min altitude of the sun during the course of the day in degrees
74  */
75  inline double getSunMaxAlt() const { return SunMaxAlt; }
76  inline double getSunMinAlt() const { return SunMinAlt; }
77 
78  /**
79  *@return the moon phase in degrees at the given date/time. Ranges is [0, 180]
80  */
81  inline double getMoonPhase() const { return MoonPhase; }
82 
83  /**
84  *@return get the moon illuminated fraction at the given date/time. Range is [0.,1.]
85  */
86  inline double getMoonIllum() const { return m_Moon.illum(); }
87 
88  inline QTime sunRise() const { return SunRiseT; }
89  inline QTime sunSet() const { return SunSetT; }
90  inline QTime moonRise() const { return MoonRiseT; }
91  inline QTime moonSet() const { return MoonSetT; }
92 
93  /**
94  *@short Convert the zenithal distance of the sun to fraction of the day
95  *@param z Zenithal angular distance
96  *@return Time as a fraction of the day, at which the zenithal distance is attained by the sun
97  *@note This is accurate only for zenithal angles close to sunset. TODO: Make this more accurate
98  */
99  double sunZenithAngleToTime(double z) const;
100 
101  private:
102  void update();
103 
104  /**
105  * This function computes the rise and set time for the given SkyObject. This is done in order to
106  * have a common function for the computation of the Sun and Moon rise and set times.
107  */
108  void RiseSetTime(SkyObject *o, double *riseTime, double *setTime, QTime *RiseTime, QTime *SetTime);
109 
110  /**
111  * Compute the dawn and dusk times in a [-12,+12] hours around the day midnight of this KSAlmanac, if any, as well as min and max altitude.
112  * - If the day midnight of this KSAlmanac is during astronomical night time, dusk will be before dawn.
113  * - If the day midnight of this KSAlmanac is during twilight or day time, dawn will be before dusk.
114  * - If there is no astronomical night time, dawn and dusk will be set to the time of minimal altitude of the Sun.
115  * - If there is no twilight or day time, dawn and dusk will be set to the time of minimal altitude of the Sun.
116  */
117  void findDawnDusk(double altitude = -18.0);
118 
119  /**
120  * Computes the moon phase at the given date/time
121  */
122  void findMoonPhase();
123 
124  /**
125  * FIXME: More code duplication!
126  * findAltitude should really be part of KSEngine. Copying from ObservingList.
127  * returns in degrees
128  */
129  double findAltitude(const SkyPoint *p, double hour);
130 
131  KSSun m_Sun;
132  KSMoon m_Moon;
133  KStarsDateTime dt;
134 
135  const GeoLocation *geo { nullptr };
136  double SunRise { 0 };
137  double SunSet { 0 };
138  double MoonRise { 0 };
139  double MoonSet { 0 };
140  double DuskAstronomicalTwilight { 0 };
141  double DawnAstronomicalTwilight { 0 };
142  double SunMinAlt { 0 };
143  double SunMaxAlt { 0 };
144  double MoonPhase { 0 };
145  QTime SunRiseT, SunSetT, MoonRiseT, MoonSetT, DuskAstronomicalTwilightT, DawnAstronomicalTwilightT;
146 };
double getSunMaxAlt() const
These functions return the max and min altitude of the sun during the course of the day in degrees.
Definition: ksalmanac.h:75
Extension of QDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day,...
double getSunRise() const
All the functions returns the fraction of the day given by getDate() as their return value.
Definition: ksalmanac.h:65
Stores dms coordinates for a point in the sky. for converting between coordinate systems.
Definition: skypoint.h:44
void setDate(const KStarsDateTime &utc_midnight)
Get/set the date for computations to the given date.
Definition: ksalmanac.cpp:172
Provides necessary information about the Moon. A subclass of SkyObject that provides information need...
Definition: ksmoon.h:25
KSAlmanac()
KSAlmanac constructor initializing an almanac for the current KStarsData::Instance geolocation and ti...
Definition: ksalmanac.cpp:13
Provides necessary information about the Sun.
Definition: kssun.h:23
double sunZenithAngleToTime(double z) const
Convert the zenithal distance of the sun to fraction of the day.
Definition: ksalmanac.cpp:184
double illum() const
Definition: ksmoon.h:49
void setLocation(const GeoLocation *geo_)
Set the location for computations to the given location.
Definition: ksalmanac.cpp:178
Implement methods to find important times in a day.
Definition: ksalmanac.h:26
double getMoonPhase() const
Definition: ksalmanac.h:81
Information about an object in the sky.
Definition: skyobject.h:41
double getMoonIllum() const
Definition: ksalmanac.h:86
Relevant data about an observing location on Earth.
Definition: geolocation.h:27
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Fri Aug 12 2022 04:00:54 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.