summaryrefslogtreecommitdiffstats
path: root/src/parameters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parameters.cpp')
-rw-r--r--src/parameters.cpp56
1 files changed, 9 insertions, 47 deletions
diff --git a/src/parameters.cpp b/src/parameters.cpp
index fdcefd1..ff57305 100644
--- a/src/parameters.cpp
+++ b/src/parameters.cpp
@@ -5,8 +5,7 @@
5#include <utility> 5#include <utility>
6using namespace std; 6using namespace std;
7 7
8void radToDMS(const char *message, int lowerBound, int upperBound, 8string radToDMS(int lowerBound, int upperBound, double radians) {
9 double radians) {
10 // Convert radians to degrees 9 // Convert radians to degrees
11 double degrees = radians * 180.0 / M_PI; 10 double degrees = radians * 180.0 / M_PI;
12 11
@@ -15,17 +14,19 @@ void radToDMS(const char *message, int lowerBound, int upperBound,
15 while (degrees >= upperBound) 14 while (degrees >= upperBound)
16 degrees -= (upperBound - lowerBound); 15 degrees -= (upperBound - lowerBound);
17 16
18 bool flag = degrees < 0;
19 if (flag)
20 degrees = -degrees;
21 // Calculate degrees, minutes, and seconds 17 // Calculate degrees, minutes, and seconds
22 int deg = static_cast<int>(degrees); 18 int deg = static_cast<int>(degrees);
23 double min_sec = (degrees - deg) * 60.0; 19 double min_sec = (degrees - deg) * 60.0;
24 int min = static_cast<int>(min_sec); 20 int min = static_cast<int>(min_sec);
25 double sec = (min_sec - min) * 60.0; 21 double sec = (min_sec - min) * 60.0;
22 if (degrees < 0) {
23 min = -min;
24 sec = -sec;
25 }
26 26
27 // Output the result 27 char buf[100];
28 printf("%s: %c%d°%d'%06.3f''\n", message, flag ? '-' : ' ', deg, min, sec); 28 sprintf(buf, "%4d°%2d'%06.3f''", deg, min, sec);
29 return string(buf);
29} 30}
30 31
31// 计算地球日心黄经 32// 计算地球日心黄经
@@ -205,51 +206,12 @@ pair<double, double> parameter::sun_longitude(double t) {
205 return make_pair(L, -B); 206 return make_pair(L, -B);
206} 207}
207 208
208// 计算月球地心黄经,外部调用,返回角度制
209double parameter::moon_longitude(double t) {
210 double T = 10 * t;
211 vector<double> angles = get_angle(T);
212 double a, b, c, d, moon_longitude_a;
213
214 double L = 218.3164591 + 481267.88134236 * T - 0.0013268 * T * T +
215 T * T * T / 538841 - T * T * T * T / 65194000; //月球平黄经
216 double EI = 0, sita = 0;
217 double E = 1 - 0.002516 * T - 0.0000074 * T * T; //地球离心率
218
219 for (int i = 0; i < moon_size; i++) {
220 sita = moon_longitude_parameters[i][0] * angles[0] +
221 moon_longitude_parameters[i][1] * angles[1] +
222 moon_longitude_parameters[i][2] * angles[2] +
223 moon_longitude_parameters[i][3] * angles[3];
224 sita *= M_PI / 180;
225 EI += moon_longitude_parameters[i][4] * sin(sita) *
226 pow(E, fabs(moon_longitude_parameters[i][1]));
227 }
228
229 //地外行星影响月球地心黄经修正项
230 double a1, a2;
231 a1 = 119.75 + 131.849 * T;
232 a2 = 53.09 + 479264.290 * T;
233
234 EI += 3958.0 * sin(a1 * M_PI / 180);
235 EI += 1962.0 * sin((L - angles[3]) * M_PI / 180);
236 EI += 318.0 * sin(a2 * M_PI / 180);
237
238 L += EI / 1000000;
239 L += 180 / M_PI * nutation(T); //地球章动修正
240
241 while (L < 0)
242 L += 360;
243 while (L >= 360)
244 L -= 360;
245 return L;
246}
247
248double parameter::getHourAngle(double julianKiloYear, double longitude, 209double parameter::getHourAngle(double julianKiloYear, double longitude,
249 double latitude, double alpha) { 210 double latitude, double alpha) {
250 double T = julianKiloYear * 10; 211 double T = julianKiloYear * 10;
251 double GST = 280.46061837 + 360.98564736629 * 36525 * T + 212 double GST = 280.46061837 + 360.98564736629 * 36525 * T +
252 0.000387933 * T * T - T * T * T / 38710000; 213 0.000387933 * T * T - T * T * T / 38710000;
214 GST += nutation(T) * cos(epsilon);
253 GST *= M_PI / 180; 215 GST *= M_PI / 180;
254 return GST + longitude - alpha; // 返回弧度制 216 return GST + longitude - alpha; // 返回弧度制
255} 217}