Class: CalcSat::Orbita
- Inherits:
-
Object
- Object
- CalcSat::Orbita
- Defined in:
- lib/calc_sat.rb
Overview
参考文献: 「人工衛星をつくる(宮崎康行 著)」 「CanSat 超小型模擬人工衛星(大学宇宙工学コンソーシアム)」
Instance Method Summary collapse
-
#initialize ⇒ Orbita
constructor
軌道計算 a … 楕円軌道の長半径 e … 楕円の離心率(地球が楕円の中心からどれだけの割合ずれているかを表す) i … 軌道傾斜角(楕円軌道面と赤道面がなす角度) o … 昇交点赤経 w … 近地点引数 theta … 真近点角.
- #periodic_time(a) ⇒ Object
- #sso_check(a, e, i, tolerance = 10**-5)) ⇒ Object
- #velocity(a, e, theta) ⇒ Object
Constructor Details
#initialize ⇒ Orbita
軌道計算
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 |