[Python에 의한 과학 · 기술 계산] 포물 운동의 애니메이션을 궤적 (locus)으로 그리기, matplotlib
8884 단어 파이썬matplotlib과학 기술 계산시각화계산 물리학
소개
matplotlib의 ArtistAnimation 메소드를 사용하여,
포물 운동을 행하는 물체의 운동을 궤적도 붙이면서 표시한다.
여기서는 궤적 부분과 물체의 운동 부분의 두 그림을 겹쳐서 표시하는 방법을 사용하였다.
누구나 생각하는 간단하고 쉬운 방법이지만, 살짝 시각화하고 싶을 때는 도움이 될지도 모른다. .
내용
$y$ 방향으로 균일한 중력장에서 각도 $\theta$ 방향으로 수직 던지는 문제이다.
시간 $t = 0$일 때 질점의 위치를 $(x_0,y_0)$, 초속도의 크기를 $V_0$로 하면 시간 $t$에서의 질점의 $x(t)$ 및 $y(t )$좌표는 다음과 같다. 이 질점의 운동은 포물선을 그립니다.
$x(t) = x_0 + V_0\cos(\theta)$
$y(t)= y_0 + V_0\sin(\theta)-0.5\\g\t^2$
이 문제에서는 $V_0 = 100$ m/s, $(x_0, y_0)=(0, 0)$, $\theta=\pi/4$ (=45도)로 설정하여 질점 운동을 그립니다. .
코드
locus.py"""
軌跡付きの放物運動のアニメーション
Animation with a locus
"""
import matplotlib.pyplot as plt
%matplotlib nbagg # Jupyter-notebookでアニメーションを表示する場合に付け加える
from matplotlib.animation import ArtistAnimation # アニメーション作成のためのメソッドをインポート
import numpy as np
fig = plt.figure()
anim = [] #アニメーション用に描くパラパラ図のデータを格納するためのリスト
tt = np.arange(0,15,0.5) # 描画するための時間設定: t=0から15までの0.5刻み。
x_all=[] # 全てのx位置のデータを格納するためのリスト
y_all=[] # 全てのy位置のデータを格納するためのリスト
#初期条件の設定
V0 =100 # 初速度の大きさ: 100 m/s
theta=np.pi/4
x0=0 # 初期位置: x=0
y0=0 #初期位置: y = 0
g=9.8 # 重力定数 [m/s^2]
for t in tt:
x= [V0*np.cos(theta)*t+x0] # x(t)の記述
y = [-( g/2)*t**2+V0*np.sin(theta)*t+y0] # y(t)の記述
x_all.append(x[0]) # xの時々刻々データを格納
y_all.append(y[0]) # yの時々刻々データを格納
# 時刻tにおける質点と,時刻tに至るまでの運動の軌跡の二つの絵を作成し, アニメーション用のリストに格納する。
im=plt.plot(x,y,'o', x_all,y_all, '--', color='red',markersize=10, linewidth = 2, aa=True)
anim.append(im)
anim = ArtistAnimation(fig, anim) # アニメーション作成
# 描画のカスタマイズ
plt.xlabel('X',fontsize=18) #
plt.ylabel('Y',fontsize=18)
plt.xlim(0, 1100)
plt.ylim(-10,300)
plt.hlines([0], 0, 2000, linestyles="-") # y=0に線を描く。
fig.show()
anim.save("t.gif", writer='imagemagick') #アニメーションをt.gifという名前で保存し,gifアニメーションファイルを作成する。
결과
대각선 45도 방향으로 초속 100m/s로 던졌을 경우의 질점의 운동의 애니메이션을 궤적 첨부로 표시한 것.
수정 / 변경 로그 :
2017년 8월 3일: y(t) 중의 질량 m을 제거하였다. T_시나지 님, 지적 해 주셔서 감사합니다!
2017년 8월 10일: anim.save("t.gif")→ anim.save("t.gif", writer='imagemagick')로 변경했다. yoddy 님, 지적 해 주셔서 감사합니다!
참고문헌
ArtistAnimation의 경우,
chez_sugi의 matplotlib로 애니메이션
를 참고로 했습니다.
Reference
이 문제에 관하여([Python에 의한 과학 · 기술 계산] 포물 운동의 애니메이션을 궤적 (locus)으로 그리기, matplotlib), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sci_Haru/items/278b6a50c4e9f4c07dcf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$y$ 방향으로 균일한 중력장에서 각도 $\theta$ 방향으로 수직 던지는 문제이다.
시간 $t = 0$일 때 질점의 위치를 $(x_0,y_0)$, 초속도의 크기를 $V_0$로 하면 시간 $t$에서의 질점의 $x(t)$ 및 $y(t )$좌표는 다음과 같다. 이 질점의 운동은 포물선을 그립니다.
$x(t) = x_0 + V_0\cos(\theta)$
$y(t)= y_0 + V_0\sin(\theta)-0.5\\g\t^2$
이 문제에서는 $V_0 = 100$ m/s, $(x_0, y_0)=(0, 0)$, $\theta=\pi/4$ (=45도)로 설정하여 질점 운동을 그립니다. .
코드
locus.py"""
軌跡付きの放物運動のアニメーション
Animation with a locus
"""
import matplotlib.pyplot as plt
%matplotlib nbagg # Jupyter-notebookでアニメーションを表示する場合に付け加える
from matplotlib.animation import ArtistAnimation # アニメーション作成のためのメソッドをインポート
import numpy as np
fig = plt.figure()
anim = [] #アニメーション用に描くパラパラ図のデータを格納するためのリスト
tt = np.arange(0,15,0.5) # 描画するための時間設定: t=0から15までの0.5刻み。
x_all=[] # 全てのx位置のデータを格納するためのリスト
y_all=[] # 全てのy位置のデータを格納するためのリスト
#初期条件の設定
V0 =100 # 初速度の大きさ: 100 m/s
theta=np.pi/4
x0=0 # 初期位置: x=0
y0=0 #初期位置: y = 0
g=9.8 # 重力定数 [m/s^2]
for t in tt:
x= [V0*np.cos(theta)*t+x0] # x(t)の記述
y = [-( g/2)*t**2+V0*np.sin(theta)*t+y0] # y(t)の記述
x_all.append(x[0]) # xの時々刻々データを格納
y_all.append(y[0]) # yの時々刻々データを格納
# 時刻tにおける質点と,時刻tに至るまでの運動の軌跡の二つの絵を作成し, アニメーション用のリストに格納する。
im=plt.plot(x,y,'o', x_all,y_all, '--', color='red',markersize=10, linewidth = 2, aa=True)
anim.append(im)
anim = ArtistAnimation(fig, anim) # アニメーション作成
# 描画のカスタマイズ
plt.xlabel('X',fontsize=18) #
plt.ylabel('Y',fontsize=18)
plt.xlim(0, 1100)
plt.ylim(-10,300)
plt.hlines([0], 0, 2000, linestyles="-") # y=0に線を描く。
fig.show()
anim.save("t.gif", writer='imagemagick') #アニメーションをt.gifという名前で保存し,gifアニメーションファイルを作成する。
결과
대각선 45도 방향으로 초속 100m/s로 던졌을 경우의 질점의 운동의 애니메이션을 궤적 첨부로 표시한 것.
수정 / 변경 로그 :
2017년 8월 3일: y(t) 중의 질량 m을 제거하였다. T_시나지 님, 지적 해 주셔서 감사합니다!
2017년 8월 10일: anim.save("t.gif")→ anim.save("t.gif", writer='imagemagick')로 변경했다. yoddy 님, 지적 해 주셔서 감사합니다!
참고문헌
ArtistAnimation의 경우,
chez_sugi의 matplotlib로 애니메이션
를 참고로 했습니다.
Reference
이 문제에 관하여([Python에 의한 과학 · 기술 계산] 포물 운동의 애니메이션을 궤적 (locus)으로 그리기, matplotlib), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sci_Haru/items/278b6a50c4e9f4c07dcf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"""
軌跡付きの放物運動のアニメーション
Animation with a locus
"""
import matplotlib.pyplot as plt
%matplotlib nbagg # Jupyter-notebookでアニメーションを表示する場合に付け加える
from matplotlib.animation import ArtistAnimation # アニメーション作成のためのメソッドをインポート
import numpy as np
fig = plt.figure()
anim = [] #アニメーション用に描くパラパラ図のデータを格納するためのリスト
tt = np.arange(0,15,0.5) # 描画するための時間設定: t=0から15までの0.5刻み。
x_all=[] # 全てのx位置のデータを格納するためのリスト
y_all=[] # 全てのy位置のデータを格納するためのリスト
#初期条件の設定
V0 =100 # 初速度の大きさ: 100 m/s
theta=np.pi/4
x0=0 # 初期位置: x=0
y0=0 #初期位置: y = 0
g=9.8 # 重力定数 [m/s^2]
for t in tt:
x= [V0*np.cos(theta)*t+x0] # x(t)の記述
y = [-( g/2)*t**2+V0*np.sin(theta)*t+y0] # y(t)の記述
x_all.append(x[0]) # xの時々刻々データを格納
y_all.append(y[0]) # yの時々刻々データを格納
# 時刻tにおける質点と,時刻tに至るまでの運動の軌跡の二つの絵を作成し, アニメーション用のリストに格納する。
im=plt.plot(x,y,'o', x_all,y_all, '--', color='red',markersize=10, linewidth = 2, aa=True)
anim.append(im)
anim = ArtistAnimation(fig, anim) # アニメーション作成
# 描画のカスタマイズ
plt.xlabel('X',fontsize=18) #
plt.ylabel('Y',fontsize=18)
plt.xlim(0, 1100)
plt.ylim(-10,300)
plt.hlines([0], 0, 2000, linestyles="-") # y=0に線を描く。
fig.show()
anim.save("t.gif", writer='imagemagick') #アニメーションをt.gifという名前で保存し,gifアニメーションファイルを作成する。
대각선 45도 방향으로 초속 100m/s로 던졌을 경우의 질점의 운동의 애니메이션을 궤적 첨부로 표시한 것.
수정 / 변경 로그 :
2017년 8월 3일: y(t) 중의 질량 m을 제거하였다. T_시나지 님, 지적 해 주셔서 감사합니다!
2017년 8월 10일: anim.save("t.gif")→ anim.save("t.gif", writer='imagemagick')로 변경했다. yoddy 님, 지적 해 주셔서 감사합니다!
참고문헌
ArtistAnimation의 경우,
chez_sugi의 matplotlib로 애니메이션
를 참고로 했습니다.
Reference
이 문제에 관하여([Python에 의한 과학 · 기술 계산] 포물 운동의 애니메이션을 궤적 (locus)으로 그리기, matplotlib), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sci_Haru/items/278b6a50c4e9f4c07dcf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Python에 의한 과학 · 기술 계산] 포물 운동의 애니메이션을 궤적 (locus)으로 그리기, matplotlib), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sci_Haru/items/278b6a50c4e9f4c07dcf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)