class CalcSat::Orbita

参考文献: 「人工衛星をつくる(宮崎康行 著)」 「CanSat 超小型模擬人工衛星(大学宇宙工学コンソーシアム)」

Public Class Methods

new() click to toggle source

軌道計算

a  楕円軌道の長半径
e  楕円の離心率(地球が楕円の中心からどれだけの割合ずれているかを表す)
i  軌道傾斜角(楕円軌道面と赤道面がなす角度)
o  昇交点赤経
w  近地点引数
theta  真近点角
# File lib/calc_sat.rb, line 19
def initialize()
  @m_e = 3.986 * 1014  # 地球の重力定数(3.986*1014 [m3/s2])
  @r_e = 6378          # 地球の半径(6378 [km])
  @j_2 = 0.001082628   # 地球の扁平性を表す定数(0.001082628)
end

Public Instance Methods

periodic_time(a) click to toggle source
# File lib/calc_sat.rb, line 34
def periodic_time(a)
  # 周期
  t = 2*Math::PI*(a**1.5 / Math.sqrt(@m_e))
  return t
end
sso_check(a, e, i, tolerance=10**-5) click to toggle source
# File lib/calc_sat.rb, line 40
def sso_check(a, e, i, tolerance=10**-5)
  # 太陽同期軌道(sun_synchronous_orbit)となる条件式の正誤を判定する
  # 太陽同期軌道 … iとaを調整して同じ経度に戻るようにした時の軌道
  # tolerance: 許容誤差
  
  comparison = 1.99 * 10**(-7)
  res = -(
    (3*@j_2*@r_e**2) / (2*a**2*(1-e**2)**2) *
    Math.sqrt(@m_e / a**3) *
    Math.cos(i)
  )
  diff = (res - comparison).abs
  cond = diff < tolerance
  
  if cond
    return "OK"
  else
    return "iとaを修正してください。"
  end
end
velocity(a,e,theta) click to toggle source
# File lib/calc_sat.rb, line 25
def velocity(a,e,theta)
  # 速度
  v = Math.sqrt(
    @m_e * (1 + e**2 + 2*e*Math.cos(theta)) / 
    a * (1 - e**2)
  )
  return v
end