equationoftime 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.buildpath +5 -0
  3. data/.project +17 -0
  4. data/.rvmrc +1 -0
  5. data/.settings/org.eclipse.ltk.core.refactoring.prefs +2 -0
  6. data/Makefile +238 -0
  7. data/Rakefile +40 -3
  8. data/analemma_data.yml +2925 -0
  9. data/equationoftime.gemspec +6 -3
  10. data/examples/analemma_data_generator.rb +12 -12
  11. data/examples/celes_parts/.RUBYARCHDIR.time +0 -0
  12. data/examples/celes_parts/.cproject +56 -0
  13. data/examples/celes_parts/.project +78 -0
  14. data/examples/celes_parts/a2af.c +120 -0
  15. data/examples/celes_parts/a2tf.c +116 -0
  16. data/examples/celes_parts/af2a.c +107 -0
  17. data/examples/celes_parts/anp.c +82 -0
  18. data/examples/celes_parts/anpm.c +82 -0
  19. data/examples/celes_parts/bi00.c +116 -0
  20. data/examples/celes_parts/bp00.c +173 -0
  21. data/examples/celes_parts/bp06.c +136 -0
  22. data/examples/celes_parts/bpn2xy.c +100 -0
  23. data/examples/celes_parts/c2i00a.c +139 -0
  24. data/examples/celes_parts/c2i00b.c +139 -0
  25. data/examples/celes_parts/c2i06a.c +136 -0
  26. data/examples/celes_parts/c2ibpn.c +142 -0
  27. data/examples/celes_parts/c2ixy.c +131 -0
  28. data/examples/celes_parts/c2ixys.c +123 -0
  29. data/examples/celes_parts/c2s.c +96 -0
  30. data/examples/celes_parts/c2t00a.c +154 -0
  31. data/examples/celes_parts/c2t00b.c +150 -0
  32. data/examples/celes_parts/c2t06a.c +152 -0
  33. data/examples/celes_parts/c2tcio.c +122 -0
  34. data/examples/celes_parts/c2teqx.c +122 -0
  35. data/examples/celes_parts/c2tpe.c +167 -0
  36. data/examples/celes_parts/c2txy.c +159 -0
  37. data/examples/celes_parts/cal2jd.c +139 -0
  38. data/examples/celes_parts/celes_core.c +2522 -0
  39. data/examples/celes_parts/cp.c +80 -0
  40. data/examples/celes_parts/cpv.c +82 -0
  41. data/examples/celes_parts/cr.c +83 -0
  42. data/examples/celes_parts/d2dtf.c +206 -0
  43. data/examples/celes_parts/d2tf.c +160 -0
  44. data/examples/celes_parts/dat.c +289 -0
  45. data/examples/celes_parts/depend +25 -0
  46. data/examples/celes_parts/dtdb.c +1213 -0
  47. data/examples/celes_parts/dtf2d.c +196 -0
  48. data/examples/celes_parts/ee00.c +128 -0
  49. data/examples/celes_parts/ee00a.c +135 -0
  50. data/examples/celes_parts/ee00b.c +141 -0
  51. data/examples/celes_parts/ee06a.c +122 -0
  52. data/examples/celes_parts/eect00.c +282 -0
  53. data/examples/celes_parts/eform.c +147 -0
  54. data/examples/celes_parts/eo06a.c +131 -0
  55. data/examples/celes_parts/eors.c +108 -0
  56. data/examples/celes_parts/epb.c +96 -0
  57. data/examples/celes_parts/epb2jd.c +91 -0
  58. data/examples/celes_parts/epj.c +93 -0
  59. data/examples/celes_parts/epj2jd.c +91 -0
  60. data/examples/celes_parts/epv00.c +2589 -0
  61. data/examples/celes_parts/eqeq94.c +131 -0
  62. data/examples/celes_parts/era00.c +136 -0
  63. data/examples/celes_parts/extconf.rb +4 -0
  64. data/examples/celes_parts/fad03.c +103 -0
  65. data/examples/celes_parts/fae03.c +102 -0
  66. data/examples/celes_parts/faf03.c +106 -0
  67. data/examples/celes_parts/faju03.c +102 -0
  68. data/examples/celes_parts/fal03.c +103 -0
  69. data/examples/celes_parts/falp03.c +103 -0
  70. data/examples/celes_parts/fama03.c +102 -0
  71. data/examples/celes_parts/fame03.c +102 -0
  72. data/examples/celes_parts/fane03.c +99 -0
  73. data/examples/celes_parts/faom03.c +104 -0
  74. data/examples/celes_parts/fapa03.c +103 -0
  75. data/examples/celes_parts/fasa03.c +102 -0
  76. data/examples/celes_parts/faur03.c +99 -0
  77. data/examples/celes_parts/fave03.c +102 -0
  78. data/examples/celes_parts/fk52h.c +143 -0
  79. data/examples/celes_parts/fk5hip.c +126 -0
  80. data/examples/celes_parts/fk5hz.c +160 -0
  81. data/examples/celes_parts/fw2m.c +134 -0
  82. data/examples/celes_parts/fw2xy.c +120 -0
  83. data/examples/celes_parts/gc2gd.c +134 -0
  84. data/examples/celes_parts/gc2gde.c +200 -0
  85. data/examples/celes_parts/gd2gc.c +134 -0
  86. data/examples/celes_parts/gd2gce.c +138 -0
  87. data/examples/celes_parts/gmst00.c +145 -0
  88. data/examples/celes_parts/gmst06.c +136 -0
  89. data/examples/celes_parts/gmst82.c +151 -0
  90. data/examples/celes_parts/gst00a.c +138 -0
  91. data/examples/celes_parts/gst00b.c +146 -0
  92. data/examples/celes_parts/gst06.c +140 -0
  93. data/examples/celes_parts/gst06a.c +131 -0
  94. data/examples/celes_parts/gst94.c +131 -0
  95. data/examples/celes_parts/h2fk5.c +148 -0
  96. data/examples/celes_parts/hfk5z.c +175 -0
  97. data/examples/celes_parts/ir.c +83 -0
  98. data/examples/celes_parts/jd2cal.c +155 -0
  99. data/examples/celes_parts/jdcalf.c +161 -0
  100. data/examples/celes_parts/num00a.c +121 -0
  101. data/examples/celes_parts/num00b.c +121 -0
  102. data/examples/celes_parts/num06a.c +125 -0
  103. data/examples/celes_parts/numat.c +109 -0
  104. data/examples/celes_parts/nut00a.c +2047 -0
  105. data/examples/celes_parts/nut00b.c +372 -0
  106. data/examples/celes_parts/nut06a.c +153 -0
  107. data/examples/celes_parts/nut80.c +325 -0
  108. data/examples/celes_parts/nutm80.c +117 -0
  109. data/examples/celes_parts/obl06.c +118 -0
  110. data/examples/celes_parts/obl80.c +118 -0
  111. data/examples/celes_parts/p06e.c +321 -0
  112. data/examples/celes_parts/p2pv.c +83 -0
  113. data/examples/celes_parts/p2s.c +91 -0
  114. data/examples/celes_parts/pap.c +139 -0
  115. data/examples/celes_parts/pas.c +96 -0
  116. data/examples/celes_parts/pb06.c +144 -0
  117. data/examples/celes_parts/pdp.c +84 -0
  118. data/examples/celes_parts/pfw06.c +165 -0
  119. data/examples/celes_parts/plan94.c +514 -0
  120. data/examples/celes_parts/pm.c +83 -0
  121. data/examples/celes_parts/pmat00.c +118 -0
  122. data/examples/celes_parts/pmat06.c +122 -0
  123. data/examples/celes_parts/pmat76.c +141 -0
  124. data/examples/celes_parts/pmp.c +85 -0
  125. data/examples/celes_parts/pn.c +109 -0
  126. data/examples/celes_parts/pn00.c +177 -0
  127. data/examples/celes_parts/pn00a.c +162 -0
  128. data/examples/celes_parts/pn00b.c +162 -0
  129. data/examples/celes_parts/pn06.c +187 -0
  130. data/examples/celes_parts/pn06a.c +152 -0
  131. data/examples/celes_parts/pnm00a.c +121 -0
  132. data/examples/celes_parts/pnm00b.c +121 -0
  133. data/examples/celes_parts/pnm06a.c +124 -0
  134. data/examples/celes_parts/pnm80.c +126 -0
  135. data/examples/celes_parts/pom00.c +115 -0
  136. data/examples/celes_parts/ppp.c +85 -0
  137. data/examples/celes_parts/ppsp.c +94 -0
  138. data/examples/celes_parts/pr00.c +142 -0
  139. data/examples/celes_parts/prec76.c +148 -0
  140. data/examples/celes_parts/pv2p.c +81 -0
  141. data/examples/celes_parts/pv2s.c +144 -0
  142. data/examples/celes_parts/pvdpv.c +102 -0
  143. data/examples/celes_parts/pvm.c +86 -0
  144. data/examples/celes_parts/pvmpv.c +87 -0
  145. data/examples/celes_parts/pvppv.c +87 -0
  146. data/examples/celes_parts/pvstar.c +207 -0
  147. data/examples/celes_parts/pvu.c +93 -0
  148. data/examples/celes_parts/pvup.c +88 -0
  149. data/examples/celes_parts/pvxpv.c +107 -0
  150. data/examples/celes_parts/pxp.c +94 -0
  151. data/examples/celes_parts/rm2v.c +111 -0
  152. data/examples/celes_parts/rv2m.c +118 -0
  153. data/examples/celes_parts/rx.c +110 -0
  154. data/examples/celes_parts/rxp.c +99 -0
  155. data/examples/celes_parts/rxpv.c +86 -0
  156. data/examples/celes_parts/rxr.c +99 -0
  157. data/examples/celes_parts/ry.c +110 -0
  158. data/examples/celes_parts/rz.c +110 -0
  159. data/examples/celes_parts/s00.c +371 -0
  160. data/examples/celes_parts/s00a.c +143 -0
  161. data/examples/celes_parts/s00b.c +143 -0
  162. data/examples/celes_parts/s06.c +368 -0
  163. data/examples/celes_parts/s06a.c +145 -0
  164. data/examples/celes_parts/s2c.c +85 -0
  165. data/examples/celes_parts/s2p.c +88 -0
  166. data/examples/celes_parts/s2pv.c +103 -0
  167. data/examples/celes_parts/s2xpv.c +87 -0
  168. data/examples/celes_parts/sepp.c +105 -0
  169. data/examples/celes_parts/seps.c +93 -0
  170. data/examples/celes_parts/sofa.h +379 -0
  171. data/examples/celes_parts/sofam.h +155 -0
  172. data/examples/celes_parts/sp00.c +118 -0
  173. data/examples/celes_parts/starpm.c +205 -0
  174. data/examples/celes_parts/starpv.c +264 -0
  175. data/examples/celes_parts/sxp.c +84 -0
  176. data/examples/celes_parts/sxpv.c +85 -0
  177. data/examples/celes_parts/taitt.c +110 -0
  178. data/examples/celes_parts/taiut1.c +112 -0
  179. data/examples/celes_parts/taiutc.c +182 -0
  180. data/examples/celes_parts/tcbtdb.c +132 -0
  181. data/examples/celes_parts/tcgtt.c +109 -0
  182. data/examples/celes_parts/tdbtcb.c +137 -0
  183. data/examples/celes_parts/tdbtt.c +122 -0
  184. data/examples/celes_parts/test_celes.rb +48 -0
  185. data/examples/celes_parts/tf2a.c +107 -0
  186. data/examples/celes_parts/tf2d.c +107 -0
  187. data/examples/celes_parts/tr.c +93 -0
  188. data/examples/celes_parts/trxp.c +93 -0
  189. data/examples/celes_parts/trxpv.c +93 -0
  190. data/examples/celes_parts/tttai.c +110 -0
  191. data/examples/celes_parts/tttcg.c +112 -0
  192. data/examples/celes_parts/tttdb.c +121 -0
  193. data/examples/celes_parts/ttut1.c +110 -0
  194. data/examples/celes_parts/ut1tai.c +111 -0
  195. data/examples/celes_parts/ut1tt.c +110 -0
  196. data/examples/celes_parts/ut1utc.c +193 -0
  197. data/examples/celes_parts/utctai.c +163 -0
  198. data/examples/celes_parts/utcut1.c +151 -0
  199. data/examples/celes_parts/xy06.c +2758 -0
  200. data/examples/celes_parts/xys00a.c +133 -0
  201. data/examples/celes_parts/xys00b.c +133 -0
  202. data/examples/celes_parts/xys06a.c +133 -0
  203. data/examples/celes_parts/zp.c +77 -0
  204. data/examples/celes_parts/zpv.c +79 -0
  205. data/examples/celes_parts/zr.c +83 -0
  206. data/examples/check_date_type.rb +2 -4
  207. data/examples/compare_geoc_long_ra.rb +19 -11
  208. data/examples/data_table_for_astro_dog.rb +40 -0
  209. data/examples/earth_rotation.rb +28 -3
  210. data/examples/eot.c +15 -0
  211. data/examples/eot.h +2 -0
  212. data/examples/eot_methods_list.rb +30 -3
  213. data/examples/eot_suntimes.rb +99 -95
  214. data/examples/extconf.rb +2 -0
  215. data/examples/{read_nutation_data.rb → gmst_gast_non_sofa.rb} +103 -98
  216. data/examples/nutation_table5_3a.yaml +1658 -1658
  217. data/examples/rbeot.c +24 -0
  218. data/examples/test_eot.rb +17 -0
  219. data/examples/test_poly_eval.rb +6 -17
  220. data/examples/time_scales.rb +4 -7
  221. data/examples/times_year.rb +50 -0
  222. data/examples/usage_example.rb +15 -5
  223. data/examples/use_angles.rb +151 -87
  224. data/lib/eot/angles.rb +130 -177
  225. data/lib/eot/constants.rb +41 -44
  226. data/lib/eot/displays.rb +40 -37
  227. data/lib/eot/geo_lat_lng_smt.rb +7 -6
  228. data/lib/eot/init.rb +62 -39
  229. data/lib/eot/nutation.rb +53 -45
  230. data/lib/eot/times.rb +32 -41
  231. data/lib/eot/utilities.rb +11 -90
  232. data/lib/eot/version.rb +3 -2
  233. data/rise_set_data.yml +1461 -0
  234. data/run_tests_eclipse.rb +1 -0
  235. data/tests/minitest/aliased_angles_spec.rb +119 -165
  236. data/tests/minitest/aliased_displays_spec.rb +41 -39
  237. data/tests/minitest/aliased_utilities_spec.rb +11 -22
  238. data/tests/minitest/angles_spec.rb +134 -181
  239. data/tests/minitest/constants_spec.rb +4 -10
  240. data/tests/minitest/delta_epsilon_spec.rb +13 -16
  241. data/tests/minitest/displays_spec.rb +39 -37
  242. data/tests/minitest/geo_spec.rb +15 -11
  243. data/tests/minitest/init_spec.rb +30 -16
  244. data/tests/minitest/nutation_spec.rb +19 -13
  245. data/tests/minitest/times_spec.rb +77 -75
  246. data/tests/minitest/utilities_spec.rb +10 -94
  247. data/wiki.md +7 -9
  248. metadata +218 -26
  249. data/examples/data_table.rb +0 -26
  250. data/lib/eot/nutation_table5_3a.yaml +0 -9532
  251. data/tests/minitest/aliased_times_spec.rb +0 -36
data/lib/eot/angles.rb CHANGED
@@ -1,64 +1,72 @@
1
1
  # angles.rb
2
2
 
3
- class Eot
3
+ require 'celes'
4
4
 
5
+ class Eot
6
+ include Math
5
7
  # From angles.rb:<br>
6
8
  # Apparent solar longitude = true longitude - aberation
7
- def al_Sun( ta = A2000 )
8
- ta = check_jct_zero( ta )
9
- tl_Sun( ta ) -
10
- 0.00569 -
11
- 0.00478 * sin( deg_to_rad( omega( ta ) ) )
9
+ def al_Sun()
10
+ Celes.anp(tl_Sun() - 0.00569 * D2R - 0.00478 * D2R * sin(omega()))
12
11
  end
13
12
  alias_method :apparent_longitude, :al_Sun
13
+ alias_method :alsun, :al_Sun
14
+
15
+ # From angles.rb:<br>
16
+ # delta epsilon
17
+ # component of equation of equinox
18
+ def angle_delta_epsilon()
19
+ Celes.nut06a(@ajd, 0)[ 1 ]
20
+ end
21
+ alias_method :delta_epsilon, :angle_delta_epsilon
14
22
 
15
23
  # From angles.rb:<br>
16
24
  # one time component to total equation of time
17
- def angle_delta_oblique( ta = A2000 )
18
- ta = check_jct_zero( ta )
19
- tl_Sun( ta ) -
20
- ra_Sun( ta )
25
+ def angle_delta_oblique()
26
+ tl_Sun() - ra_Sun()
21
27
  end
22
-
28
+ alias_method :delta_t_ecliptic, :angle_delta_oblique
29
+ alias_method :delta_oblique, :angle_delta_oblique
30
+
23
31
  # From angles.rb:<br>
24
32
  # one time component to total equation of time
25
- def angle_delta_orbit( ta = A2000 )
26
- ta = check_jct_zero( ta )
27
- @ma - ta_Sun( ta )
33
+ def angle_delta_orbit()
34
+ @ma - ta_Sun()
28
35
  end
36
+ alias_method :delta_t_elliptic, :angle_delta_orbit
37
+ alias_method :delta_orbit, :angle_delta_orbit
38
+
29
39
 
30
40
  # From angles.rb:<br>
31
41
  # component of equation of equinox
32
- def angle_delta_psi( ta = A2000 )
33
- ta = check_jct_zero( ta )
34
- delta_equinox( ta )[ 1 ]
42
+ def angle_delta_psi()
43
+ Celes.nut06a(@ajd, 0)[ 0 ]
35
44
  end
45
+ alias_method :delta_psi, :angle_delta_psi
36
46
 
37
47
  # From angles.rb:<br>
38
48
  # total equation of time
39
- def angle_equation_of_time( ta = A2000 )
40
- ta = check_jct_zero( ta )
41
- @ma = ma_Sun()
42
- angle_delta_oblique( ta ) +
43
- angle_delta_orbit( ta )
44
- end
49
+ def angle_equation_of_time()
50
+ #~ @ma = ma_Sun()
51
+ angle_delta_oblique() + angle_delta_orbit()
52
+ end
53
+ alias_method :eot, :angle_equation_of_time
45
54
 
46
55
  # From angles.rb:<br>
47
56
  # equation of centre
48
57
  # added to mean anomaly to get true anomaly.
49
- def center( ta = A2000)
50
- ta = check_jct_zero( ta )
51
- sine_1M = sin( 1.0 * deg_to_rad( @ma ) )
52
- sine_2M = sin( 2.0 * deg_to_rad( @ma ) )
53
- sine_3M = sin( 3.0 * deg_to_rad( @ma ) )
54
- sine_4M = sin( 4.0 * deg_to_rad( @ma ) )
55
- sine_5M = sin( 5.0 * deg_to_rad( @ma ) )
56
- e = eccentricity_Earth( ta )
57
- rad_to_deg( sine_1M * ( 2.0 * e - e**3/4.0 + 5/96.0 * e**5 ) +
58
- sine_2M * ( 5/4.0 * e**2 - 11/24.0 * e**4 ) +
59
- sine_3M * ( 13/12.0 * e**3 - 43/64.0 * e**5 ) +
60
- sine_4M * 103/96.0 * e**4 +
61
- sine_5M * 1097/960.0 * e**5 )
58
+ def center()
59
+ sine_1M = sin( 1.0 * @ma )
60
+ sine_2M = sin( 2.0 * @ma )
61
+ sine_3M = sin( 3.0 * @ma )
62
+ sine_4M = sin( 4.0 * @ma )
63
+ sine_5M = sin( 5.0 * @ma )
64
+ e = eccentricity_Earth()
65
+ sine_1M * ( 2.0 * e - e**3/4.0 + 5/96.0 * e**5 ) +
66
+ sine_2M * ( 5/4.0 * e**2 - 11/24.0 * e**4 ) +
67
+ sine_3M * ( 13/12.0 * e**3 - 43/64.0 * e**5 ) +
68
+ sine_4M * 103/96.0 * e**4 +
69
+ sine_5M * 1097/960.0 * e**5
62
70
  # sine_1M *( 1.914602 - ta[ 0 ] * ( 0.004817 + ta[ 0 ] * 0.000014 )) + +
63
71
  # sine_2M *( 0.019993 - ta[ 0 ] * 0.000101 ) + +
64
72
  # sine_3M * 0.000289
@@ -68,180 +76,125 @@ class Eot
68
76
  # From angles.rb:<br>
69
77
  # cosine apparent longitude
70
78
  # could be useful when dividing
71
- def cosine_al_Sun( ta = A2000 )
72
- ta = check_jct_zero( ta )
73
- cos( deg_to_rad( al_Sun( ta ) ) )
79
+ def cosine_al_Sun()
80
+ cos( alsun() )
74
81
  end
75
82
  alias_method :cosine_apparent_longitude, :cosine_al_Sun
83
+ alias_method :cosalsun, :cosine_al_Sun
76
84
 
77
85
  # From angles.rb:<br>
78
86
  # cosine true longitude
79
87
  # used in solar right ascension
80
- def cosine_tl_Sun( ta = A2000 )
81
- ta = check_jct_zero( ta )
82
- cos( deg_to_rad( tl_Sun( ta ) ) )
88
+ def cosine_tl_Sun()
89
+ cos( tl_Sun() )
83
90
  end
84
91
  alias_method :cosine_true_longitude, :cosine_tl_Sun
85
92
 
86
93
  # From angles.rb:<br>
87
94
  # cosine true obliquity
88
- # used in solar right ascension
89
- def cosine_to_Earth( ta = A2000 )
90
- ta = check_jct_zero( ta )
91
- cos( deg_to_rad( to_Earth( ta ) ) )
95
+ # used in solar right ascension and equation of equinox
96
+ def cosine_to_Earth()
97
+ cos( to_Earth() )
92
98
  end
93
99
  alias_method :cosine_true_obliquity, :cosine_to_Earth
94
100
 
95
101
  # From angles.rb:<br>
96
102
  # solar declination
97
- def dec_Sun( ta = A2000 )
98
- ta = check_jct_zero( ta )
99
- sine_declination = sin( deg_to_rad( to_Earth( ta ) ) ) *
100
- sine_al_Sun( ta )
101
- rad_to_deg( asin( sine_declination ) )
103
+ def dec_Sun()
104
+ sine_declination = sine_to_Earth() * sine_al_Sun()
105
+ asin( sine_declination )
102
106
  end
103
107
  alias_method :declination, :dec_Sun
104
108
 
105
- # From angles.rb:<br>
106
- # delta epsilon
107
- # component of equation of equinox
108
- def delta_epsilon( ta = A2000 )
109
- ta = check_jct_zero( ta )
110
- delta_equinox( ta )[ 0 ]
111
- end
112
-
113
- # From angles.rb:<br>
114
- # one time component to total equation of time
115
- def delta_oblique( ta = A2000 )
116
- ta = check_jct_zero( ta )
117
- tl_Sun( ta ) -
118
- ra_Sun( ta )
119
- end
120
- alias_method :delta_t_ecliptic, :delta_oblique
121
-
122
- # From angles.rb:<br>
123
- # one time component to total equation of time
124
- def delta_orbit( ta = A2000 )
125
- ta = check_jct_zero( ta )
126
- @ma - ta_Sun( ta )
127
- end
128
- alias_method :delta_t_elliptic, :delta_orbit
129
-
130
- # From angles.rb:<br>
131
- # component of equation of equinox
132
- def delta_psi( ta = A2000 )
133
- ta = check_jct_zero( ta )
134
- delta_equinox( ta )[ 1 ]
135
- end
136
109
 
137
110
  # From angles.rb:<br>
138
111
  # eccentricity of elliptical Earth orbit around Sun
139
- # Horner calculation method
140
- def eccentricity_Earth( ta = A2000 )
141
- ta = check_jct_zero( ta )
142
- # 0.016708617 - ta[ 0 ] * ( 0.000042037 + ta[ 0 ] * 0.0000001235 )
143
- [-0.0000001235, -0.000042037, 0.016708617].inject(0.0) {|p, a| p * ta[0] + a}
112
+ # Horners' calculation method
113
+ def eccentricity_Earth()
114
+ [-0.0000001235, -0.000042037, 0.016708617].inject(0.0) {|p, a| p * @ta + a}
144
115
  end
145
116
  alias_method :eccentricity_earth_orbit, :eccentricity_Earth
146
117
 
147
118
  # From angles.rb:<br>
148
- # equation of equinox
149
- def eq_of_equinox( ta = A2000 )
150
- ta = check_jct_zero( ta )
151
- cosine_to_Earth( ta ) *
152
- delta_psi( ta )
119
+ # equation of equinox
120
+ # used for true longitude of Aries
121
+ # Depricated by Celes.gst06a()
122
+ def eq_of_equinox()
123
+ cosine_to_Earth() * delta_psi()
153
124
  end
154
125
 
155
- # From angles.rb:<br>
156
- # total equation of time
157
- def eot()
158
- ta = time_julian_century( @ajd )
159
- @ma = ma_Sun()
160
- delta_orbit( ta ) + delta_oblique( ta )
161
- end
162
-
163
- # From angles.rb:<br>
164
- # angle factor for daily sidereal time (experimental)
165
- def factor
166
- jda = Date.parse("2000-01-01").jd
167
- jdb = jda + 1
168
- tjca = time_julian_century( jda )
169
- tjcb = time_julian_century( jdb )
170
- tlaa = tl_Aries( tjca )
171
- tlab = tl_Aries( tjcb )
172
- dif = tlab - tlaa
173
- dr = dif + 360.0
174
- 360 / dr
175
- end
176
126
 
177
127
  # From angles.rb:<br>
178
128
  # angle geometric mean longitude
179
129
  # needed to get true longitude for low accuracy.
180
- def gml_Sun( ta = A2000 )
181
- ta = check_jct_zero( ta )
182
- total = [ 1.0/-19880000.0, 1.0/-152990.0, 1.0/499310.0,
183
- 0.0003032028, 36000.76982779, 280.4664567 ]
184
- mod_360( total.inject(0.0) {|p, a| p * ta[0] + a} )
130
+ def gml_Sun()
131
+ total = [ 1.0/-19880000.0, 1.0/-152990.0, 1.0/499310.0,
132
+ 0.0003032028, 36000.76982779, 280.4664567 ]
133
+ mod_360(total.inject(0.0) {|p, a| p * @ta + a}) * D2R
185
134
  end
186
135
  alias_method :geometric_mean_longitude, :gml_Sun
187
136
 
188
137
  # From angles.rb:<br>
189
138
  # horizon angle for provided geo coordinates
190
- # used for angles from transit to horizon
191
- def ha_Sun( ta = A2000 )
192
- ta = check_jct_zero( ta )
193
- zenith = 90.8333
194
- cosine_zenith = cos( deg_to_rad( zenith ) )
195
- cosine_declination = cos( deg_to_rad( dec_Sun( ta ) ) )
196
- sine_declination = sin( deg_to_rad( dec_Sun( ta ) ) )
197
- cosine_latitude = cos( deg_to_rad( @latitude ) )
198
- sine_latitude = sin( deg_to_rad( @latitude ) )
139
+ # used for angles from transit to horizons
140
+ def ha_Sun()
141
+ zenith = 90.8333 * D2R
142
+ cosine_zenith = cos( zenith )
143
+ cosine_declination = cos( dec_Sun() )
144
+ sine_declination = sin( dec_Sun() )
145
+ cosine_latitude = cos( @latitude * D2R )
146
+ sine_latitude = sin( @latitude * D2R )
199
147
  top = cosine_zenith - sine_declination * sine_latitude
200
148
  bottom = cosine_declination * cosine_latitude
201
149
  t_cosine = top / bottom
202
150
  t_cosine > 1.0 || t_cosine < -1.0 ? cos = 1.0 : cos = t_cosine
203
- rad_to_deg( acos( cos ) )
151
+ acos( cos )
204
152
  end
205
153
  alias_method :horizon_angle, :ha_Sun
206
154
 
207
155
  # From angles.rb:<br>
208
156
  # angle of Suns' mean anomaly
157
+ # calculated in nutation.rb via celes function
158
+ # sets ta attribute for the rest the methods needing it.
209
159
  # used in equation of time
210
- # and to get true anomaly.
160
+ # and to get true anomaly true longitude via center equation
211
161
  def ma_Sun()
212
- ta = time_julian_century( @ajd )
213
- ade = delta_equinox( ta )[ 2 ] / ASD
214
- @ma = mod_360 ade
162
+ @ta = ( @ajd - DJ00 ) / DJC
163
+ # @ma = delta_equinox()[2]
164
+ @ma = Celes.falp03(@ta)
215
165
  end
216
166
  alias_method :mean_anomaly, :ma_Sun
217
167
 
218
168
  # From angles.rb:<br>
219
169
  # Mean equinox point where right ascension is measured from as zero hours.
220
170
  # # see http://www.iausofa.org/publications/aas04.pdf
221
- def ml_Aries( ta = A2000 )
222
- ta = check_jct_zero( ta )
223
- jd = ta[ 0 ] * DJC # convert first term back to jdn - J2000
171
+ def ml_Aries()
172
+ # jd = @ta * DJC # convert first term back to jdn - J2000
224
173
  # old terms
225
174
  # angle = (36000.770053608 / DJC + 360) * jd # 36000.770053608 = 0.9856473662862 * DJC
226
175
  # total = [ -1.0/3.8710000e7, 3.87930e-4, 0, 100.460618375 ].inject(0.0) {|p, a| p * ta[0] + a} + 180 + angle
227
176
  # newer terms seem to be in arcseconds / 15.0
228
177
  # 0.0000013, - 0.0000062, 0.0931118, 307.4771600, 8639877.3173760, 24110.5493771
229
- angle = (35999.4888224 / DJC + 360) * jd
230
- total = angle + 280.460622404583 +
231
- ta[ 0 ] * 1.281154833333 +
232
- ta[ 1 ] * 3.87965833333e-4 +
233
- ta[ 2 ] * -2.58333333333e-8 +
234
- ta[ 3 ] * 5.41666666666e-9
235
- mod_360( total )
178
+ # angle = (35999.4888224 / DJC + 360) * jd
179
+ # total = angle + 280.460622404583 +
180
+ # @ta[ 0 ] * 1.281154833333 +
181
+ # @ta[ 1 ] * 3.87965833333e-4 +
182
+ # @ta[ 2 ] * -2.58333333333e-8 +
183
+ # @ta[ 3 ] * 5.41666666666e-9
184
+ # total = [5.41666666666e-9, -2.58333333333e-8, 3.87965833333e-4, 1.281154833333, 280.460622404583].inject(0.0) {|p, a| p * @ta + a}
185
+ # mod_360( angle + total ) * D2R
186
+ dt = 67.184
187
+ tt = @ajd + dt / 86400.0#Celes.ut1tt(@ajd, 0, dt)
188
+ Celes.gmst06(@ajd, 0, tt, 0)
236
189
  end
237
190
  alias_method :mean_longitude_aries, :ml_Aries
238
191
 
239
192
  # From angles.rb:<br>
240
193
  # mean obliquity of Earth
241
- def mo_Earth( ta = A2000 )
242
- ta = check_jct_zero( ta )
243
- [ -0.0000000434, -0.000000576, 0.00200340,
244
- -0.0001831, -46.836769, 84381.406 ].inject(0.0) {|p, a| p * ta[0] + a} / ASD
194
+ def mo_Earth()
195
+ # [ -0.0000000434, -0.000000576, 0.00200340,
196
+ # -0.0001831, -46.836769, 84381.406 ].inject(0.0) {|p, a| p * @ta + a} * DAS2R
197
+ Celes.obl06(@ajd, 0)
245
198
  end
246
199
  alias_method :mean_obliquity_of_ecliptic, :mo_Earth
247
200
  alias_method :mean_obliquity, :mo_Earth
@@ -251,79 +204,79 @@ class Eot
251
204
  # in apparent longitude
252
205
  # omega is the longitude of the mean ascending node of the lunar orbit
253
206
  # on the ecliptic plane measured from the mean equinox of date.
254
- def omega( ta = A2000 )
255
- ta = check_jct_zero( ta )
256
- delta_equinox( ta )[ 3 ] / ASD
207
+ def omega()
208
+ # delta_equinox()[ 3 ]
209
+ Celes.faom03(@ta)
257
210
  end
258
211
 
259
212
  # From angles.rb:<br>
260
213
  # solar right ascension
261
- def ra_Sun( ta = A2000 )
262
- ta = check_jct_zero( ta )
263
- y0 = sine_al_Sun( ta ) * cosine_to_Earth( ta )
264
- 180.0 +
265
- rad_to_deg( atan2( -y0, -cosine_al_Sun( ta ) ) )
214
+ def ra_Sun()
215
+ y0 = sine_al_Sun() * cosine_to_Earth()
216
+ Celes.anp(180.0 * PI / 180.0 + atan2( -y0, -cosine_al_Sun() ) )
266
217
  end
267
218
  alias_method :right_ascension, :ra_Sun
268
219
 
269
220
  # From angles.rb:<br>
270
221
  # sine apparent longitude
271
222
  # used in solar declination
272
- def sine_al_Sun( ta = A2000 )
273
- ta = check_jct_zero( ta )
274
- sin( deg_to_rad( al_Sun( ta ) ) )
223
+ def sine_al_Sun()
224
+ sin( al_Sun() )
275
225
  end
276
226
  alias_method :sine_apparent_longitude, :sine_al_Sun
277
227
 
278
228
  # From angles.rb:<br>
279
229
  # sine true longitude
280
230
  # used in solar right ascension
281
- def sine_tl_Sun( ta = A2000 )
282
- ta = check_jct_zero( ta )
283
- sin( deg_to_rad( tl_Sun( ta ) ) )
231
+ def sine_tl_Sun()
232
+ sin( tl_Sun() )
284
233
  end
285
234
  alias_method :sine_true_longitude, :sine_tl_Sun
235
+
236
+ # From angles.rb:<br>
237
+ # sine true obliquity angle of Earth
238
+ # used in solar declination
239
+ def sine_to_Earth()
240
+ sin(to_Earth())
241
+ end
286
242
 
287
243
  # From angles.rb:<br>
288
244
  # angle true anomaly
289
245
  # used in equation of time
290
- def ta_Sun( ta = A2000 )
291
- ta = check_jct_zero( ta )
292
- @ma + center( ta )
246
+ def ta_Sun()
247
+ Celes.anp(@ma + center())
293
248
  end
294
249
  alias_method :true_anomaly, :ta_Sun
295
250
 
296
251
  # From angles.rb:<br>
297
252
  # true longitude of equinox 'first point of aries'
298
253
  # considers nutation
299
- def tl_Aries( ta = A2000 )
300
- ta = check_jct_zero( ta )
301
- eq_of_equinox( ta ) +
302
- ml_Aries( ta )
254
+ def tl_Aries()
255
+ # Celes.anp(eq_of_equinox() + ml_Aries())
256
+ dt = 67.184
257
+ tt = @ajd + dt / 86400.0#Celes.ut1tt(@ajd, 0, dt)
258
+ Celes.gst06a(@ajd, 0, tt, 0)
303
259
  end
304
260
  alias_method :true_longitude_aries, :tl_Aries
305
261
 
306
262
  # From angles.rb:<br>
307
263
  # angle of true longitude sun
308
264
  # used in equation of time
309
- def tl_Sun( ta = A2000 )
310
- ta = check_jct_zero( ta )
311
- mod_360(
312
- gml_Sun( ta ) +
313
- center( ta )
314
- )
265
+ def tl_Sun()
266
+ Celes.anp(gml_Sun() + center())
315
267
  end
316
268
  alias_method :true_longitude, :tl_Sun
269
+ alias_method :ecliptic_longitude, :tl_Sun
270
+ alias_method :lambda, :tl_Sun
317
271
 
318
272
  # From angles.rb:<br>
319
273
  # true obliquity considers nutation
320
- def to_Earth( ta = A2000 )
321
- ta = check_jct_zero( ta )
322
- delta_epsilon( ta ) +
323
- mo_Earth( ta )
274
+ def to_Earth()
275
+ Celes.anp(delta_epsilon() + mo_Earth())
324
276
  end
325
277
  alias_method :obliquity_correction, :to_Earth
326
278
  alias_method :true_obliquity, :to_Earth
279
+ alias_method :toearth, :to_Earth
327
280
 
328
281
  end
329
282