from math import sqrt, acos
G = 6.67428e-11
earth_mass = 5.9736e24
earth_radius = 6.371e6
def potential_energy(m1, m2, r):
return -G * m1 * m2 / r
def orbital_speed(m, r):
return sqrt(G * m / r)
def orbital_kinetic_energy(m, m2, r):
return m * orbital_speed(m2, r) ** 2 / 2
def free_fall_time(y0, y, m):
return (sqrt(y0 ** 3 / (2 * G * m)) *
(sqrt(y / y0 * (1 - y / y0)) + acos(sqrt(y / y0))))
earth_surface_p = potential_energy(1.0, earth_mass, earth_radius)
def print_params(orbit_name, orbit_radius):
print(orbit_name)
my_potential_energy = (potential_energy(1.0, earth_mass, orbit_radius) - earth_surface_p)
my_kinetic_energy = orbital_kinetic_energy(1.0, earth_mass, orbit_radius)
my_total_energy = my_potential_energy + my_kinetic_energy
my_impact_velocity = sqrt(2 * my_potential_energy)
my_free_fall_time = free_fall_time(orbit_radius, earth_radius, earth_mass)
print('Potential energy: {} MJ/kg'.format(my_potential_energy / 1e6))
print('Kinetic energy: {} MJ/kg'.format(my_kinetic_energy / 1e6))
print('Total energy: {} MJ/kg'.format(my_total_energy / 1e6))
print('Impact velocity: {} km/s'.format(my_impact_velocity / 1e3))
print('Free fall time: {} minutes ({} days)'.format(my_free_fall_time / 60, my_free_fall_time / (60 * 60 * 24)))
print()
print_params('ISS (400km)', earth_radius + 0.4e6)
print_params('2000 km', earth_radius + 2e6)
print_params('3000 km', earth_radius + 3e6)
print_params('4000 km', earth_radius + 4e6)
print_params('Geostationary (35,786 km)', earth_radius + 35.786e6)
print_params('Moon (385,000 km)', 385e6)
ZnJvbSBtYXRoIGltcG9ydCBzcXJ0LCBhY29zCgpHID0gNi42NzQyOGUtMTEKZWFydGhfbWFzcyA9IDUuOTczNmUyNAplYXJ0aF9yYWRpdXMgPSA2LjM3MWU2CgpkZWYgcG90ZW50aWFsX2VuZXJneShtMSwgbTIsIHIpOgogICAgcmV0dXJuIC1HICogbTEgKiBtMiAvIHIKCmRlZiBvcmJpdGFsX3NwZWVkKG0sIHIpOgogICAgcmV0dXJuIHNxcnQoRyAqIG0gLyByKQoKZGVmIG9yYml0YWxfa2luZXRpY19lbmVyZ3kobSwgbTIsIHIpOgogICAgcmV0dXJuIG0gKiBvcmJpdGFsX3NwZWVkKG0yLCByKSAqKiAyIC8gMgoKZGVmIGZyZWVfZmFsbF90aW1lKHkwLCB5LCBtKToKICAgIHJldHVybiAoc3FydCh5MCAqKiAzIC8gKDIgKiBHICogbSkpICoKICAgICAgICAgICAgKHNxcnQoeSAvIHkwICogKDEgLSB5IC8geTApKSArIGFjb3Moc3FydCh5IC8geTApKSkpCgplYXJ0aF9zdXJmYWNlX3AgPSBwb3RlbnRpYWxfZW5lcmd5KDEuMCwgZWFydGhfbWFzcywgZWFydGhfcmFkaXVzKQoKZGVmIHByaW50X3BhcmFtcyhvcmJpdF9uYW1lLCBvcmJpdF9yYWRpdXMpOgogICAgcHJpbnQob3JiaXRfbmFtZSkKICAgIG15X3BvdGVudGlhbF9lbmVyZ3kgPSAocG90ZW50aWFsX2VuZXJneSgxLjAsIGVhcnRoX21hc3MsIG9yYml0X3JhZGl1cykgLSBlYXJ0aF9zdXJmYWNlX3ApCiAgICBteV9raW5ldGljX2VuZXJneSA9IG9yYml0YWxfa2luZXRpY19lbmVyZ3koMS4wLCBlYXJ0aF9tYXNzLCBvcmJpdF9yYWRpdXMpCiAgICBteV90b3RhbF9lbmVyZ3kgPSBteV9wb3RlbnRpYWxfZW5lcmd5ICsgbXlfa2luZXRpY19lbmVyZ3kKICAgIG15X2ltcGFjdF92ZWxvY2l0eSA9IHNxcnQoMiAqIG15X3BvdGVudGlhbF9lbmVyZ3kpCiAgICBteV9mcmVlX2ZhbGxfdGltZSA9IGZyZWVfZmFsbF90aW1lKG9yYml0X3JhZGl1cywgZWFydGhfcmFkaXVzLCBlYXJ0aF9tYXNzKQogICAgcHJpbnQoJ1BvdGVudGlhbCBlbmVyZ3k6IHt9IE1KL2tnJy5mb3JtYXQobXlfcG90ZW50aWFsX2VuZXJneSAvIDFlNikpCiAgICBwcmludCgnS2luZXRpYyBlbmVyZ3k6IHt9IE1KL2tnJy5mb3JtYXQobXlfa2luZXRpY19lbmVyZ3kgLyAxZTYpKQogICAgcHJpbnQoJ1RvdGFsIGVuZXJneToge30gTUova2cnLmZvcm1hdChteV90b3RhbF9lbmVyZ3kgIC8gMWU2KSkKICAgIHByaW50KCdJbXBhY3QgdmVsb2NpdHk6IHt9IGttL3MnLmZvcm1hdChteV9pbXBhY3RfdmVsb2NpdHkgLyAxZTMpKQogICAgcHJpbnQoJ0ZyZWUgZmFsbCB0aW1lOiB7fSBtaW51dGVzICh7fSBkYXlzKScuZm9ybWF0KG15X2ZyZWVfZmFsbF90aW1lIC8gNjAsIG15X2ZyZWVfZmFsbF90aW1lIC8gKDYwICogNjAgKiAyNCkpKQogICAgcHJpbnQoKQoKcHJpbnRfcGFyYW1zKCdJU1MgKDQwMGttKScsIGVhcnRoX3JhZGl1cyArIDAuNGU2KQpwcmludF9wYXJhbXMoJzIwMDAga20nLCBlYXJ0aF9yYWRpdXMgKyAyZTYpCnByaW50X3BhcmFtcygnMzAwMCBrbScsIGVhcnRoX3JhZGl1cyArIDNlNikKcHJpbnRfcGFyYW1zKCc0MDAwIGttJywgZWFydGhfcmFkaXVzICsgNGU2KQpwcmludF9wYXJhbXMoJ0dlb3N0YXRpb25hcnkgKDM1LDc4NiBrbSknLCBlYXJ0aF9yYWRpdXMgKyAzNS43ODZlNikKcHJpbnRfcGFyYW1zKCdNb29uICgzODUsMDAwIGttKScsIDM4NWU2KQ==