equationoftime 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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