lib/when_exe/ephemeris/moon.rb in when_exe-0.4.2 vs lib/when_exe/ephemeris/moon.rb in when_exe-0.4.3

- old
+ new

@@ -1,333 +1,333 @@ -# -*- coding: utf-8 -*- -=begin - Copyright (C) 2011-2014 Takashi SUGA - - You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive. -=end - -require 'when_exe/ephemeris/sun' -module When - module Ephemeris - - #------------------------------------------ - # 月と地球の本影 計算用データ - #------------------------------------------ - - # 月の地心黄経 - # @private - P0dL = - [[SIN , 93.8 , -1.33 , 0.0040 ], - [SIN , 248.6 , -19.34 , 0.0020 ], - [SIN , 66.0 , 0.2 , 0.0006 ], - [SIN , 249.0 , -19.3 , 0.0006 ]] - # @private - P0L = - [[LIN , 124.8757417 , 4812.6788201 , -1.330000E-7], - [SINL , 338.9158263 , 4771.9886313 , 6.2887 ,+8.99400E-7], # 中心差 - [SIN , 107.236832 , -4133.3536154, 1.2740 ,+1.22612E-6], # 出差 - [SIN , 51.678963 , 8905.3422467, 0.6583 ,-0.32672E-6], # 二均差 - [SIN , 317.831653 , 9543.9772627, 0.2136 ,+1.7988E-6 ], # 中心差 x 2 - [SIN , 176.528826 , 359.990504 , 0.1856 ,-1.561E-8 ], # 年差 - - [SIN , 292.463 , 9664.0403505, 0.1143 ,-0.6812E-6 ], - [SIN , 86.16 , 638.63475182, 0.0588 ,+2.1256E-6 ], - [SIN , 103.78 , -3773.36305278, 0.0572 ,-1.22769E-6], - [SIN , 30.58 , 13677.331 , 0.0533 ], - [SIN , 124.86 , -8545.352 , 0.0459 ], - - [SIN , 342.38 , 4411.998 , 0.0410 ], - [SIN , 25.83 , 4452.671 , 0.0348 ], # 月角差( 二均差 / 2) - [SIN , 155.45 , 5131.979 , 0.0305 ], - [SIN , 240.79 , 758.698 , 0.0153 ], - [SIN , 271.38 , 14436.029 , 0.0125 ], - - [SIN , 226.45 , -4892.052 , 0.0110 ], - [SIN , 55.58 , -13038.696 , 0.0107 ], - [SIN , 296.75 , 14315.966 , 0.0100 ], - [SIN , 34.5 , -8266.71 , 0.0085 ], - [SIN , 290.7 , -4493.34 , 0.0079 ], - - [SIN , 228.2 , 9265.33 , 0.0068 ], - [SIN , 133.1 , 319.32 , 0.0052 ], - [SIN , 202.4 , 4812.66 , 0.0050 ], - [SIN , 68.6 , -19.34 , 0.0048 ], - [SIN , 34.1 , 13317.34 , 0.0040 ], - - [SIN , 9.5 , 18449.32 , 0.0040 ], - [SIN , 93.8 , -1.33 , 0.0040 ], - [SIN , 103.3 , 17810.68 , 0.0039 ], - [SIN , 65.1 , 5410.62 , 0.0037 ], - [SIN , 321.3 , 9183.99 , 0.0027 ], - - [SIN , 174.8 , -13797.39 , 0.0026 ], - [SIN , 82.7 , 998.63 , 0.0024 ], - [SIN , 4.7 , 9224.66 , 0.0024 ], - [SIN , 121.4 , -8185.36 , 0.0022 ], - [SIN , 134.4 , 9903.97 , 0.0021 ], - - [SIN , 173.1 , 719.98 , 0.0021 ], - [SIN , 100.3 , -3413.37 , 0.0021 ], - [SIN , 248.6 , -19.34 , 0.0020 ], - [SIN , 98.1 , 4013.29 , 0.0018 ], - [SIN , 344.1 , 18569.38 , 0.0016 ], - - [SIN , 52.1 , -12678.71 , 0.0012 ], - [SIN , 250.3 , 19208.02 , 0.0011 ], - [SIN , 81.0 , -8586.0 , 0.0009 ], - [SIN , 207.0 , 14037.3 , 0.0008 ], - [SIN , 31.0 , -7906.7 , 0.0008 ], - - [SIN , 346.0 , 4052.0 , 0.0007 ], - [SIN , 294.0 , -4853.3 , 0.0007 ], - [SIN , 90.0 , 278.6 , 0.0007 ], - [SIN , 237.0 , 1118.7 , 0.0006 ], - [SIN , 82.0 , 22582.7 , 0.0005 ], - - [SIN , 276.0 , 19088.0 , 0.0005 ], - [SIN , 73.0 , -17450.7 , 0.0005 ], - [SIN , 112.0 , 5091.3 , 0.0005 ], - [SIN , 116.0 , -398.7 , 0.0004 ], - [SIN , 25.0 , -120.1 , 0.0004 ], - - [SIN , 181.0 , 9584.7 , 0.0004 ], - [SIN , 18.0 , 720.0 , 0.0004 ], - [SIN , 60.0 , -3814.0 , 0.0003 ], - [SIN , 13.0 , -3494.7 , 0.0003 ], - [SIN , 13.0 , 18089.3 , 0.0003 ], - - [SIN , 152.0 , 5492.0 , 0.0003 ], - [SIN , 317.0 , -40.7 , 0.0003 ], - [SIN , 348.0 , 23221.3 , 0.0003 ]] - # 月の地心黄緯 - # @private - P0dB = - [[SIN , 68.64 , -19.341 , 0.0267 ], - [SIN , 342.0 , -19.36 , 0.0043 ], - [SIN , 93.8 , -1.33 , 0.0040 ], - [SIN , 248.6 , -19.34 , 0.0020 ], - [SIN , 358.0 , -19.4 , 0.0005 ]] - # @private - P0B = - [[SINL , 236.231 , 4832.0201248, 5.1281218,-0.3406E-6 ], - [SIN , 215.147 , 9604.0088 , 0.2806 ], - [SIN , 77.316 , 60.0316 , 0.2777 ], - [SIN , 4.563 , -4073.3220 , 0.1732 ], - [SIN , 308.98 , 8965.374 , 0.0554 ], - - [SIN , 343.48 , 698.667 , 0.0463 ], - [SIN , 287.90 , 13737.362 , 0.0326 ], - [SIN , 194.06 , 14375.997 , 0.0172 ], - [SIN , 25.6 , -8845.31 , 0.0093 ], - [SIN , 98.4 , -4711.96 , 0.0088 ], - - [SIN , 1.1 , -3713.33 , 0.0082 ], - [SIN , 322.4 , 5470.66 , 0.0043 ], - [SIN , 266.8 , 18509.35 , 0.0042 ], - [SIN , 188.0 , -4433.31 , 0.0034 ], - [SIN , 312.5 , 8605.38 , 0.0025 ], - - [SIN , 291.4 , 13377.37 , 0.0022 ], - [SIN , 340.0 , 1058.66 , 0.0021 ], - [SIN , 218.6 , 9244.02 , 0.0019 ], - [SIN , 291.8 , -8206.68 , 0.0018 ], - [SIN , 52.8 , 5192.01 , 0.0018 ], - - [SIN , 168.7 , 14496.06 , 0.0017 ], - [SIN , 73.8 , 420.02 , 0.0016 ], - [SIN , 262.1 , 9284.69 , 0.0015 ], - [SIN , 31.7 , 9964.00 , 0.0015 ], - [SIN , 260.8 , -299.96 , 0.0014 ], - - [SIN , 239.7 , 4472.03 , 0.0013 ], - [SIN , 30.4 , 379.35 , 0.0013 ], - [SIN , 304.9 , 4812.68 , 0.0012 ], - [SIN , 12.4 , -4851.36 , 0.0012 ], - [SIN , 173.0 , 19147.99 , 0.0011 ], - - [SIN , 312.9 , -12978.66 , 0.0010 ], - [SIN , 1.0 , 17870.7 , 0.0008 ], - [SIN , 190.0 , 9724.1 , 0.0008 ], - [SIN , 22.0 , 13098.7 , 0.0007 ], - [SIN , 117.0 , 5590.7 , 0.0006 ], - - [SIN , 47.0 , -13617.3 , 0.0006 ], - [SIN , 22.0 , -8485.3 , 0.0005 ], - [SIN , 150.0 , 4193.4 , 0.0005 ], - [SIN , 119.0 , -9483.9 , 0.0004 ], - [SIN , 246.0 , 23281.3 , 0.0004 ], - - [SIN , 301.0 , 10242.6 , 0.0004 ], - [SIN , 126.0 , 9325.4 , 0.0004 ], - [SIN , 104.0 , 14097.4 , 0.0004 ], - [SIN , 340.0 , 22642.7 , 0.0003 ], - [SIN , 270.0 , 18149.4 , 0.0003 ], - - [SIN , 358.0 , -3353.3 , 0.0003 ], - [SIN , 148.0 , 19268.0 , 0.0003 ]] - # 月の視差 - # @private - P0P = - [[COS , 338.92 , 4771.98849108, 0.0518 ,+9.19178E-7], - [COS , 287.2 , -4133.35355678, 0.0095 ,+1.2262E-6 ], - [COS , 51.7 , 8905.34223034, 0.0078 ,-0.3268E-6 ], - [COS , 317.8 , 9543.97698216, 0.0028 ,+1.7988E-6 ], - [COS , 31.0 , 13677.3 , 0.0009 ], - - [COS , 305.0 , -8545.4 , 0.0005 ], - [COS , 284.0 , -3773.4 , 0.0004 ], - [COS , 342.0 , 4412.0 , 0.0003 ]] - - # - # The Moon - # - class Moon < Datum - - class << self - - include Ephemeris - - # 月の真黄経 / CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def true_longitude(t) - y = julian_year_from_1975(+t) - return trigonometric(y, P0L, sind(trigonometric(y, P0dL))) / 360.0 + 38770.0 - end - - # 月の真黄緯/ CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def latitude(t) - y = julian_year_from_1975(+t) - return trigonometric(y, P0B, trigonometric(y, P0dB)) / 360.0 - end - - # 月の距離 / km - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def pi(t) - return 6378.14 / ((trigonometric(julian_year_from_1975(+t), P0P) + 0.9507)*DEG) - end - - # 月の平均黄経 / CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def mean_longitude(t) - return trigonometric(julian_year_from_1975(+t), P0L, 0.0, 1) / 360.0 + 38770.0 - end - end - - # 月の位置 (黄道座標) - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [When::Ephemeris::Coords] - # - def _coords(t) - t = +t - Coords.polar(Moon.true_longitude(t), - Moon.latitude(t), - Moon.pi(t)/AU, - Moon.mean_longitude(t)) + - When.Resource('_ep:Earth')._coords(t) - end - - # 真黄経 / CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def true_longitude(t) - Moon.true_longitude(t) - end - - # 平均黄経 / CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [Numeric] - # - def mean_longitude(t) - Moon.mean_longitude(t) - end - - # 平均運動 / (DEG/YEAR) - # - # @return [Numeric] - # - def mean_motion - P0L[0][2] - end - - # - # オブジェクトの生成 - # @private - def initialize(*args) - options = [args.pop] if args[-1].kind_of?(Hash) - surface_radius, aberration, luminosity, *rest = args - surface_radius ||= 1738.1 - aberration ||= 0.00020 - luminosity ||= 0.40 - args = [surface_radius, aberration, luminosity] + rest - args += options if options - super(*args) - end - end - - # - # The Shadow of the Earth - # - class Shadow < Earth - - # 地球の影の位置 (黄道座標) - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # - # @return [When::Ephemeris::Coords] - # - def _coords(t) - t = +t - radius = Sun.pi(t) + Moon.pi(t)/AU - dl = 0.5 + @aberration / radius / 360 # 略算式に含まれる光行差をキャンセルする - Coords.polar(Sun.true_longitude(t)+dl, 0, radius, Sun.mean_longitude(t)+dl) - end - - # 地球の影の視半径 / CIRCLE - # - # @param [Numeric] t ユリウス日(Terrestrial Time) - # @param [When::TM::TemporalPosition] t - # @param [When::Coordinates::Spatial] base 観測地 - # - # @return [Numeric] - # - def apparent_radius(t, base=nil) - t = +t - radius = Sun.pi(t) * AU - (asin(surface_radius/Moon.pi(t)) - - asin(Ephemeris::Sun::Radius/radius) + - asin(surface_radius/radius)) * 1.02 / CIRCLE - end - end - end -end +# -*- coding: utf-8 -*- +=begin + Copyright (C) 2011-2014 Takashi SUGA + + You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive. +=end + +require 'when_exe/ephemeris/sun' +module When + module Ephemeris + + #------------------------------------------ + # 月と地球の本影 計算用データ + #------------------------------------------ + + # 月の地心黄経 + # @private + P0dL = + [[SIN , 93.8 , -1.33 , 0.0040 ], + [SIN , 248.6 , -19.34 , 0.0020 ], + [SIN , 66.0 , 0.2 , 0.0006 ], + [SIN , 249.0 , -19.3 , 0.0006 ]] + # @private + P0L = + [[LIN , 124.8757417 , 4812.6788201 , -1.330000E-7], + [SINL , 338.9158263 , 4771.9886313 , 6.2887 ,+8.99400E-7], # 中心差 + [SIN , 107.236832 , -4133.3536154, 1.2740 ,+1.22612E-6], # 出差 + [SIN , 51.678963 , 8905.3422467, 0.6583 ,-0.32672E-6], # 二均差 + [SIN , 317.831653 , 9543.9772627, 0.2136 ,+1.7988E-6 ], # 中心差 x 2 + [SIN , 176.528826 , 359.990504 , 0.1856 ,-1.561E-8 ], # 年差 + + [SIN , 292.463 , 9664.0403505, 0.1143 ,-0.6812E-6 ], + [SIN , 86.16 , 638.63475182, 0.0588 ,+2.1256E-6 ], + [SIN , 103.78 , -3773.36305278, 0.0572 ,-1.22769E-6], + [SIN , 30.58 , 13677.331 , 0.0533 ], + [SIN , 124.86 , -8545.352 , 0.0459 ], + + [SIN , 342.38 , 4411.998 , 0.0410 ], + [SIN , 25.83 , 4452.671 , 0.0348 ], # 月角差( 二均差 / 2) + [SIN , 155.45 , 5131.979 , 0.0305 ], + [SIN , 240.79 , 758.698 , 0.0153 ], + [SIN , 271.38 , 14436.029 , 0.0125 ], + + [SIN , 226.45 , -4892.052 , 0.0110 ], + [SIN , 55.58 , -13038.696 , 0.0107 ], + [SIN , 296.75 , 14315.966 , 0.0100 ], + [SIN , 34.5 , -8266.71 , 0.0085 ], + [SIN , 290.7 , -4493.34 , 0.0079 ], + + [SIN , 228.2 , 9265.33 , 0.0068 ], + [SIN , 133.1 , 319.32 , 0.0052 ], + [SIN , 202.4 , 4812.66 , 0.0050 ], + [SIN , 68.6 , -19.34 , 0.0048 ], + [SIN , 34.1 , 13317.34 , 0.0040 ], + + [SIN , 9.5 , 18449.32 , 0.0040 ], + [SIN , 93.8 , -1.33 , 0.0040 ], + [SIN , 103.3 , 17810.68 , 0.0039 ], + [SIN , 65.1 , 5410.62 , 0.0037 ], + [SIN , 321.3 , 9183.99 , 0.0027 ], + + [SIN , 174.8 , -13797.39 , 0.0026 ], + [SIN , 82.7 , 998.63 , 0.0024 ], + [SIN , 4.7 , 9224.66 , 0.0024 ], + [SIN , 121.4 , -8185.36 , 0.0022 ], + [SIN , 134.4 , 9903.97 , 0.0021 ], + + [SIN , 173.1 , 719.98 , 0.0021 ], + [SIN , 100.3 , -3413.37 , 0.0021 ], + [SIN , 248.6 , -19.34 , 0.0020 ], + [SIN , 98.1 , 4013.29 , 0.0018 ], + [SIN , 344.1 , 18569.38 , 0.0016 ], + + [SIN , 52.1 , -12678.71 , 0.0012 ], + [SIN , 250.3 , 19208.02 , 0.0011 ], + [SIN , 81.0 , -8586.0 , 0.0009 ], + [SIN , 207.0 , 14037.3 , 0.0008 ], + [SIN , 31.0 , -7906.7 , 0.0008 ], + + [SIN , 346.0 , 4052.0 , 0.0007 ], + [SIN , 294.0 , -4853.3 , 0.0007 ], + [SIN , 90.0 , 278.6 , 0.0007 ], + [SIN , 237.0 , 1118.7 , 0.0006 ], + [SIN , 82.0 , 22582.7 , 0.0005 ], + + [SIN , 276.0 , 19088.0 , 0.0005 ], + [SIN , 73.0 , -17450.7 , 0.0005 ], + [SIN , 112.0 , 5091.3 , 0.0005 ], + [SIN , 116.0 , -398.7 , 0.0004 ], + [SIN , 25.0 , -120.1 , 0.0004 ], + + [SIN , 181.0 , 9584.7 , 0.0004 ], + [SIN , 18.0 , 720.0 , 0.0004 ], + [SIN , 60.0 , -3814.0 , 0.0003 ], + [SIN , 13.0 , -3494.7 , 0.0003 ], + [SIN , 13.0 , 18089.3 , 0.0003 ], + + [SIN , 152.0 , 5492.0 , 0.0003 ], + [SIN , 317.0 , -40.7 , 0.0003 ], + [SIN , 348.0 , 23221.3 , 0.0003 ]] + # 月の地心黄緯 + # @private + P0dB = + [[SIN , 68.64 , -19.341 , 0.0267 ], + [SIN , 342.0 , -19.36 , 0.0043 ], + [SIN , 93.8 , -1.33 , 0.0040 ], + [SIN , 248.6 , -19.34 , 0.0020 ], + [SIN , 358.0 , -19.4 , 0.0005 ]] + # @private + P0B = + [[SINL , 236.231 , 4832.0201248, 5.1281218,-0.3406E-6 ], + [SIN , 215.147 , 9604.0088 , 0.2806 ], + [SIN , 77.316 , 60.0316 , 0.2777 ], + [SIN , 4.563 , -4073.3220 , 0.1732 ], + [SIN , 308.98 , 8965.374 , 0.0554 ], + + [SIN , 343.48 , 698.667 , 0.0463 ], + [SIN , 287.90 , 13737.362 , 0.0326 ], + [SIN , 194.06 , 14375.997 , 0.0172 ], + [SIN , 25.6 , -8845.31 , 0.0093 ], + [SIN , 98.4 , -4711.96 , 0.0088 ], + + [SIN , 1.1 , -3713.33 , 0.0082 ], + [SIN , 322.4 , 5470.66 , 0.0043 ], + [SIN , 266.8 , 18509.35 , 0.0042 ], + [SIN , 188.0 , -4433.31 , 0.0034 ], + [SIN , 312.5 , 8605.38 , 0.0025 ], + + [SIN , 291.4 , 13377.37 , 0.0022 ], + [SIN , 340.0 , 1058.66 , 0.0021 ], + [SIN , 218.6 , 9244.02 , 0.0019 ], + [SIN , 291.8 , -8206.68 , 0.0018 ], + [SIN , 52.8 , 5192.01 , 0.0018 ], + + [SIN , 168.7 , 14496.06 , 0.0017 ], + [SIN , 73.8 , 420.02 , 0.0016 ], + [SIN , 262.1 , 9284.69 , 0.0015 ], + [SIN , 31.7 , 9964.00 , 0.0015 ], + [SIN , 260.8 , -299.96 , 0.0014 ], + + [SIN , 239.7 , 4472.03 , 0.0013 ], + [SIN , 30.4 , 379.35 , 0.0013 ], + [SIN , 304.9 , 4812.68 , 0.0012 ], + [SIN , 12.4 , -4851.36 , 0.0012 ], + [SIN , 173.0 , 19147.99 , 0.0011 ], + + [SIN , 312.9 , -12978.66 , 0.0010 ], + [SIN , 1.0 , 17870.7 , 0.0008 ], + [SIN , 190.0 , 9724.1 , 0.0008 ], + [SIN , 22.0 , 13098.7 , 0.0007 ], + [SIN , 117.0 , 5590.7 , 0.0006 ], + + [SIN , 47.0 , -13617.3 , 0.0006 ], + [SIN , 22.0 , -8485.3 , 0.0005 ], + [SIN , 150.0 , 4193.4 , 0.0005 ], + [SIN , 119.0 , -9483.9 , 0.0004 ], + [SIN , 246.0 , 23281.3 , 0.0004 ], + + [SIN , 301.0 , 10242.6 , 0.0004 ], + [SIN , 126.0 , 9325.4 , 0.0004 ], + [SIN , 104.0 , 14097.4 , 0.0004 ], + [SIN , 340.0 , 22642.7 , 0.0003 ], + [SIN , 270.0 , 18149.4 , 0.0003 ], + + [SIN , 358.0 , -3353.3 , 0.0003 ], + [SIN , 148.0 , 19268.0 , 0.0003 ]] + # 月の視差 + # @private + P0P = + [[COS , 338.92 , 4771.98849108, 0.0518 ,+9.19178E-7], + [COS , 287.2 , -4133.35355678, 0.0095 ,+1.2262E-6 ], + [COS , 51.7 , 8905.34223034, 0.0078 ,-0.3268E-6 ], + [COS , 317.8 , 9543.97698216, 0.0028 ,+1.7988E-6 ], + [COS , 31.0 , 13677.3 , 0.0009 ], + + [COS , 305.0 , -8545.4 , 0.0005 ], + [COS , 284.0 , -3773.4 , 0.0004 ], + [COS , 342.0 , 4412.0 , 0.0003 ]] + + # + # The Moon + # + class Moon < Datum + + class << self + + include Ephemeris + + # 月の真黄経 / CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def true_longitude(t) + y = julian_year_from_1975(+t) + return trigonometric(y, P0L, sind(trigonometric(y, P0dL))) / 360.0 + 38770.0 + end + + # 月の真黄緯/ CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def latitude(t) + y = julian_year_from_1975(+t) + return trigonometric(y, P0B, trigonometric(y, P0dB)) / 360.0 + end + + # 月の距離 / km + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def pi(t) + return 6378.14 / ((trigonometric(julian_year_from_1975(+t), P0P) + 0.9507)*DEG) + end + + # 月の平均黄経 / CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def mean_longitude(t) + return trigonometric(julian_year_from_1975(+t), P0L, 0.0, 1) / 360.0 + 38770.0 + end + end + + # 月の位置 (黄道座標) + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [When::Ephemeris::Coords] + # + def _coords(t) + t = +t + Coords.polar(Moon.true_longitude(t), + Moon.latitude(t), + Moon.pi(t)/AU, + Moon.mean_longitude(t)) + + When.Resource('_ep:Earth')._coords(t) + end + + # 真黄経 / CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def true_longitude(t) + Moon.true_longitude(t) + end + + # 平均黄経 / CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [Numeric] + # + def mean_longitude(t) + Moon.mean_longitude(t) + end + + # 平均運動 / (DEG/YEAR) + # + # @return [Numeric] + # + def mean_motion + P0L[0][2] + end + + # + # オブジェクトの生成 + # @private + def initialize(*args) + options = [args.pop] if args[-1].kind_of?(Hash) + surface_radius, aberration, luminosity, *rest = args + surface_radius ||= 1738.1 + aberration ||= 0.00020 + luminosity ||= 0.40 + args = [surface_radius, aberration, luminosity] + rest + args += options if options + super(*args) + end + end + + # + # The Shadow of the Earth + # + class Shadow < Earth + + # 地球の影の位置 (黄道座標) + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # + # @return [When::Ephemeris::Coords] + # + def _coords(t) + t = +t + radius = Sun.pi(t) + Moon.pi(t)/AU + dl = 0.5 + @aberration / radius / 360 # 略算式に含まれる光行差をキャンセルする + Coords.polar(Sun.true_longitude(t)+dl, 0, radius, Sun.mean_longitude(t)+dl) + end + + # 地球の影の視半径 / CIRCLE + # + # @param [Numeric] t ユリウス日(Terrestrial Time) + # @param [When::TM::TemporalPosition] t + # @param [When::Coordinates::Spatial] base 観測地 + # + # @return [Numeric] + # + def apparent_radius(t, base=nil) + t = +t + radius = Sun.pi(t) * AU + (asin(surface_radius/Moon.pi(t)) - + asin(Ephemeris::Sun::Radius/radius) + + asin(surface_radius/radius)) * 1.02 / CIRCLE + end + end + end +end