diff options
author | 2024-03-08 21:24:55 +0800 | |
---|---|---|
committer | 2024-03-08 21:24:55 +0800 | |
commit | 6fd843db21af18be0634bac770c6b74ad4e78bb7 (patch) | |
tree | 85afec2f24965c69042a25a8eb5fb3008cad05aa /src/parameters.cpp | |
parent | 505d07a7abccfc707e2d27c2deb2fe460854e751 (diff) | |
download | calendar-6fd843db21af18be0634bac770c6b74ad4e78bb7.tar.gz calendar-6fd843db21af18be0634bac770c6b74ad4e78bb7.zip |
HourAngle Fixed, and sun pos right
Diffstat (limited to 'src/parameters.cpp')
-rw-r--r-- | src/parameters.cpp | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/src/parameters.cpp b/src/parameters.cpp index f08736b..fdcefd1 100644 --- a/src/parameters.cpp +++ b/src/parameters.cpp | |||
@@ -1,9 +1,32 @@ | |||
1 | // 凡无特殊说明的函数,全部返回弧度制 | ||
2 | |||
1 | #include "parameters.h" | 3 | #include "parameters.h" |
2 | #include "calendar.h" | 4 | #include "calendar.h" |
3 | #include <utility> | 5 | #include <utility> |
4 | using namespace std; | 6 | using namespace std; |
5 | 7 | ||
6 | //凡无特殊说明的函数,全部返回弧度制 | 8 | void radToDMS(const char *message, int lowerBound, int upperBound, |
9 | double radians) { | ||
10 | // Convert radians to degrees | ||
11 | double degrees = radians * 180.0 / M_PI; | ||
12 | |||
13 | while (degrees < lowerBound) | ||
14 | degrees += (upperBound - lowerBound); | ||
15 | while (degrees >= upperBound) | ||
16 | degrees -= (upperBound - lowerBound); | ||
17 | |||
18 | bool flag = degrees < 0; | ||
19 | if (flag) | ||
20 | degrees = -degrees; | ||
21 | // Calculate degrees, minutes, and seconds | ||
22 | int deg = static_cast<int>(degrees); | ||
23 | double min_sec = (degrees - deg) * 60.0; | ||
24 | int min = static_cast<int>(min_sec); | ||
25 | double sec = (min_sec - min) * 60.0; | ||
26 | |||
27 | // Output the result | ||
28 | printf("%s: %c%d°%d'%06.3f''\n", message, flag ? '-' : ' ', deg, min, sec); | ||
29 | } | ||
7 | 30 | ||
8 | // 计算地球日心黄经 | 31 | // 计算地球日心黄经 |
9 | double parameter::get_longitude(vector<double> l, double t) { | 32 | double parameter::get_longitude(vector<double> l, double t) { |
@@ -222,13 +245,17 @@ double parameter::moon_longitude(double t) { | |||
222 | return L; | 245 | return L; |
223 | } | 246 | } |
224 | 247 | ||
225 | double parameter::getHourAngle(double julianKiloTime, double longitude, | 248 | double parameter::getHourAngle(double julianKiloYear, double longitude, |
226 | double latitude, double alpha) { | 249 | double latitude, double alpha) { |
227 | double t = 100 * 365.25 * julianKiloTime; | 250 | double T = julianKiloYear * 10; |
228 | // 该时刻的格林尼治恒星时 | 251 | double GST = 280.46061837 + 360.98564736629 * 36525 * T + |
229 | double GST = 6.697374558 + 2400.051336 * t + 0.000025862333 * t * t - | 252 | 0.000387933 * T * T - T * T * T / 38710000; |
230 | 0.000000001722222 * t * t * t; | 253 | GST *= M_PI / 180; |
231 | return GST * M_PI / 12 + longitude - alpha; | 254 | return GST + longitude - alpha; // 返回弧度制 |
232 | // double GST = 241.654320 + 360.9856473840 * t * 1000 * 36525; | 255 | } |
233 | // return GST * M_PI / 180 + longitude - alpha; | 256 | |
257 | double parameter::get_epsilon(double T) { | ||
258 | double epsilon = 23.439291111 - 0.01300416667 * T - | ||
259 | (1.638888889e-7) * T * T + (5.036111111e-7) * T * T * T; | ||
260 | return epsilon * M_PI / 180; | ||
234 | } \ No newline at end of file | 261 | } \ No newline at end of file |