mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-05-13 12:47:16 +00:00
Add escape velocity calculator using standard physics formula (#12721)
* Added iterative solution for power calculation * Added iterative solution for power calculation * Added iterative solution for power calculation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added iterative solution for power calculation fixes #12709 * Added iterative solution for power calculation FIXES NUMBER 12709 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Escape velocity is the minimum speed an object must have to break free from a celestial body's gravitational pull without further propulsion. Takes input as the Mass of the Celestial body (M) and Radius fron the center of mass (M) * Fix: added header comment to escape_velocity.py * Trigger re-PR with a minor change * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix: resolve Ruff linter errors and add Wikipedia reference * Delete maths/power_using_iteration.py * Test doctests * Update escape_velocity.py * Update escape_velocity.py * Update escape_velocity.py * Update escape_velocity.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru>
This commit is contained in:
parent
131765574f
commit
95fb181f5a
67
physics/escape_velocity.py
Normal file
67
physics/escape_velocity.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
def escape_velocity(mass: float, radius: float) -> float:
|
||||||
|
"""
|
||||||
|
Calculates the escape velocity needed to break free from a celestial body's
|
||||||
|
gravitational field.
|
||||||
|
|
||||||
|
The formula used is:
|
||||||
|
v = sqrt(2 * G * M / R)
|
||||||
|
|
||||||
|
where:
|
||||||
|
v = escape velocity (m/s)
|
||||||
|
G = gravitational constant (6.67430 * 10^-11 m^3 kg^-1 s^-2)
|
||||||
|
M = mass of the celestial body (kg)
|
||||||
|
R = radius from the center of mass (m)
|
||||||
|
|
||||||
|
Source:
|
||||||
|
https://en.wikipedia.org/wiki/Escape_velocity
|
||||||
|
|
||||||
|
Args:
|
||||||
|
mass (float): Mass of the celestial body in kilograms.
|
||||||
|
radius (float): Radius from the center of mass in meters.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
float: Escape velocity in meters per second, rounded to 3 decimal places.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> escape_velocity(mass=5.972e24, radius=6.371e6) # Earth
|
||||||
|
11185.978
|
||||||
|
>>> escape_velocity(mass=7.348e22, radius=1.737e6) # Moon
|
||||||
|
2376.307
|
||||||
|
>>> escape_velocity(mass=1.898e27, radius=6.9911e7) # Jupiter
|
||||||
|
60199.545
|
||||||
|
>>> escape_velocity(mass=0, radius=1.0)
|
||||||
|
0.0
|
||||||
|
>>> escape_velocity(mass=1.0, radius=0)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ZeroDivisionError: Radius cannot be zero.
|
||||||
|
"""
|
||||||
|
gravitational_constant = 6.67430e-11 # m^3 kg^-1 s^-2
|
||||||
|
|
||||||
|
if radius == 0:
|
||||||
|
raise ZeroDivisionError("Radius cannot be zero.")
|
||||||
|
|
||||||
|
velocity = math.sqrt(2 * gravitational_constant * mass / radius)
|
||||||
|
return round(velocity, 3)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
|
print("Calculate escape velocity of a celestial body...\n")
|
||||||
|
|
||||||
|
try:
|
||||||
|
mass = float(input("Enter mass of the celestial body (in kgs): ").strip())
|
||||||
|
radius = float(input("Enter radius from the center of mass (in ms): ").strip())
|
||||||
|
|
||||||
|
velocity = escape_velocity(mass=mass, radius=radius)
|
||||||
|
print(f"Escape velocity is {velocity} m/s")
|
||||||
|
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid input. Please enter valid numeric values.")
|
||||||
|
except ZeroDivisionError as e:
|
||||||
|
print(e)
|
Loading…
x
Reference in New Issue
Block a user