質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Pythonで3次元のグラフをアニメーション化させたい

osamuhito
osamuhito

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0リアクション

0クリップ

296閲覧

投稿2022/07/23 20:24

前提

Pythonで3次元のグラフを作成したのですが、アニメーション化させたいです。
ソースコードのどこを変更または追加すれば良いのかわからなくて困っています。
Pythonを始めたばかりなので、有識者の方に教えていただきたいです。
よろしくお願い致します。

該当のソースコード

Python

%matplotlib notebook import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import matplotlib.animation as animation #万有引力定数を定義 G=6.67e-11 #N-m2/kg2 #参照数量 m_nd=1.989e+30 #kg #太陽の質量 r_nd=5.326e+12 #m #アルファケンタウリの星間距離 v_nd=30000 #m/s #太陽の周りの地球の相対速度 t_nd=79.91*365*24*3600*0.51 #s #アルファケンタウリの軌道期間 #正味定数 K1=G*t_nd*m_nd/(r_nd**2*v_nd) K2=v_nd*t_nd/r_nd #質量の定義 m1=1 #質量が太陽の5倍の質点 m2=1 #質量が太陽の質点 #位置の初期条件 r1=[-0.5,0,0] #m r2=[0.5,0,0] #m r1=np.array(r1,dtype="float64") r2=np.array(r2,dtype="float64") r_com=(m1*r1+m2*r2)/(m1+m2) #速度の初期条件 v1=[0.01,0.01,0] #m/s v2=[-0.05,0,-0.1] #m/s v1=np.array(v1,dtype="float64") v2=np.array(v2,dtype="float64") v_com=(m1*v1+m2*v2)/(m1+m2) #運動方程式を定義 def TwoBodyEquations(w,t,G,m1,m2): r1=w[:3] r2=w[3:6] v1=w[6:9] v2=w[9:12] r=np.linalg.norm(r2-r1) dv1bydt=K1*m2*(r2-r1)/r**3 dv2bydt=K1*m1*(r1-r2)/r**3 dr1bydt=K2*v1 dr2bydt=K2*v2 r_derivs=np.concatenate((dr1bydt,dr2bydt)) derivs=np.concatenate((r_derivs,dv1bydt,dv2bydt)) return derivs #パッケージの初期パラメータ init_params=np.array([r1,r2,v1,v2]) #create array of initial params init_params=init_params.flatten() #flatten array to make it 1D time_span=np.linspace(0,8,500) #8 orbital periods and 500 points #odeを実行 from scipy.integrate import odeint two_body_sol=odeint(TwoBodyEquations,init_params,time_span,args=(G,m1,m2)) r1_sol=two_body_sol[:,:3] r2_sol=two_body_sol[:,3:6] rcom_sol=(m1*r1_sol+m2*r2_sol)/(m1+m2) r1com_sol=r1_sol-rcom_sol r2com_sol=r2_sol-rcom_sol #図を作成 fig=plt.figure(figsize=(5,5)) ax=fig.add_subplot(111,projection="3d") ax.plot(r1com_sol[:,0],r1com_sol[:,1],r1com_sol[:,2],color="darkblue") ax.plot(r2com_sol[:,0],r2com_sol[:,1],r2com_sol[:,2],color="tab:red") #plt.savefig("TwoBodyEquation2.pdf") ax.scatter(r1com_sol[-1,0],r1com_sol[-1,1],r1com_sol[-1,2],color="darkblue",marker="o",s=30) ax.scatter(r2com_sol[-1,0],r2com_sol[-1,1],r2com_sol[-1,2],color="tab:red",marker="o",s=30) #さらにいくつかのベルとホイッスルを追加する ax.set_xlabel("x-coordinate",fontsize=5) ax.set_ylabel("y-coordinate",fontsize=5) ax.set_zlabel("z-coordinate",fontsize=5)```

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/07/24 00:43

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。