when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,333 +1,333 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
- =end
7
-
8
- require 'when_exe/ephemeris/sun'
9
- module When
10
- module Ephemeris
11
-
12
- #------------------------------------------
13
- # 月と地球の本影 計算用データ
14
- #------------------------------------------
15
-
16
- # 月の地心黄経
17
- # @private
18
- P0dL =
19
- [[SIN , 93.8 , -1.33 , 0.0040 ],
20
- [SIN , 248.6 , -19.34 , 0.0020 ],
21
- [SIN , 66.0 , 0.2 , 0.0006 ],
22
- [SIN , 249.0 , -19.3 , 0.0006 ]]
23
- # @private
24
- P0L =
25
- [[LIN , 124.8757417 , 4812.6788201 , -1.330000E-7],
26
- [SINL , 338.9158263 , 4771.9886313 , 6.2887 ,+8.99400E-7], # 中心差
27
- [SIN , 107.236832 , -4133.3536154, 1.2740 ,+1.22612E-6], # 出差
28
- [SIN , 51.678963 , 8905.3422467, 0.6583 ,-0.32672E-6], # 二均差
29
- [SIN , 317.831653 , 9543.9772627, 0.2136 ,+1.7988E-6 ], # 中心差 x 2
30
- [SIN , 176.528826 , 359.990504 , 0.1856 ,-1.561E-8 ], # 年差
31
-
32
- [SIN , 292.463 , 9664.0403505, 0.1143 ,-0.6812E-6 ],
33
- [SIN , 86.16 , 638.63475182, 0.0588 ,+2.1256E-6 ],
34
- [SIN , 103.78 , -3773.36305278, 0.0572 ,-1.22769E-6],
35
- [SIN , 30.58 , 13677.331 , 0.0533 ],
36
- [SIN , 124.86 , -8545.352 , 0.0459 ],
37
-
38
- [SIN , 342.38 , 4411.998 , 0.0410 ],
39
- [SIN , 25.83 , 4452.671 , 0.0348 ], # 月角差( 二均差 / 2)
40
- [SIN , 155.45 , 5131.979 , 0.0305 ],
41
- [SIN , 240.79 , 758.698 , 0.0153 ],
42
- [SIN , 271.38 , 14436.029 , 0.0125 ],
43
-
44
- [SIN , 226.45 , -4892.052 , 0.0110 ],
45
- [SIN , 55.58 , -13038.696 , 0.0107 ],
46
- [SIN , 296.75 , 14315.966 , 0.0100 ],
47
- [SIN , 34.5 , -8266.71 , 0.0085 ],
48
- [SIN , 290.7 , -4493.34 , 0.0079 ],
49
-
50
- [SIN , 228.2 , 9265.33 , 0.0068 ],
51
- [SIN , 133.1 , 319.32 , 0.0052 ],
52
- [SIN , 202.4 , 4812.66 , 0.0050 ],
53
- [SIN , 68.6 , -19.34 , 0.0048 ],
54
- [SIN , 34.1 , 13317.34 , 0.0040 ],
55
-
56
- [SIN , 9.5 , 18449.32 , 0.0040 ],
57
- [SIN , 93.8 , -1.33 , 0.0040 ],
58
- [SIN , 103.3 , 17810.68 , 0.0039 ],
59
- [SIN , 65.1 , 5410.62 , 0.0037 ],
60
- [SIN , 321.3 , 9183.99 , 0.0027 ],
61
-
62
- [SIN , 174.8 , -13797.39 , 0.0026 ],
63
- [SIN , 82.7 , 998.63 , 0.0024 ],
64
- [SIN , 4.7 , 9224.66 , 0.0024 ],
65
- [SIN , 121.4 , -8185.36 , 0.0022 ],
66
- [SIN , 134.4 , 9903.97 , 0.0021 ],
67
-
68
- [SIN , 173.1 , 719.98 , 0.0021 ],
69
- [SIN , 100.3 , -3413.37 , 0.0021 ],
70
- [SIN , 248.6 , -19.34 , 0.0020 ],
71
- [SIN , 98.1 , 4013.29 , 0.0018 ],
72
- [SIN , 344.1 , 18569.38 , 0.0016 ],
73
-
74
- [SIN , 52.1 , -12678.71 , 0.0012 ],
75
- [SIN , 250.3 , 19208.02 , 0.0011 ],
76
- [SIN , 81.0 , -8586.0 , 0.0009 ],
77
- [SIN , 207.0 , 14037.3 , 0.0008 ],
78
- [SIN , 31.0 , -7906.7 , 0.0008 ],
79
-
80
- [SIN , 346.0 , 4052.0 , 0.0007 ],
81
- [SIN , 294.0 , -4853.3 , 0.0007 ],
82
- [SIN , 90.0 , 278.6 , 0.0007 ],
83
- [SIN , 237.0 , 1118.7 , 0.0006 ],
84
- [SIN , 82.0 , 22582.7 , 0.0005 ],
85
-
86
- [SIN , 276.0 , 19088.0 , 0.0005 ],
87
- [SIN , 73.0 , -17450.7 , 0.0005 ],
88
- [SIN , 112.0 , 5091.3 , 0.0005 ],
89
- [SIN , 116.0 , -398.7 , 0.0004 ],
90
- [SIN , 25.0 , -120.1 , 0.0004 ],
91
-
92
- [SIN , 181.0 , 9584.7 , 0.0004 ],
93
- [SIN , 18.0 , 720.0 , 0.0004 ],
94
- [SIN , 60.0 , -3814.0 , 0.0003 ],
95
- [SIN , 13.0 , -3494.7 , 0.0003 ],
96
- [SIN , 13.0 , 18089.3 , 0.0003 ],
97
-
98
- [SIN , 152.0 , 5492.0 , 0.0003 ],
99
- [SIN , 317.0 , -40.7 , 0.0003 ],
100
- [SIN , 348.0 , 23221.3 , 0.0003 ]]
101
- # 月の地心黄緯
102
- # @private
103
- P0dB =
104
- [[SIN , 68.64 , -19.341 , 0.0267 ],
105
- [SIN , 342.0 , -19.36 , 0.0043 ],
106
- [SIN , 93.8 , -1.33 , 0.0040 ],
107
- [SIN , 248.6 , -19.34 , 0.0020 ],
108
- [SIN , 358.0 , -19.4 , 0.0005 ]]
109
- # @private
110
- P0B =
111
- [[SINL , 236.231 , 4832.0201248, 5.1281218,-0.3406E-6 ],
112
- [SIN , 215.147 , 9604.0088 , 0.2806 ],
113
- [SIN , 77.316 , 60.0316 , 0.2777 ],
114
- [SIN , 4.563 , -4073.3220 , 0.1732 ],
115
- [SIN , 308.98 , 8965.374 , 0.0554 ],
116
-
117
- [SIN , 343.48 , 698.667 , 0.0463 ],
118
- [SIN , 287.90 , 13737.362 , 0.0326 ],
119
- [SIN , 194.06 , 14375.997 , 0.0172 ],
120
- [SIN , 25.6 , -8845.31 , 0.0093 ],
121
- [SIN , 98.4 , -4711.96 , 0.0088 ],
122
-
123
- [SIN , 1.1 , -3713.33 , 0.0082 ],
124
- [SIN , 322.4 , 5470.66 , 0.0043 ],
125
- [SIN , 266.8 , 18509.35 , 0.0042 ],
126
- [SIN , 188.0 , -4433.31 , 0.0034 ],
127
- [SIN , 312.5 , 8605.38 , 0.0025 ],
128
-
129
- [SIN , 291.4 , 13377.37 , 0.0022 ],
130
- [SIN , 340.0 , 1058.66 , 0.0021 ],
131
- [SIN , 218.6 , 9244.02 , 0.0019 ],
132
- [SIN , 291.8 , -8206.68 , 0.0018 ],
133
- [SIN , 52.8 , 5192.01 , 0.0018 ],
134
-
135
- [SIN , 168.7 , 14496.06 , 0.0017 ],
136
- [SIN , 73.8 , 420.02 , 0.0016 ],
137
- [SIN , 262.1 , 9284.69 , 0.0015 ],
138
- [SIN , 31.7 , 9964.00 , 0.0015 ],
139
- [SIN , 260.8 , -299.96 , 0.0014 ],
140
-
141
- [SIN , 239.7 , 4472.03 , 0.0013 ],
142
- [SIN , 30.4 , 379.35 , 0.0013 ],
143
- [SIN , 304.9 , 4812.68 , 0.0012 ],
144
- [SIN , 12.4 , -4851.36 , 0.0012 ],
145
- [SIN , 173.0 , 19147.99 , 0.0011 ],
146
-
147
- [SIN , 312.9 , -12978.66 , 0.0010 ],
148
- [SIN , 1.0 , 17870.7 , 0.0008 ],
149
- [SIN , 190.0 , 9724.1 , 0.0008 ],
150
- [SIN , 22.0 , 13098.7 , 0.0007 ],
151
- [SIN , 117.0 , 5590.7 , 0.0006 ],
152
-
153
- [SIN , 47.0 , -13617.3 , 0.0006 ],
154
- [SIN , 22.0 , -8485.3 , 0.0005 ],
155
- [SIN , 150.0 , 4193.4 , 0.0005 ],
156
- [SIN , 119.0 , -9483.9 , 0.0004 ],
157
- [SIN , 246.0 , 23281.3 , 0.0004 ],
158
-
159
- [SIN , 301.0 , 10242.6 , 0.0004 ],
160
- [SIN , 126.0 , 9325.4 , 0.0004 ],
161
- [SIN , 104.0 , 14097.4 , 0.0004 ],
162
- [SIN , 340.0 , 22642.7 , 0.0003 ],
163
- [SIN , 270.0 , 18149.4 , 0.0003 ],
164
-
165
- [SIN , 358.0 , -3353.3 , 0.0003 ],
166
- [SIN , 148.0 , 19268.0 , 0.0003 ]]
167
- # 月の視差
168
- # @private
169
- P0P =
170
- [[COS , 338.92 , 4771.98849108, 0.0518 ,+9.19178E-7],
171
- [COS , 287.2 , -4133.35355678, 0.0095 ,+1.2262E-6 ],
172
- [COS , 51.7 , 8905.34223034, 0.0078 ,-0.3268E-6 ],
173
- [COS , 317.8 , 9543.97698216, 0.0028 ,+1.7988E-6 ],
174
- [COS , 31.0 , 13677.3 , 0.0009 ],
175
-
176
- [COS , 305.0 , -8545.4 , 0.0005 ],
177
- [COS , 284.0 , -3773.4 , 0.0004 ],
178
- [COS , 342.0 , 4412.0 , 0.0003 ]]
179
-
180
- #
181
- # The Moon
182
- #
183
- class Moon < Datum
184
-
185
- class << self
186
-
187
- include Ephemeris
188
-
189
- # 月の真黄経 / CIRCLE
190
- #
191
- # @param [Numeric] t ユリウス日(Terrestrial Time)
192
- # @param [When::TM::TemporalPosition] t
193
- #
194
- # @return [Numeric]
195
- #
196
- def true_longitude(t)
197
- y = julian_year_from_1975(+t)
198
- return trigonometric(y, P0L, sind(trigonometric(y, P0dL))) / 360.0 + 38770.0
199
- end
200
-
201
- # 月の真黄緯/ CIRCLE
202
- #
203
- # @param [Numeric] t ユリウス日(Terrestrial Time)
204
- # @param [When::TM::TemporalPosition] t
205
- #
206
- # @return [Numeric]
207
- #
208
- def latitude(t)
209
- y = julian_year_from_1975(+t)
210
- return trigonometric(y, P0B, trigonometric(y, P0dB)) / 360.0
211
- end
212
-
213
- # 月の距離 / km
214
- #
215
- # @param [Numeric] t ユリウス日(Terrestrial Time)
216
- # @param [When::TM::TemporalPosition] t
217
- #
218
- # @return [Numeric]
219
- #
220
- def pi(t)
221
- return 6378.14 / ((trigonometric(julian_year_from_1975(+t), P0P) + 0.9507)*DEG)
222
- end
223
-
224
- # 月の平均黄経 / CIRCLE
225
- #
226
- # @param [Numeric] t ユリウス日(Terrestrial Time)
227
- # @param [When::TM::TemporalPosition] t
228
- #
229
- # @return [Numeric]
230
- #
231
- def mean_longitude(t)
232
- return trigonometric(julian_year_from_1975(+t), P0L, 0.0, 1) / 360.0 + 38770.0
233
- end
234
- end
235
-
236
- # 月の位置 (黄道座標)
237
- #
238
- # @param [Numeric] t ユリウス日(Terrestrial Time)
239
- # @param [When::TM::TemporalPosition] t
240
- #
241
- # @return [When::Ephemeris::Coords]
242
- #
243
- def _coords(t)
244
- t = +t
245
- Coords.polar(Moon.true_longitude(t),
246
- Moon.latitude(t),
247
- Moon.pi(t)/AU,
248
- Moon.mean_longitude(t)) +
249
- When.Resource('_ep:Earth')._coords(t)
250
- end
251
-
252
- # 真黄経 / CIRCLE
253
- #
254
- # @param [Numeric] t ユリウス日(Terrestrial Time)
255
- # @param [When::TM::TemporalPosition] t
256
- #
257
- # @return [Numeric]
258
- #
259
- def true_longitude(t)
260
- Moon.true_longitude(t)
261
- end
262
-
263
- # 平均黄経 / CIRCLE
264
- #
265
- # @param [Numeric] t ユリウス日(Terrestrial Time)
266
- # @param [When::TM::TemporalPosition] t
267
- #
268
- # @return [Numeric]
269
- #
270
- def mean_longitude(t)
271
- Moon.mean_longitude(t)
272
- end
273
-
274
- # 平均運動 / (DEG/YEAR)
275
- #
276
- # @return [Numeric]
277
- #
278
- def mean_motion
279
- P0L[0][2]
280
- end
281
-
282
- #
283
- # オブジェクトの生成
284
- # @private
285
- def initialize(*args)
286
- options = [args.pop] if args[-1].kind_of?(Hash)
287
- surface_radius, aberration, luminosity, *rest = args
288
- surface_radius ||= 1738.1
289
- aberration ||= 0.00020
290
- luminosity ||= 0.40
291
- args = [surface_radius, aberration, luminosity] + rest
292
- args += options if options
293
- super(*args)
294
- end
295
- end
296
-
297
- #
298
- # The Shadow of the Earth
299
- #
300
- class Shadow < Earth
301
-
302
- # 地球の影の位置 (黄道座標)
303
- #
304
- # @param [Numeric] t ユリウス日(Terrestrial Time)
305
- # @param [When::TM::TemporalPosition] t
306
- #
307
- # @return [When::Ephemeris::Coords]
308
- #
309
- def _coords(t)
310
- t = +t
311
- radius = Sun.pi(t) + Moon.pi(t)/AU
312
- dl = 0.5 + @aberration / radius / 360 # 略算式に含まれる光行差をキャンセルする
313
- Coords.polar(Sun.true_longitude(t)+dl, 0, radius, Sun.mean_longitude(t)+dl)
314
- end
315
-
316
- # 地球の影の視半径 / CIRCLE
317
- #
318
- # @param [Numeric] t ユリウス日(Terrestrial Time)
319
- # @param [When::TM::TemporalPosition] t
320
- # @param [When::Coordinates::Spatial] base 観測地
321
- #
322
- # @return [Numeric]
323
- #
324
- def apparent_radius(t, base=nil)
325
- t = +t
326
- radius = Sun.pi(t) * AU
327
- (asin(surface_radius/Moon.pi(t)) -
328
- asin(Ephemeris::Sun::Radius/radius) +
329
- asin(surface_radius/radius)) * 1.02 / CIRCLE
330
- end
331
- end
332
- end
333
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ require 'when_exe/ephemeris/sun'
9
+ module When
10
+ module Ephemeris
11
+
12
+ #------------------------------------------
13
+ # 月と地球の本影 計算用データ
14
+ #------------------------------------------
15
+
16
+ # 月の地心黄経
17
+ # @private
18
+ P0dL =
19
+ [[SIN , 93.8 , -1.33 , 0.0040 ],
20
+ [SIN , 248.6 , -19.34 , 0.0020 ],
21
+ [SIN , 66.0 , 0.2 , 0.0006 ],
22
+ [SIN , 249.0 , -19.3 , 0.0006 ]]
23
+ # @private
24
+ P0L =
25
+ [[LIN , 124.8757417 , 4812.6788201 , -1.330000E-7],
26
+ [SINL , 338.9158263 , 4771.9886313 , 6.2887 ,+8.99400E-7], # 中心差
27
+ [SIN , 107.236832 , -4133.3536154, 1.2740 ,+1.22612E-6], # 出差
28
+ [SIN , 51.678963 , 8905.3422467, 0.6583 ,-0.32672E-6], # 二均差
29
+ [SIN , 317.831653 , 9543.9772627, 0.2136 ,+1.7988E-6 ], # 中心差 x 2
30
+ [SIN , 176.528826 , 359.990504 , 0.1856 ,-1.561E-8 ], # 年差
31
+
32
+ [SIN , 292.463 , 9664.0403505, 0.1143 ,-0.6812E-6 ],
33
+ [SIN , 86.16 , 638.63475182, 0.0588 ,+2.1256E-6 ],
34
+ [SIN , 103.78 , -3773.36305278, 0.0572 ,-1.22769E-6],
35
+ [SIN , 30.58 , 13677.331 , 0.0533 ],
36
+ [SIN , 124.86 , -8545.352 , 0.0459 ],
37
+
38
+ [SIN , 342.38 , 4411.998 , 0.0410 ],
39
+ [SIN , 25.83 , 4452.671 , 0.0348 ], # 月角差( 二均差 / 2)
40
+ [SIN , 155.45 , 5131.979 , 0.0305 ],
41
+ [SIN , 240.79 , 758.698 , 0.0153 ],
42
+ [SIN , 271.38 , 14436.029 , 0.0125 ],
43
+
44
+ [SIN , 226.45 , -4892.052 , 0.0110 ],
45
+ [SIN , 55.58 , -13038.696 , 0.0107 ],
46
+ [SIN , 296.75 , 14315.966 , 0.0100 ],
47
+ [SIN , 34.5 , -8266.71 , 0.0085 ],
48
+ [SIN , 290.7 , -4493.34 , 0.0079 ],
49
+
50
+ [SIN , 228.2 , 9265.33 , 0.0068 ],
51
+ [SIN , 133.1 , 319.32 , 0.0052 ],
52
+ [SIN , 202.4 , 4812.66 , 0.0050 ],
53
+ [SIN , 68.6 , -19.34 , 0.0048 ],
54
+ [SIN , 34.1 , 13317.34 , 0.0040 ],
55
+
56
+ [SIN , 9.5 , 18449.32 , 0.0040 ],
57
+ [SIN , 93.8 , -1.33 , 0.0040 ],
58
+ [SIN , 103.3 , 17810.68 , 0.0039 ],
59
+ [SIN , 65.1 , 5410.62 , 0.0037 ],
60
+ [SIN , 321.3 , 9183.99 , 0.0027 ],
61
+
62
+ [SIN , 174.8 , -13797.39 , 0.0026 ],
63
+ [SIN , 82.7 , 998.63 , 0.0024 ],
64
+ [SIN , 4.7 , 9224.66 , 0.0024 ],
65
+ [SIN , 121.4 , -8185.36 , 0.0022 ],
66
+ [SIN , 134.4 , 9903.97 , 0.0021 ],
67
+
68
+ [SIN , 173.1 , 719.98 , 0.0021 ],
69
+ [SIN , 100.3 , -3413.37 , 0.0021 ],
70
+ [SIN , 248.6 , -19.34 , 0.0020 ],
71
+ [SIN , 98.1 , 4013.29 , 0.0018 ],
72
+ [SIN , 344.1 , 18569.38 , 0.0016 ],
73
+
74
+ [SIN , 52.1 , -12678.71 , 0.0012 ],
75
+ [SIN , 250.3 , 19208.02 , 0.0011 ],
76
+ [SIN , 81.0 , -8586.0 , 0.0009 ],
77
+ [SIN , 207.0 , 14037.3 , 0.0008 ],
78
+ [SIN , 31.0 , -7906.7 , 0.0008 ],
79
+
80
+ [SIN , 346.0 , 4052.0 , 0.0007 ],
81
+ [SIN , 294.0 , -4853.3 , 0.0007 ],
82
+ [SIN , 90.0 , 278.6 , 0.0007 ],
83
+ [SIN , 237.0 , 1118.7 , 0.0006 ],
84
+ [SIN , 82.0 , 22582.7 , 0.0005 ],
85
+
86
+ [SIN , 276.0 , 19088.0 , 0.0005 ],
87
+ [SIN , 73.0 , -17450.7 , 0.0005 ],
88
+ [SIN , 112.0 , 5091.3 , 0.0005 ],
89
+ [SIN , 116.0 , -398.7 , 0.0004 ],
90
+ [SIN , 25.0 , -120.1 , 0.0004 ],
91
+
92
+ [SIN , 181.0 , 9584.7 , 0.0004 ],
93
+ [SIN , 18.0 , 720.0 , 0.0004 ],
94
+ [SIN , 60.0 , -3814.0 , 0.0003 ],
95
+ [SIN , 13.0 , -3494.7 , 0.0003 ],
96
+ [SIN , 13.0 , 18089.3 , 0.0003 ],
97
+
98
+ [SIN , 152.0 , 5492.0 , 0.0003 ],
99
+ [SIN , 317.0 , -40.7 , 0.0003 ],
100
+ [SIN , 348.0 , 23221.3 , 0.0003 ]]
101
+ # 月の地心黄緯
102
+ # @private
103
+ P0dB =
104
+ [[SIN , 68.64 , -19.341 , 0.0267 ],
105
+ [SIN , 342.0 , -19.36 , 0.0043 ],
106
+ [SIN , 93.8 , -1.33 , 0.0040 ],
107
+ [SIN , 248.6 , -19.34 , 0.0020 ],
108
+ [SIN , 358.0 , -19.4 , 0.0005 ]]
109
+ # @private
110
+ P0B =
111
+ [[SINL , 236.231 , 4832.0201248, 5.1281218,-0.3406E-6 ],
112
+ [SIN , 215.147 , 9604.0088 , 0.2806 ],
113
+ [SIN , 77.316 , 60.0316 , 0.2777 ],
114
+ [SIN , 4.563 , -4073.3220 , 0.1732 ],
115
+ [SIN , 308.98 , 8965.374 , 0.0554 ],
116
+
117
+ [SIN , 343.48 , 698.667 , 0.0463 ],
118
+ [SIN , 287.90 , 13737.362 , 0.0326 ],
119
+ [SIN , 194.06 , 14375.997 , 0.0172 ],
120
+ [SIN , 25.6 , -8845.31 , 0.0093 ],
121
+ [SIN , 98.4 , -4711.96 , 0.0088 ],
122
+
123
+ [SIN , 1.1 , -3713.33 , 0.0082 ],
124
+ [SIN , 322.4 , 5470.66 , 0.0043 ],
125
+ [SIN , 266.8 , 18509.35 , 0.0042 ],
126
+ [SIN , 188.0 , -4433.31 , 0.0034 ],
127
+ [SIN , 312.5 , 8605.38 , 0.0025 ],
128
+
129
+ [SIN , 291.4 , 13377.37 , 0.0022 ],
130
+ [SIN , 340.0 , 1058.66 , 0.0021 ],
131
+ [SIN , 218.6 , 9244.02 , 0.0019 ],
132
+ [SIN , 291.8 , -8206.68 , 0.0018 ],
133
+ [SIN , 52.8 , 5192.01 , 0.0018 ],
134
+
135
+ [SIN , 168.7 , 14496.06 , 0.0017 ],
136
+ [SIN , 73.8 , 420.02 , 0.0016 ],
137
+ [SIN , 262.1 , 9284.69 , 0.0015 ],
138
+ [SIN , 31.7 , 9964.00 , 0.0015 ],
139
+ [SIN , 260.8 , -299.96 , 0.0014 ],
140
+
141
+ [SIN , 239.7 , 4472.03 , 0.0013 ],
142
+ [SIN , 30.4 , 379.35 , 0.0013 ],
143
+ [SIN , 304.9 , 4812.68 , 0.0012 ],
144
+ [SIN , 12.4 , -4851.36 , 0.0012 ],
145
+ [SIN , 173.0 , 19147.99 , 0.0011 ],
146
+
147
+ [SIN , 312.9 , -12978.66 , 0.0010 ],
148
+ [SIN , 1.0 , 17870.7 , 0.0008 ],
149
+ [SIN , 190.0 , 9724.1 , 0.0008 ],
150
+ [SIN , 22.0 , 13098.7 , 0.0007 ],
151
+ [SIN , 117.0 , 5590.7 , 0.0006 ],
152
+
153
+ [SIN , 47.0 , -13617.3 , 0.0006 ],
154
+ [SIN , 22.0 , -8485.3 , 0.0005 ],
155
+ [SIN , 150.0 , 4193.4 , 0.0005 ],
156
+ [SIN , 119.0 , -9483.9 , 0.0004 ],
157
+ [SIN , 246.0 , 23281.3 , 0.0004 ],
158
+
159
+ [SIN , 301.0 , 10242.6 , 0.0004 ],
160
+ [SIN , 126.0 , 9325.4 , 0.0004 ],
161
+ [SIN , 104.0 , 14097.4 , 0.0004 ],
162
+ [SIN , 340.0 , 22642.7 , 0.0003 ],
163
+ [SIN , 270.0 , 18149.4 , 0.0003 ],
164
+
165
+ [SIN , 358.0 , -3353.3 , 0.0003 ],
166
+ [SIN , 148.0 , 19268.0 , 0.0003 ]]
167
+ # 月の視差
168
+ # @private
169
+ P0P =
170
+ [[COS , 338.92 , 4771.98849108, 0.0518 ,+9.19178E-7],
171
+ [COS , 287.2 , -4133.35355678, 0.0095 ,+1.2262E-6 ],
172
+ [COS , 51.7 , 8905.34223034, 0.0078 ,-0.3268E-6 ],
173
+ [COS , 317.8 , 9543.97698216, 0.0028 ,+1.7988E-6 ],
174
+ [COS , 31.0 , 13677.3 , 0.0009 ],
175
+
176
+ [COS , 305.0 , -8545.4 , 0.0005 ],
177
+ [COS , 284.0 , -3773.4 , 0.0004 ],
178
+ [COS , 342.0 , 4412.0 , 0.0003 ]]
179
+
180
+ #
181
+ # The Moon
182
+ #
183
+ class Moon < Datum
184
+
185
+ class << self
186
+
187
+ include Ephemeris
188
+
189
+ # 月の真黄経 / CIRCLE
190
+ #
191
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
192
+ # @param [When::TM::TemporalPosition] t
193
+ #
194
+ # @return [Numeric]
195
+ #
196
+ def true_longitude(t)
197
+ y = julian_year_from_1975(+t)
198
+ return trigonometric(y, P0L, sind(trigonometric(y, P0dL))) / 360.0 + 38770.0
199
+ end
200
+
201
+ # 月の真黄緯/ CIRCLE
202
+ #
203
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
204
+ # @param [When::TM::TemporalPosition] t
205
+ #
206
+ # @return [Numeric]
207
+ #
208
+ def latitude(t)
209
+ y = julian_year_from_1975(+t)
210
+ return trigonometric(y, P0B, trigonometric(y, P0dB)) / 360.0
211
+ end
212
+
213
+ # 月の距離 / km
214
+ #
215
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
216
+ # @param [When::TM::TemporalPosition] t
217
+ #
218
+ # @return [Numeric]
219
+ #
220
+ def pi(t)
221
+ return 6378.14 / ((trigonometric(julian_year_from_1975(+t), P0P) + 0.9507)*DEG)
222
+ end
223
+
224
+ # 月の平均黄経 / CIRCLE
225
+ #
226
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
227
+ # @param [When::TM::TemporalPosition] t
228
+ #
229
+ # @return [Numeric]
230
+ #
231
+ def mean_longitude(t)
232
+ return trigonometric(julian_year_from_1975(+t), P0L, 0.0, 1) / 360.0 + 38770.0
233
+ end
234
+ end
235
+
236
+ # 月の位置 (黄道座標)
237
+ #
238
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
239
+ # @param [When::TM::TemporalPosition] t
240
+ #
241
+ # @return [When::Ephemeris::Coords]
242
+ #
243
+ def _coords(t)
244
+ t = +t
245
+ Coords.polar(Moon.true_longitude(t),
246
+ Moon.latitude(t),
247
+ Moon.pi(t)/AU,
248
+ Moon.mean_longitude(t)) +
249
+ When.Resource('_ep:Earth')._coords(t)
250
+ end
251
+
252
+ # 真黄経 / CIRCLE
253
+ #
254
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
255
+ # @param [When::TM::TemporalPosition] t
256
+ #
257
+ # @return [Numeric]
258
+ #
259
+ def true_longitude(t)
260
+ Moon.true_longitude(t)
261
+ end
262
+
263
+ # 平均黄経 / CIRCLE
264
+ #
265
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
266
+ # @param [When::TM::TemporalPosition] t
267
+ #
268
+ # @return [Numeric]
269
+ #
270
+ def mean_longitude(t)
271
+ Moon.mean_longitude(t)
272
+ end
273
+
274
+ # 平均運動 / (DEG/YEAR)
275
+ #
276
+ # @return [Numeric]
277
+ #
278
+ def mean_motion
279
+ P0L[0][2]
280
+ end
281
+
282
+ #
283
+ # オブジェクトの生成
284
+ # @private
285
+ def initialize(*args)
286
+ options = [args.pop] if args[-1].kind_of?(Hash)
287
+ surface_radius, aberration, luminosity, *rest = args
288
+ surface_radius ||= 1738.1
289
+ aberration ||= 0.00020
290
+ luminosity ||= 0.40
291
+ args = [surface_radius, aberration, luminosity] + rest
292
+ args += options if options
293
+ super(*args)
294
+ end
295
+ end
296
+
297
+ #
298
+ # The Shadow of the Earth
299
+ #
300
+ class Shadow < Earth
301
+
302
+ # 地球の影の位置 (黄道座標)
303
+ #
304
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
305
+ # @param [When::TM::TemporalPosition] t
306
+ #
307
+ # @return [When::Ephemeris::Coords]
308
+ #
309
+ def _coords(t)
310
+ t = +t
311
+ radius = Sun.pi(t) + Moon.pi(t)/AU
312
+ dl = 0.5 + @aberration / radius / 360 # 略算式に含まれる光行差をキャンセルする
313
+ Coords.polar(Sun.true_longitude(t)+dl, 0, radius, Sun.mean_longitude(t)+dl)
314
+ end
315
+
316
+ # 地球の影の視半径 / CIRCLE
317
+ #
318
+ # @param [Numeric] t ユリウス日(Terrestrial Time)
319
+ # @param [When::TM::TemporalPosition] t
320
+ # @param [When::Coordinates::Spatial] base 観測地
321
+ #
322
+ # @return [Numeric]
323
+ #
324
+ def apparent_radius(t, base=nil)
325
+ t = +t
326
+ radius = Sun.pi(t) * AU
327
+ (asin(surface_radius/Moon.pi(t)) -
328
+ asin(Ephemeris::Sun::Radius/radius) +
329
+ asin(surface_radius/radius)) * 1.02 / CIRCLE
330
+ end
331
+ end
332
+ end
333
+ end