歳差章動の計算

※このページは、JavaScript を使っています。(IE4, NN4 以上を推奨)


《解説》

●歳差(precession)と章動(nutation)について

 惑星位置計算で使われる黄道座標系、赤道座標系には、歳差と章動という基準軸の変動が関係してきます。
 これは、「コマの首振り運動」である歳差運動により生じる「回転軸の変動」のことで、周期的変化をしないもの(周期が非常に長く、計算上、周期項に含めないものも含む)を「歳差」、周期的変化をするものを「章動」と呼んで区別しています。
 歳差や章動の種類を、以下に挙げておきます。

 ・日月(じつげつ)歳差(luni-solar precession)

 「地球の自転運動」が、主に太陽や月の引力の影響を受けて歳差運動をするため、それにつれて「赤道面」が変化します。これによる影響は、長周期のものと短周期のものがありますので、「歳差」と「章動」の両方に関係しますが、このうち長周期のものを「日月歳差」と呼んでいます。
 これにより、春分点は一年あたり、50秒ぐらいの角度で、黄道上を東から西に動きます。

 ・惑星歳差(planetary precession)

 「地球の公転運動」が、主に惑星の引力の影響を受けて歳差運動をするため、それにつれて「黄道面」が変化するものをいいます。これによる影響は、ほとんどが長周期のものなので、「歳差」のみに関係してきます。
 これにより、春分点は一年あたり、0.1秒ぐらいの角度で、赤道上を西から東に動きます。

 ・章動(nutation)

 日月歳差による歳差運動のうち、短周期のものを章動(天文章動、天文学的章動)と呼びます。
 最大のものは、周期が18年ぐらいで、±9秒ぐらいの角度で振動しています。
※参考・・・極運動(polar motion)
 歳差や章動は、地球と自転軸が一体(地球上から見て自転軸は固定)と考えますが、この他にも、地球自体に対して自転軸が運動する現象があります。これを極運動または自由章動と呼びます。最も大きなものは、チャンドラー周期と呼ばれる430日ぐらいの周期で、0.3秒以下の角度です。この値は、正確には予測できないものも多いのですが、地上から見える位置を計算する時に必要な「天文緯度/経度」を正確に求めたい時は、この値を知る必要があります。

 なお、詳しい話は、以下の文献を参考にして下さい。

書名:天体位置表
著者:海上保安庁水路部
発行:日本水路協会(毎年発行)
書名:天体の位置計算 増補版
著者:長沢 工
発行:地人書館(昭和60年)

●色々な基準面による座標系の種類

 黄道座標系、赤道座標系には、歳差と章動という基準面(基準軸)の変動要素がありますので、それらをどのように考慮するのかを明示しておく必要があります。つまり、座標計算を正確に行うには「用語の定義」を明確にしておく必要があります。

1.歳差のみを考慮した座標系

 惑星の位置計算を行うのに良く使われる座標系です。
 この座標系で使われる用語を、以下に示します。

  ・黄道(ecliptic)

黄道面は、惑星歳差の影響を受けて、その傾きが変化します。
特定の日時を指定して歳差の影響を計算した黄道のことを「瞬時の黄道(ecliptic of date)」と呼びます。
なお、黄道面は章動の影響を受けないので、歳差のみを考慮したものが、そのまま真の黄道となります。このため、「平均黄道」や「真黄道」という言葉は使われません。(両者を区別する必要がないということ。)

  ・平均赤道(mean equator)

赤道面は、歳差や章動の影響を受けて、その傾きが変化します。
特定の日時を指定して歳差のみの影響を計算した赤道のことを「瞬時の平均赤道」と呼びます。

  ・平均春分点(mean vernal equinox)

春分点は、歳差や章動の影響を受けて、その位置が変化します。
特定の日時を指定して歳差のみの影響を計算した春分点のことを「瞬時の平均春分点(mean vernal equinox of date)」と呼びます。いわゆる「瞬時の黄道」と「瞬時の平均赤道」の交点です。

  ・平均黄道傾角(mean obliquity of the ecliptic)

黄道傾角は、歳差や章動の影響を受けて、その角度が変化します。
特定の日時を指定して歳差のみの影響を計算した黄道傾角のことを「瞬時の平均黄道傾角(mean obliquity of the ecliptic of date)」と呼びます。いわゆる「瞬時の黄道」と「瞬時の平均赤道」のなす角のことです。

2.歳差・章動を考慮した座標系

 実際の位置を示す(と思われる、理論上の)座標系です。
 この座標系で使われる用語を、以下に示します。

  ・黄道

前に述べたように、黄道面は章動の影響を受けないので、「歳差のみ」を考慮した黄道と「歳差・章動」を考慮した黄道は同一です。このため、「真黄道」という言葉は使われません。(ただし、黄経値は章動の影響を受けますが、これは春分点の移動によるものであり、黄道面そのものが変化したためではありません。)

  ・真赤道(true equator)

「瞬時の平均赤道」に「章動」の影響を加えたものです。

  ・真春分点(true vernal equinox)

「瞬時の平均春分点」に「章動」の影響を加えたものです。

  ・真黄道傾角(true obliquity of the ecliptic)

「瞬時の平均黄道傾角」に「章動」の影響を加えたもので、「瞬時の黄道」と「瞬時の真赤道」のなす角です。

3.固定した座標系

 惑星位置計算などの力学計算を行う際に、座標系が時間と共に変化するのは、はなはだ不都合です。このため、座標系は空間に対して固定しておく必要があります。(実際には、完全に静止した座標系というのは理論的にも存在しないので、見かけ上のものであることに注意。)
 この時に使う固定座標系は、何でもいいのですが、なるべく「瞬時の位置」つまり特定日時での位置に変換が容易である必要があります。

 現在、一般的に使われているのは、「J2000.0(を元期とする)座標系」であり、これは、
    2000年1月1.5日(TD) … 西暦2000年1月1日12時0分(力学時)
における「瞬時の黄道」と「瞬時の平均赤道」、「瞬時の平均春分点」に基づく座標系です。

 また、恒星位置を表す「星表」なども、この固定座標系(J2000.0座標系)で表されています。このため、写真観測などで惑星位置観測を行うには、この固定座標系が便利です。実際、冥王星などの微光天体は、天体位置表ではJ2000.0座標系で表されています。

●歳差の計算方法

 歳差は、基本的に座標系の移動ですので、座標系の回転により計算できます。
 なお、歳差計算の場合の座標系は、「瞬時の黄道」、「瞬時の平均赤道」、「瞬時の平均春分点」を用います。
 詳しい理論はともかくとして、その計算方法を「天体位置表」の図を元にして説明します。

 なお、各種パラメータの計算は、以下の通りです。

ζA=2306".2181*T+0".30188*T^2+0".017998*T^3
A=2306".2181*T+1".09468*T^2+0".018203*T^3
θA=2004".3109*T-0".42665*T^2-0".041833*T^3
εA=23゜26'21".448-46".8150*T-0".00059*T^2+0".001813*T^3
A=5029".0966*T+1".11113*T^2-0".000006*T^3
πA=47".0029*T-0".03302*T^2+0".000060*T^3
ΠA=174゜52'34".982-869".8089*T+0".03536*T^2
ただし、T=(JD-2451545)/36525

1.黄道座標系の歳差計算

 平均春分点方向(黄経0゜黄緯0゜)をx軸、黄経90゜黄緯0゜の方向をy軸、黄緯90゜の方向をz軸とします。

 J2000.0 の黄経黄緯を、任意の時点の黄経黄緯に変換する手順を、以下に示します。

(1) 座標軸を、z軸の回りに(-180゜+ΠA)だけ反時計回りに回転する。
(2) 座標軸を、x軸の回りに(-πA)だけ反時計回りに回転する。
(3) 座標軸を、z軸の回りに(180゜-ΠA-pA)だけ反時計回りに回転する。

 任意の時点の黄経黄緯を、J2000.0 の黄経黄緯に変換する手順を、以下に示します。

(1) 座標軸を、z軸の回りに(-180゜+ΠA+pA)だけ反時計回りに回転する。
(2) 座標軸を、x軸の回りに(πA)だけ反時計回りに回転する。
(3) 座標軸を、z軸の回りに(180゜-ΠA)だけ反時計回りに回転する。

2.赤道座標系の歳差計算

 平均春分点方向(赤経90゜赤緯0゜)をx軸、赤経90゜赤緯0゜の方向をy軸、赤緯90゜の方向をz軸とします。 

 J2000.0 の赤経赤緯を、任意の時点の赤経赤緯に変換する手順を、以下に示します。

(1) 座標軸を、z軸の回りに(90゜-ζA)だけ反時計回りに回転する。
(2) 座標軸を、x軸の回りに(θA)だけ反時計回りに回転する。
(3) 座標軸を、z軸の回りに(-90゜-zA)だけ反時計回りに回転する。

 任意の時点の赤経赤緯を、J2000.0 の赤経赤緯に変換する手順を、以下に示します。

(1) 座標軸を、z軸の回りに(90゜+zA)だけ反時計回りに回転する。
(2) 座標軸を、x軸の回りに(-θA)だけ反時計回りに回転する。
(3) 座標軸を、z軸の回りに(-90゜+ζA)だけ反時計回りに回転する。

 なお、ある任意の時点から別の任意の時点への歳差変換は、J2000.0の座標系に一旦変換して行います。

●章動の計算方法

 章動も、基本的に座標系の移動ですので、座標系の回転により計算できます。
 なお、章動計算というのは、「瞬時の黄道」、「瞬時の平均赤道」、「瞬時の平均春分点」を用いた座標系から、「瞬時の黄道」、「瞬時の真赤道」、「瞬時の真春分点」を用いた座標系への変換になります。

 章動計算では、以下の2つの値がパラメータになります。

  (1) 黄経の章動(nutation in longitude)

章動は、赤道面の変化なので、黄道面には関係ありませんが、春分点は変化します。この春分点の移動量を黄経の変化として表した量です。(平均春分点から見て西側を正とします。)
このうち、長周期のものをΔψ、短周期のものをdψで表しますが、両者を加えたものをΔψと表すこともあります。

  (2) 黄道傾角の章動(nutation in obliquity)

真黄道傾角と平均黄道傾角の差です。
このうち、長周期のものをΔε、短周期のものをdεで表しますが、両者を加えたものをΔεと表すこともあります。
これにより、真黄道傾角εは、
 ε=εA+Δε+dε
となります。

 さて、実際のパラメータ計算ですが、正式な計算を行うのは、ちょっと大変です。このため、実用上充分な、角度の0.1秒以上の項だけを、以下の式で計算します。

Δψ=(-17".1996-0".01742*T)*sin(Ω)
    +(-1".3187-0".00016*T)*sin(2*L)
    +( 0".2062+0".00002*T)*sin(2*Ω)
    +( 0".1426-0".00034*T)*sin(L-Γ)
    +(-0".2274-0".00002*T)*sin(2*m)
Δε=(9".2025+0".00089*T)*cos(Ω)
    +(0".5736-0".00031*T)*cos(2*L)
ただし、
Ω=125゜02'40".40-1934゜08'10".267*T+7".472*T^2
L=280゜27'59".24+36000゜46'11".103*T+1".092*T^2
Γ=282゜56'14".45+6190".055*T+1".645*T^2
m=218゜18'59".92+1336r307゜52'52".581*T+5.279*T^2
T=(JD-2451545)/36525

 このパラメータを使って、以下のように章動量を計算します。

1.黄道座標系の章動計算

 平均春分点方向(黄経0゜黄緯0゜)をx軸、黄経90゜黄緯0゜の方向をy軸、黄緯90゜の方向をz軸とします。

 章動では、黄緯は変化せずに、黄経がΔψだけ移動します。
 任意の時点の「瞬時の黄道」、「瞬時の平均赤道」、「瞬時の平均春分点」に基づく黄経黄緯から、「瞬時の黄道」、「瞬時の真赤道」、「瞬時の真春分点」に基づく黄経黄緯に変換する手順を、以下に示します。

(1) 座標軸を、z軸の回りに(-Δψ)だけ反時計回りに回転する。

2.赤道座標系の章動計算

 平均春分点方向(赤経90゜赤緯0゜)をx軸、赤経90゜赤緯0゜の方向をy軸、赤緯90゜の方向をz軸とします。

 赤道座標系の章動計算は、一度、黄道座標系に変換して行います。
 任意の時点の「瞬時の黄道」、「瞬時の平均赤道」、「瞬時の平均春分点」に基づく赤経赤緯から、「瞬時の黄道」、「瞬時の真赤道」、「瞬時の真春分点」に基づく赤経赤緯に変換する手順を、以下に示します。

(1) 座標軸を、x軸の回りに(εA)だけ反時計回りに回転する。
(2) 座標軸を、z軸の回りに(-Δψ)だけ反時計回りに回転する。
(3) 座標軸を、x軸の回りに(-εA-Δε)だけ反時計回りに回転する。

●プログラムの説明

 JavaScriptプログラムの主要部分は、以下の関数です。
 

関数の機能:
 黄道座標系での歳差を計算する(J2000.0から指定日時への座標変換)
関数の引数:
 cl - J2000.0の黄経 [単位:ラジアン]
 cb - J2000.0の黄緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wpppa - pAの値 [単位:ラジアン]
 Wpisa - πAの値 [単位:ラジアン]
 WpiLa - ΠAの値 [単位:ラジアン]
出力グローバル変数:
 Wcl - 指定日時の黄経 [単位:ラジアン]
 Wcb - 指定日時の黄緯 [単位:ラジアン]
function TransEcPrc2000ToDate(cl,cb)
{
  var x1,y1,z1,y2,z2;

  // z軸の回りに(-180゜+ΠA)
  cl-=-Math.PI+WpiLa;

  // x軸の回りに(-πA)
  x1=Math.cos(cl)*Math.cos(cb);
  y1=Math.sin(cl)*Math.cos(cb);
  z1=Math.sin(cb);
  y2=y1*Math.cos(-Wpisa)+z1*Math.sin(-Wpisa);
  z2=-y1*Math.sin(-Wpisa)+z1*Math.cos(-Wpisa);
  Wcl=Math.atan2(y2,x1);
  if(Wcl<0) Wcl+=Math.PI*2;
  Wcb=Math.asin(z2);

  // z軸の回りに(180゜-ΠA-pA)
  Wcl-=Math.PI-WpiLa-Wpppa;
  if(Wcl<0) Wcl+=Math.PI*2;
}
関数の機能:
 黄道座標系での歳差を計算する(指定日時からJ2000.0への座標変換)
関数の引数:
 cl - 指定日時の黄経 [単位:ラジアン]
 cb - 指定日時の黄緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wpppa - pAの値 [単位:ラジアン]
 Wpisa - πAの値 [単位:ラジアン]
 WpiLa - ΠAの値 [単位:ラジアン]
出力グローバル変数:
 Wcl - J2000.0の黄経 [単位:ラジアン]
 Wcb - J2000.0の黄緯 [単位:ラジアン]
function TransEcPrcDateTo2000(cl,cb)
{
  var x1,y1,z1,y2,z2;

  // z軸の回りに(-180゜+ΠA+pA)
  cl-=-Math.PI+WpiLa+Wpppa;

  // x軸の回りに(πA)
  x1=Math.cos(cl)*Math.cos(cb);
  y1=Math.sin(cl)*Math.cos(cb);
  z1=Math.sin(cb);
  y2=y1*Math.cos(Wpisa)+z1*Math.sin(Wpisa);
  z2=-y1*Math.sin(Wpisa)+z1*Math.cos(Wpisa);
  Wcl=Math.atan2(y2,x1);
  if(Wcl<0) Wcl+=Math.PI*2;
  Wcb=Math.asin(z2);

  // z軸の回りに(180゜-ΠA)
  Wcl-=Math.PI-WpiLa;
  if(Wcl<0) Wcl+=Math.PI*2;
}
関数の機能:
 赤道座標系での歳差を計算する(J2000.0から指定日時への座標変換)
関数の引数:
 ra - J2000.0の赤経 [単位:ラジアン]
 dc - J2000.0の赤緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wzeta - ζAの値 [単位:ラジアン]
 Wzzza - zAの値 [単位:ラジアン]
 Wthea - θAの値 [単位:ラジアン]
出力グローバル変数:
 Wra - 指定日時の赤経 [単位:ラジアン]
 Wdc - 指定日時の赤緯 [単位:ラジアン]
function TransEqPrc2000ToDate(ra,dc)
{
  var x1,y1,z1,y2,z2;

  // z軸の回りに(90゜-ζA)
  ra-=Math.PI/2-Wzeta;

  // x軸の回りに(θA)
  x1=Math.cos(ra)*Math.cos(dc);
  y1=Math.sin(ra)*Math.cos(dc);
  z1=Math.sin(dc);
  y2=y1*Math.cos(Wthea)+z1*Math.sin(Wthea);
  z2=-y1*Math.sin(Wthea)+z1*Math.cos(Wthea);
  Wra=Math.atan2(y2,x1);
  if(Wra<0) Wra+=Math.PI*2;
  Wdc=Math.asin(z2);

  // z軸の回りに(-90゜-zA)
  Wra-=-Math.PI/2-Wzzza;
  if(Wra>Math.PI*2) Wra-=Math.PI*2;
}
関数の機能:
 赤道座標系での歳差を計算する(指定日時からJ2000.0への座標変換)
関数の引数:
 ra - 指定日時の赤経 [単位:ラジアン]
 dc - 指定日時の赤緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wzeta - ζAの値 [単位:ラジアン]
 Wzzza - zAの値 [単位:ラジアン]
 Wthea - θAの値 [単位:ラジアン]
出力グローバル変数:
 Wra - J2000.0の赤経 [単位:ラジアン]
 Wdc - J2000.0の赤緯 [単位:ラジアン]
function TransEqPrcDateTo2000(ra,dc)
{
  var x1,y1,z1,y2,z2;

  // z軸の回りに(90゜+zA)
  ra-=Math.PI/2+Wzzza;

  // x軸の回りに(-θA)
  x1=Math.cos(ra)*Math.cos(dc);
  y1=Math.sin(ra)*Math.cos(dc);
  z1=Math.sin(dc);
  y2=y1*Math.cos(-Wthea)+z1*Math.sin(-Wthea);
  z2=-y1*Math.sin(-Wthea)+z1*Math.cos(-Wthea);
  Wra=Math.atan2(y2,x1);
  if(Wra<0) Wra+=Math.PI*2;
  Wdc=Math.asin(z2);

  // z軸の回りに(-90゜+ζA)
  Wra-=-Math.PI/2+Wzeta;
  if(Wra>Math.PI*2) Wra-=Math.PI*2;
}
関数の機能:
 黄道座標系での章動計算を行なう(指定日時の章動を考慮した座標変換)
関数の引数:
 cl - 指定日時の黄経 [単位:ラジアン]
 cb - 指定日時の黄緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wdpsi - Δψの値 [単位:ラジアン]
出力グローバル変数:
 Wcl - 章動を考慮した指定日時の黄経 [単位:ラジアン]
 Wcb - 章動を考慮した指定日時の黄緯 [単位:ラジアン]
function TransEcNut(cl,cb)
{
  // z軸の回りに(-Δψ)
  Wcl=cl-Wdpsi;
  if(Wcl<0) Wcl+=Math.PI*2;
    else if(Wcl>Math.PI*2) Wcl-=Math.PI*2;
  wcb=cb;
}
関数の機能:
 赤道座標系での章動計算を行なう(指定日時の章動を考慮した座標変換)
関数の引数:
 ra - 指定日時の赤経 [単位:ラジアン]
 dc - 指定日時の赤緯 [単位:ラジアン]
関数の戻り値:
 なし
入力グローバル変数:
 Wepsa - εAの値 [単位:ラジアン]
 Wdpsi - Δψの値 [単位:ラジアン]
 Wdeps - Δεの値 [単位:ラジアン]
出力グローバル変数:
 Wra - 章動を考慮した指定日時の赤経 [単位:ラジアン]
 Wdc - 章動を考慮した指定日時の赤緯 [単位:ラジアン]
function TransEqNut(ra,dc)
{
  var x1,y1,z1,x2,y2,z2;

  x1=Math.cos(ra)*Math.cos(dc);
  y1=Math.sin(ra)*Math.cos(dc);
  z1=Math.sin(dc);

  // x軸の回りに(εA)
  x2=x1;
  y2=y1*Math.cos(Wepsa)+z1*Math.sin(Wepsa);
  z2=-y1*Math.sin(Wepsa)+z1*Math.cos(Wepsa);

  // z軸の回りに(-Δψ)
  x1=x2*Math.cos(-Wdpsi)+y2*Math.sin(-Wdpsi);
  y1=-x2*Math.sin(-Wdpsi)+y2*Math.cos(-Wdpsi);
  z1=z2;

  // x軸の回りに(-εA-Δε)
  x2=x1;
  y2=y1*Math.cos(-Wepsa-Wdeps)+z1*Math.sin(-Wepsa-Wdeps);
  z2=-y1*Math.sin(-Wepsa-Wdeps)+z1*Math.cos(-Wepsa-Wdeps);

  Wra=Math.atan2(y2,x2);
  if(Wra<0) Wra+=Math.PI*2;
  Wdc=Math.asin(z2);
}

☆プログラム実行結果

 以下のプログラムの使用法を、以下に示します。

1.指定日時を入力する。
2.「↓指定日時のパラメータ計算」のボタンを押し、パラメータの計算を行なう。
3.変換を行ないたい場所に数値を入力し、該当するボタンを押すことにより、変換が行なわれる。
4.同じ指定日時で、引き続き他の数値の変換を行ないたい時は、3に戻る。
5.違う指定日時で変換を行ないたい時は、1に戻る。

●指定日時の入力

指定日時:

ユリウス日
ζA
A
θA
εA
A
πA
ΠA
L=
Γ=
M=
Ω=
Δψ=
Δε=


●黄道座標系の歳差計算
 「瞬時の黄道」「瞬時の平均赤道」「瞬時の平均春分点」に基づいた、J2000.0 の黄経黄緯と、指定日時の黄経黄緯との相互変換

黄経:
黄緯:

 

黄経:
黄緯:


●黄道座標系の章動計算
 指定日時の「瞬時の黄道」「瞬時の平均赤道」「瞬時の平均春分点」に基づく黄経黄緯から、「瞬時の黄道」「瞬時の真赤道」「瞬時の真春分点」に基づく黄経黄緯に変換

黄経:
黄緯:

黄経:
黄緯:


●赤道座標系の歳差計算
 「瞬時の黄道」「瞬時の平均赤道」「瞬時の平均春分点」に基づいた、J2000.0 の赤経赤緯と、指定日時の赤経赤緯との相互変換

赤経:
赤緯:

 

赤経:
赤緯:


●赤道座標系の章動計算
 指定日時の「瞬時の黄道」「瞬時の平均赤道」「瞬時の平均春分点」に基づく赤経赤緯から、「瞬時の黄道」「瞬時の真赤道」「瞬時の真春分点」に基づく赤経赤緯に変換

赤経:
赤緯:

赤経:
赤緯:


HOME
inserted by FC2 system