You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
#!/usr/bin/env python3 |
|
""" |
|
Precalculate expected values for test_inclined_orbits.cpp. |
|
|
|
Usage: |
|
python3 scripts/precalc_inclined_orbits.py |
|
|
|
Outputs C++-style comments with precalculated values for embedding in the test. |
|
Uses scripts/sim_engine.py for the physics engine. |
|
""" |
|
|
|
import sys, math |
|
sys.path.insert(0, 'scripts') |
|
from sim_engine import orbital_to_cartesian, vmag, OrbitalElements, G |
|
|
|
# Molniya orbit |
|
a = 26540000.0 |
|
e = 0.74 |
|
inc = 1.107 |
|
omega = 4.71 |
|
Omega = 0.0 |
|
mu = G * 5.972e24 |
|
|
|
r_peri = a * (1.0 - e) |
|
r_apo = a * (1.0 + e) |
|
r_90 = a * (1.0 - e*e) / (1.0 + e * math.cos(math.pi/2.0)) |
|
r_270 = a * (1.0 - e*e) / (1.0 + e * math.cos(3.0*math.pi/2.0)) |
|
|
|
T = 2 * math.pi * math.sqrt(a**3 / mu) |
|
T_half = T / 2 |
|
|
|
print("# Molniya radii:") |
|
print(f"# r_peri = {r_peri:.6f}") |
|
print(f"# r_90 = {r_90:.6f}") |
|
print(f"# r_apo = {r_apo:.6f}") |
|
print(f"# r_270 = {r_270:.6f}") |
|
print(f"#") |
|
print(f"# Period: {T:.6f} s = {T/3600:.6f} hours") |
|
print(f"# Half period: {T_half:.6f} s = {T_half/3600:.6f} hours") |
|
|
|
# Generic inclined orbit |
|
a2 = 10000000.0 |
|
e2 = 0.5 |
|
inc2 = math.radians(45) |
|
omega2 = math.pi / 2 |
|
|
|
elements2 = OrbitalElements(a=a2, e=e2, nu=0.0, inc=inc2, Omega=0.0, omega=omega2) |
|
pos2, vel2 = orbital_to_cartesian(elements2, 5.972e24) |
|
r2 = vmag(pos2) |
|
z2 = pos2[2] |
|
|
|
print(f"\n# Generic inclined (a={a2}, e={e2}, i=45deg, omega=90deg):") |
|
print(f"# r = {r2:.6f} m") |
|
print(f"# z = {z2:.6f} m")
|
|
|