太陽の位置の計算


関数名
solarPos  太陽の黄経、地心距離を計算する
形式
long solarPos(double *lng, long j, double d);
引数
lng  (出力)黄経(単位、度)
j    (入力)世界標準時から換算したユリウス日の整数部分
d    (入力)世界標準時から換算したユリウス日の小数部分
関数値
地心距離(地球・太陽中心間の距離)(単位、キロ・メートル)
注意事項
数学ライブラリ cos() が必要。

用例(solarPos-test.c
double lng;
solarPos(&lng, i2450266L, 0.0);

プログラム(solarPos.c
long solarPos(double *lng, long j, double d)
{
    typedef struct { double k, a, b; } TBL;
    static TBL l[16] = {
    {  1.9147,  35999.05, 267.52 }, { -0.0048,  35999.05, 267.52 },
    {  0.0200,  71998.1,  265.1  }, {  0.0020,  32964.0,  158.0  },
    {  0.0018,     19.0,  159.0  }, {  0.0018, 445267.0,  208.0  },
    {  0.0015,  45038.0,  254.0  }, {  0.0013,  22519.0,  352.0  },
    {  0.0007,  65929.0,   45.0  }, {  0.0007,   3035.0,  110.0  },
    {  0.0007,   9038.0,   64.0  }, {  0.0006,  33718.0,  316.0  },
    {  0.0005,    155.0,  118.0  }, {  0.0005,   2281.0,  221.0  },
    {  0.0004,  29930.0,   48.0  }, {  0.0004,  31557.0,  161.0  }};
    static TBL c[8] = {
    {  0.016706,  35999.05, 177.53 }, { -0.000042,  35999.05, 177.53 },
    {  0.000139,  71998.0,  175.0  }, {  0.000031, 445267.0,  298.0  },
    {  0.000016,  32964.0,   68.0  }, {  0.000016,  45038.0,  164.0  },
    {  0.000005,  22519.0,  233.0  }, {  0.000005,  33718.0,  226.0  }};
    int i;
    double s, t, r;

    t = (j + d - 2451545.0)/36525.0;
    s = 280.4659 + 36000.7695 * t;
    for (i = 0; i < 16; i++) {
        r = l[i].a * t + l[i].b;
        s += l[i].k * cos(r * 0.017453292519943);
    }
    while (s < 0) s += 360.0;
    while (s >= 360.0) s-= 360.0;
    *lng = s;

    s = 1.000140;
    for (i = 0; i < 8; i++) {
        r = c[i].a * t + c[i].b;
        s += c[i].k * cos(r * 0.017453292519943);
    }
    return (long)(s * 149597870.0);
}
説明
地球から観察すると、太陽は恒星の間の、定まった道の上を動い ている。太陽の通る道を黄道という。したがって、太陽の黄緯はほぼ 0 である。また、黄経の 0 度とは春分点に太陽のいるところである。

いま使われているグレゴリオ暦では、毎年2月4日立春は黄経315度、 3月21日春分は 0 度、6月22日夏至は90度、8月8日立秋は180度、9月24日 秋分は180度、12月22日冬至は270度。

本プログラムを使うと、ある時刻の太陽の黄経および地球までの距離が わかる。

なお、日本時間JSTを世界標準時UTに直すには、UT = JST - 9 で計算す ればよい。

関連関数
世界標準時をユリウス日に換算する