solarPos 太陽の黄経、地心距離を計算する
long solarPos(double *lng, long j, double d);
lng (出力)黄経(単位、度) j (入力)世界標準時から換算したユリウス日の整数部分 d (入力)世界標準時から換算したユリウス日の小数部分
地心距離(地球・太陽中心間の距離)(単位、キロ・メートル)
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); }
いま使われているグレゴリオ暦では、毎年2月4日立春は黄経315度、 3月21日春分は 0 度、6月22日夏至は90度、8月8日立秋は180度、9月24日 秋分は180度、12月22日冬至は270度。
本プログラムを使うと、ある時刻の太陽の黄経および地球までの距離が わかる。
なお、日本時間JSTを世界標準時UTに直すには、UT = JST - 9 で計算す ればよい。