Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Add escape velocity calculator using standard physics formula (TheAlg…
…orithms#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 TheAlgorithms#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>
  • Loading branch information
3 people authored May 10, 2025
commit 95fb181f5a944427fdbc5766cbf4e1cb699d4a6d
67 changes: 67 additions & 0 deletions physics/escape_velocity.py
Original file line number Diff line number Diff line change
@@ -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)