物理法則の基本とされる「水平投射」は、Pythonで簡単に計算することができます。
本記事では、Pythonを使用した水平投射の関数実装方法とグラフ化方法について、詳しくご説明します。
水平投射
水平投射とは、物体を水平方向に投げ出す運動のことです。
空気抵抗を無視した場合の水平投射の速度と変位は、初速度\(v_{0}\)、重力加速度\(g\)を使用して、下式で表されます。(鉛直方向下向きを正とした場合)
\(v_{x}=v_{0}\)
\(v_{y}=gt\)
\(x=v_{0}t\)
\(y=\dfrac{1}{2}gt^{2}\)
また軌道の式は以下になります。
\(y=\dfrac{g}{2v_{0}^{2}}x^{2}\)
水平投射の関数実装
NumPyおよびSciPyのscipy.constants.gを使用して、任意の初速度・時間における水平投射の速度と変位を計算する関数実装例を、以下にご紹介します。
#input
import numpy as np
import scipy.constants as const
V0 = input("初速度:")
v0 = int(V0)
T = input("時間:")
t = int(T)
vx = v0
vy = const.g * t
x = v0 * t
y = 1 / 2 * const.g * t**2
print("x方向速度:{:.3f}".format(vx))
print("y方向速度:{:.3f}".format(vy))
print("x方向変位:{:.3f}".format(x))
print("y方向変位:{:.3f}".format(y))
#input
初速度:50
時間:3
#output
x方向速度:50.000
y方向速度:29.420
x方向変位:150.000
y方向変位:44.130
水平投射の速度-時間グラフ
MatplotlibとNumPy、SciPyのscipy.constants.gを使用して、水平投射の速度-時間グラフを作成してみます。
初速度は50とします。
#input
import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const
fig = plt.figure()
A = fig.add_subplot(111)
A.grid(color="k",linestyle="dotted")
A.set_title("velocity of horizontal projectile", fontsize = 16)
A.set_xlabel("t", fontsize = 14)
A.set_ylabel("v", fontsize = 14)
A.set_xlim(0,5)
v0 = 50
t = np.linspace(0,5,129)
vx = v0 *t/t
vy = const.g * t
A.plot(t,vx,color="green",label="vx",lw=3)
A.plot(t,vy,color="orange",label="vy",lw=3)
A.legend()
plt.show()
水平投射の変位-時間グラフ
同様に、水平投射の変位-時間グラフを作成してみます。
#input
import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const
fig = plt.figure()
A = fig.add_subplot(111)
A.grid(color="k",linestyle="dotted")
A.set_title("displacement of horizontal projectile", fontsize = 16)
A.set_xlabel("t", fontsize = 14)
A.set_ylabel("y", fontsize = 14)
A.set_xlim(0,5)
v0 = 50
t = np.linspace(0,5,129)
x = v0 * t
y = 1 / 2 * const.g * t**2
A.plot(t,x,color="red",label="x",lw=3)
A.plot(t,y,color="blue",label="y",lw=3)
A.legend()
plt.show()
水平投射の軌道グラフ
同様に、水平投射の軌道グラフを作成してみます。
#input
import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as const
fig = plt.figure()
A = fig.add_subplot(111)
A.grid(color="k",linestyle="dotted")
A.set_title("trajectory of horizontal projectile", fontsize = 16)
A.set_xlabel("x", fontsize = 14)
A.set_ylabel("y", fontsize = 14)
A.set_xlim(0,1000)
A.set_ylim(2000,0)
v0 = 50
x = np.linspace(0,1000,129)
y = const.g*x**2/(2*v0**2)
A.plot(x,y,color="deepskyblue",label="y",lw=3,ls='--')
plt.show()
まとめ
この記事では、Pythonを使用した水平投射の関数実装方法とグラフ化方法について、ご説明しました。
本記事を参考に、ぜひ試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!