sagantaf

IT関連の技術記事を書くブログ。

Pythonで地球に引っ張られる力を計算するプログラムを作ってみた

 
物体同士が引っ張り合う力、万有引力
 
その計算式を元に、
 「地球からどのくらい離れたら、どのくらいの力が働くか」
を計算するプログラムをPythonで作成してみた。
 
入出力は次のようにしている。
 入力:物体の重さ(kg)
 出力:距離ごとの引っ張られる力(万有引力)の大きさのグラフ
 
万有引力の計算式は以下のようになる。
 
 F = G * ( m1 * m2 ) / ( r * 1000 )^2 
  F:万有引力(N)
  G:重力定数(N*m^2/kg^2)
  m1, m2:質量(kg)
  r:物体間の距離(km)
 
 
この式を地球との距離の計算として使う。
 
スタート地点は、地面から地球の中心までの距離である約6400kmとする。
約10倍離れることになる64000kmを最大距離とする。
グラフでのプロットは見やすさのために6400kmごとにする。
重力定数Gは 6.67 × 10^-11 である。
地球の重さは 5.972 × 10^24 kg である。
 
 
以下、コード例:
 
 

"""
万有引力の計算
F = G * (m1 * m2) / r^2
万有引力 = 重力定数G × (物体1の質量 × 物体2の質量) ÷ (物体間の距離)の2乗
"""


# グラフを描くためにmatplotlibをインポート
import matplotlib.pyplot as plt

 

# グラフを描くための関数
def draw_graph(x, y):
     plt.plot(x, y, marker="o")
     plt.title("Gravity force")
     plt.xlabel("Distance(km)")
     plt.ylabel("Gravitational force(N)")
     plt.show()

 

# 万有引力の計算をするための関数
def calculate_F():
     r = range(6400,64001,5000)
     F = [] # 一旦、万有引力Fを空リストで作っておく
     G = 6.672 * (10**-11) # 重力定数
     m1 = 5.972 * (10**24) # 地球の重さ

     

     # 以下で物体の重さを入力させる
     # floatに変換しているため、文字を入力するとエラー終了する
     m2 = float(input("Please enter mass:"))

 

     # 先ほどrangeで作成した距離のリストrを一つずつ取り出して、forceとして万有引力を計算
     for distance in r:
          force = G*(m1*m2)/((distance*1000)**2)
          F.append(force) # 作成しておいたリストFにひとつずつ追加(append)していく

     

     #グラフを描画

     draw_graph(r, F)

 

# メイン関数
if __name__ == '__main__':

     calculate_F()

 
 
 
たとえば、
60kgの人の体重を入力すると以下のようなグラフになる。

f:id:sagantaf:20171012222413p:plain

 
 
地上では600N近くの力が働いているが、高度約3600km(※)だと3分の1である200Nになっている。
(※ 地球の中心から10000kmは地上から3600kmになるので)
 
つまり、体感で体重が20kgになっているということになる。
 
ちなみに高度3600kmというと、人工衛星ISS(高度400km)よりも遥か高いところになる…