Upgrade to Pro — share decks privately, control downloads, hide ads and more …

重力プログラミング入門「第6回:惑星の位置を計算する」

 重力プログラミング入門「第6回:惑星の位置を計算する」

piacerex

July 20, 2018
Tweet

More Decks by piacerex

Other Decks in Technology

Transcript

  1. 9

  2. 20

  3. 23 2.「万有引力の法則」 あらゆる2つの物体間には、お互いを引き合う力、つまり「引力」 が発生しており、引力は、以下2つの条件が成り立ちます ➢ 各物体の質量の乗算に比例する (重い程強く引き合う) ➢ 物体間の距離の2乗に反比例する (離れると弱まる)

    質量当りにかかる引力の強さを「G 」※、物体の質量を「M 」「m」、 物体間の距離を「r 」とすると、物体間の引力は、以下となります ※「万有引力定数」と呼びます 【Column】 「重力」とは、引力に「自転の遠心力」を合わせた力を指します 本スライドでは、「自転の遠心力」の考慮を割愛し、この2つを同一視します F = G Mm r 2 再掲
  4. 24 2.人工衛星の位置を示すxy軸座標 以下は、地球の中心を0地点とした、人工衛星のxy 座標です 人工衛星の軌道は、「運動方程式」により、以下の通りです ma = F 加速度a を、x

    軸・y 軸に分けることで、移動速度を出しましょう x α θ y F Fcosθ Fsinθ r Position( x, y ) 人工衛星の座標 0 ※m は人工衛星の質量、a は加速度 再掲
  5. 25 2.引力と人工衛星の位置から移動速度を計算 ma はmdx とmdy という偏微分に分割し、F は直交座標(xy 座標)から極座標(方向F と角度θ で表現される座標)へと変換

    します mdx = -F cosθ, mdy = -F sinθ F を前述した引力に展開し、cosθ, sinθ を人工衛星位置x, y と人工衛星までの距離r で表現すると、以下の通りです mdx = -G ・ = -G mdy = -G ・ = -G Mm r 2 x r Mmx r 3 Mm r 2 y r Mmy r 3 ※方向F は、0地点から外側に向かって いればプラス、逆方向ならマイナスと なるため、この場合はマイナスとなる 再掲
  6. 26 2.引力と人工衛星の位置から移動速度を計算 両辺のm を削除したものが、移動速度になります dx = -G , dy =

    -G 地球が0地点なので、r は、x とy から計算できます r = √ x + y G およびM は、以下の通りです ➢ 万有引力定数 G = 6.67259 x 10 m / s ➢ 地球の質量 M = 5.974 x 10 kg GM = 1.267 × 10 km / s Mx r 3 My r 3 2 2 -11 3 2 24 8 3 2 再掲
  7. 27 3.公転軌道をJavaScriptでプログラミング 前章で紐解いた、人工衛星の移動速度を用いて、人工衛星が 地球周回軌道をグルグルと回るシミュレーションをJavaScirptで 作ってみましょう dx = -G , dy

    = -G , r = √ x + y この移動速度の数式をコード化した以下は、数式そのままです ( 最近、関数型しか書いて無いので、状態を持てる・更新できる言語に拒否反応が(-_-u… ) … // 公転対象の位置から重力影響を計算し、速度を変更後、公転対象の位置を移動 moveOnGravityEffect: function() { var r = Math.sqrt( Math.pow( this.x, 2 ) + Math.pow( this.y, 2 ) ); this.dx = this.dx - G * M * this.x / Math.pow( r, 3 ); // x方向の移動速度 this.dy = this.dy - G * M * this.y / Math.pow( r, 3 ); // y方向の移動速度 this.x = this.x + this.dx; // x位置を、x方向の移動速度で更新 this.y = this.y + this.dy; // y位置を、y方向の移動速度で更新 }, … Mx r 3 My r 3 2 2 再掲
  8. 29

  9. 37 3.ラグランジュ点 L4/L5 【余談】 今回のような、3つの天体が、重力によって、お互いに影響し合う シチュエーションで、それら軌道を決定する問題は、「三体問題」 もしくは「多体問題」と呼ばれ、解析的には解けない …つまり、 方程式の変形で解くことは不可能… と言われています

    しかし、3体のうち、1体の質量が、他2体と比べ、無視できるほど 小さい場合は、「制限三体問題」と呼ばれ、特殊解を求めること が可能となります 更に、2体の軌道が、円軌道である場合、「円制限三体問題」 と呼ばれます 今回のラグランジュ点は、この「円制限三体問題」に該当します 再掲
  10. 42 5.「VSOP82」から「VSOP87」へ 右3列が、下記のような、横3列の時系列行列の観測データで、 これを取り出し、右の式で計算すると、xyz座標が取得できます function earth( t ) { X0

    += 0.99982928844*Math.cos( 1.75348568475 + 6283.07584999140 * t ); X0 += 0.00835257300*Math.cos( 1.71034539450 + 12566.15169998280 * t ); X0 += 0.00561144206*Math.cos( 0.00000000000 + 0.00000000000 * t ); … VSOP87 VERSION A1 EARTH VARIABLE 1 (XYZ) *T**0 843 TERMS HELIOCENTRIC DYNAMICAL ECLIPTIC AND EQUINOX J2000 1310 1 0 0 1 0 0 0 0 0 0 0 0 0 -0.00001522262 0.99982928833 0.99982928844 1.75348568475 6283.07584999140 1310 2 0 0 2 0 0 0 0 0 0 0 0 0 0.00814054703 -0.00187001868 0.00835257300 1.71034539450 12566.15169998280 1310 3 0 0 0 0 0 0 0 0 0 0 0 0 0.00000000000 0.00561144206 0.00561144206 0.00000000000 0.00000000000 …
  11. 44 5.「VSOP82」から「VSOP87」へ 下記の式で計算した座標は、3次元で取得されます… …ということは… function earth( t ) { …

    var X = X0 + X1 * t + X2 * t2 + X3 * t3 + X4 * t4 + X5 * t5; var Y = Y0 + Y1 * t + Y2 * t2 + Y3 * t3 + Y4 * t4 + Y5 * t5; var Z = Z0 + Z1 * t + Z2 * t2 + Z3 * t3 + Z4 * t4 + Z5 * t5; return [ X, Y, Z ]; }