Class: CalcSat::Orbita

Inherits:
Object
  • Object
show all
Defined in:
lib/calc_sat.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initializeOrbita

軌道計算

a  楕円軌道の長半径
e  楕円の離心率(地球が楕円の中心からどれだけの割合ずれているかを表す)
i  軌道傾斜角(楕円軌道面と赤道面がなす角度)
o  昇交点赤経
w  近地点引数
theta  真近点角


19
20
21
22
23
# 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

Instance Method Details

#periodic_time(a) ⇒ Object



34
35
36
37
38
# 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)) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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) ⇒ Object



25
26
27
28
29
30
31
32
# 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