diff options
author | 2023-09-15 23:21:24 +0800 | |
---|---|---|
committer | 2023-09-15 23:21:24 +0800 | |
commit | 27772ba64bb8f49a9d9057acaed2e08d0f7cec68 (patch) | |
tree | 0d485cef6b6c8e8eb5b7413361dd885dd5028e79 /src/Julian.cpp | |
parent | a4aabf441f55395a73bbfb48bfee7b1bdbd49825 (diff) | |
download | calendar-27772ba64bb8f49a9d9057acaed2e08d0f7cec68.tar.gz calendar-27772ba64bb8f49a9d9057acaed2e08d0f7cec68.zip |
Formalized this program.
- Make src dir, put all code into it.
- Devide old source code into several parts of files with makefile.
- Delete some useless files.
Diffstat (limited to 'src/Julian.cpp')
-rw-r--r-- | src/Julian.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/Julian.cpp b/src/Julian.cpp new file mode 100644 index 0000000..1d3c4b7 --- /dev/null +++ b/src/Julian.cpp | |||
@@ -0,0 +1,89 @@ | |||
1 | #include "calendar.h" | ||
2 | |||
3 | double Julian::d[23][5]={ | ||
4 | {-4000, 108371.700000, -13036.800000, 392.000000, 0.000000}, | ||
5 | { -500, 17201.000000, -627.820000, 16.170000, -0.341300}, | ||
6 | { -150, 12200.600000, -346.410000, 5.403000, -0.159300}, | ||
7 | { 150, 9113.800000, -328.130000, -1.647000, 0.037700}, | ||
8 | { 500, 5707.500000, -391.410000, 0.915000, 0.314500}, | ||
9 | { 900, 2203.400000, -283.450000, 13.034000, -0.177800}, | ||
10 | { 1300, 490.100000, -57.350000, 2.085000, -0.007200}, | ||
11 | { 1600, 120.000000, -9.810000, -1.532000, 0.140300}, | ||
12 | { 1700, 10.200000, -0.910000, 0.510000, -0.037000}, | ||
13 | { 1800, 13.400000, -0.720000, 0.202000, -0.019300}, | ||
14 | { 1830, 7.800000, -1.810000, 0.416000, -0.024700}, | ||
15 | { 1860, 8.300000, -0.130000, -0.406000, 0.029200}, | ||
16 | { 1880, -5.400000, 0.320000, -0.183000, 0.017300}, | ||
17 | { 1900, -2.300000, 2.060000, 0.169000, -0.013500}, | ||
18 | { 1920, 21.200000, 1.690000, -0.304000, 0.016700}, | ||
19 | { 1940, 24.200000, 1.220000, -0.064000, 0.003100}, | ||
20 | { 1960, 33.200000, 0.510000, 0.231000, -0.010900}, | ||
21 | { 1980, 51.000000, 1.290000, -0.026000, 0.003200}, | ||
22 | { 2000, 63.870000, 0.100000, 0.000000, 0.000000}, | ||
23 | { 2005, 64.700000, 0.210000, 0.000000, 0.000000}, | ||
24 | { 2012, 66.800000, 0.220000, 0.000000, 0.000000}, | ||
25 | { 2018, 69.000000, 0.360000, 0.000000, 0.000000}, | ||
26 | { 2028, 72.600000, 0.000000, 0.000000, 0.000000} | ||
27 | }; | ||
28 | |||
29 | double Julian::dt_ext(int y,double jsd) | ||
30 | { | ||
31 | double dy=(double)(y-1820)/100.0; | ||
32 | return -20+jsd*dy*dy; | ||
33 | } | ||
34 | |||
35 | //计算力学时与世界时之差,传入年份 | ||
36 | double Julian::delta_t(int y) | ||
37 | { | ||
38 | int y0=d[22][0];//表中最后一行的年份 | ||
39 | double t0=d[22][1];//表中最后一行的delta_t | ||
40 | double jsd; | ||
41 | |||
42 | if(y>y0) | ||
43 | { | ||
44 | jsd=31; | ||
45 | if(y-y0>100) | ||
46 | { | ||
47 | return dt_ext(y,jsd); | ||
48 | } | ||
49 | |||
50 | double v=dt_ext(y,jsd); | ||
51 | double dv=dt_ext(y0,jsd)-t0; | ||
52 | return v-dv*(y0+100-y)/100; | ||
53 | } | ||
54 | |||
55 | double res; | ||
56 | for(int i=0;i<22;i++) | ||
57 | { | ||
58 | if(y<d[i+1][0]) | ||
59 | { | ||
60 | break; | ||
61 | } | ||
62 | double t1=(y-d[i][0])/(d[i+1][0]-d[i][0])*10; | ||
63 | double t2=t1*t1; | ||
64 | double t3=t2*t1; | ||
65 | res=d[i][1]+d[i][2]*t1+d[i][3]*t2+d[i][4]*t3; | ||
66 | } | ||
67 | return res; | ||
68 | } | ||
69 | // 计算儒略日 | ||
70 | double Julian::getJulianDay(time_t time) | ||
71 | { | ||
72 | double t=(double)time; | ||
73 | return (double)t/86400.0+2440587.5; | ||
74 | } | ||
75 | |||
76 | // 计算儒略千年数 | ||
77 | double Julian::getJulianKiloYear(time_t time) | ||
78 | { | ||
79 | double jd = getJulianDay(time); | ||
80 | return (double)(jd-2451545.0)/365250.0; | ||
81 | } | ||
82 | |||
83 | //儒略千年数转时间戳 | ||
84 | time_t Julian::kiloYearToTime(double t,int year) | ||
85 | { | ||
86 | double jd=t*365250.0+2451545.0; | ||
87 | time_t time=(time_t)((jd-2440587.5)*86400.0-delta_t(year)); | ||
88 | return time; | ||
89 | } | ||