2002/Contest/世界大会

Problem I : The Solar System

問題概要

太陽系のある惑星 A の軌道の長半径 a1、短半径 b1、周期 t1 と、別の惑星 B の軌道の長半径 a2、短半径 b2 が与えられる。これらの値とケプラーの法則から時刻 t における惑星 B の座標を計算する。ただし次を仮定する。

  • 惑星 B の軌道の長半径、短半径はそれぞれ x 軸、y 軸上にあるものとする。
  • 惑星 B は時刻 0 において (a2,0) にいるものとする。
  • 惑星 B は反時計回りに軌道を描くものとする。

解法

二分法など。

時刻 t を惑星 B の周期 T で割った余りを t' とする。時刻 t における惑星の位置と時刻 t' における惑星の位置は同じであるから、今後は時刻 t' における位置 (x,y) = (a cosθ, b sinθ) を考えることにする(0≦θ<2π)。

時刻 0 から t' までの間に惑星と太陽が結ぶ線分が掃く面積を S とすると

   S = (1/2)abθ - (1/2)bFsinθ … (1)

ただし F は焦点の x 座標で F = √(a^2-b^2)。一方、ケプラーの第二法則から

   S = πab(t'/T) … (2)

式(1)と式(2)から θ に関する方程式が得られるから、あとは数値計算によって根を求めればよい。式(1)は単調増加な関数だから根は 1 つしかない。なお、惑星 B の周期は直接には与えられないのでケプラーの第三法則から計算する。

根の計算は二分法で十分だと思うが、(1) は θ に関して微分可能だから Newton-Raphson 法も利用できる。

議論・その他

  • 下のプログラムは誤差に対する考察をろくにしていないからちょっと怪しいかも。なお実際の計算にあたっては S ではなく f = 2S/b を使用した。[泉,2004/04/04]
  • The 2000's ACM-ICPC Live Archive Around the World にて確認。定数 M_PI の定義を追加する必要がありましたが通りました。[泉,2004/07/09]

ファイルを添付する

fileizumi_solar.cpp 1385件 [詳細]
[添付ファイル一覧] [全ページの添付ファイル一覧]
アップロード可能最大ファイルサイズは 10,240KB です。

管理者パスワード:

添付ファイル: fileizumi_solar.cpp 1385件 [詳細]

Last-modified: 2009-11-06 (金) 13:26:50 (5285d)