Monday, 23 October 2017

Gravity and Radius for a Stanford Torus

In science fiction one way to get around the lack of gravity is to produce artificial gravity by centrifugal force - spinning something around in a circle will create an acceleration similar to gravity as it tries to travel in a straight line and therefore away from the centre of rotation.

The rotating space station has become a staple of science fiction, most notably in Stanley Kubrik's 2001: A Space Odyssey, and in Elysium. It was first seriously proposed at Stanford University and has since become known as the Stanford Torus.
One thing I wondered is how big does a space station need to be to produce Earth-like gravity (9.8 m/s2)? It actually depends on how fast it is rotating.
I had a look online and found the equation I was looking for:
Acceleration = velocity2 / radius

So I came up with a Python program to help work it out. Given any two factors in that equation the program will calculate the third plus the period of rotation (how long it takes to make a complete rotation).
#!/usr/bin/python3
import math
print ("Program for calculating stats of Stanford Torus")
rad = input("Please enter radius (m): ")
if rad == "": radGiven = False
elif int(rad) > 0:
    radGiven = True
    rad = float(rad)
    circumf = 2 * math.pi * rad
else: print ("Invalid answer"); radGiven = False
accel = input("Please enter required centripetal acceleration (m/s2): ")
if accel == "": accelGiven = False
elif float(accel) > 0: accelGiven = True; accel = float(accel)
else: print ("Invalid answer"); accelGiven = False
if accelGiven == True and radGiven == True:
    veloc = math.sqrt(accel * rad)
    period = circumf / veloc
    print ("Velocity at edge is " + str(veloc) + "m/s")
    print ("Period at edge is " + str(period) +"sec")
else:
    period = input("Please enter period in sec: ")
    if period == "": print("Not enough information for calculation")
    elif float(period) > 0 and radGiven == True:
        period = float(period)
        veloc = circumf / period
        print ("Velocity at edge is " +str(veloc) + "m/s")
        accel = veloc * veloc / rad
        print("Acceleration at edge is " + str(accel) + "m/s2")
    elif float(period) > 0 and accelGiven == True:
        period = float(period)
        veloc = period * accel
        rad = veloc * veloc / accel
        print ("Velocity at edge is " + str(veloc) + "m/s")
        print ("Radius at edge is " + str(rad) + "m")

And here are some typical results.
======== RESTART: C:\Users\pc\Documents\Programming\StanfordTorus.py ========
Program for calculating stats of Stanford Torus
Please enter radius (m):
200
Please enter required centripetal acceleration (m/s2):
Please enter period in sec:
200
Velocity at edge is 6.283185307179586m/s
Acceleration at edge is 0.19739208802178715m/s2

>>>
======== RESTART: C:\Users\pc\Documents\Programming\StanfordTorus.py ========
Program for calculating stats of Stanford Torus
Please enter radius (m):
Please enter required centripetal acceleration (m/s2):
4.9
Please enter period in sec: 20
Velocity at edge is 98.0m/s
Radius at edge is 1959.9999999999998m

>>>
As you can see, entering a blank into the input for one of the factors will mean the program will try to calculate that missing factor.
Importing the math module gives us a quick and accurate value of Pi, necessary for the velocity at the edge of the torus.

No comments:

Post a Comment